+EPICSCAInterface= { Class = EPICS::EPICSCAClient StackSize = 1048576 CPUs = 0x1 AutoStart = 0 +PV_STATUS = { Class = EPICS::EPICSPV PVName = "MARTE2-DEMO-APP:STATUS" PVType = int32 } +PV_COMMAND = { Class = EPICS::EPICSPV PVName = "MARTE2-DEMO-APP:COMMAND" PVType = uint32 Event = { Destination = StateMachine PVValue = Function FunctionMap = {{"2", "GOTOPULSING"}, {"1", "GOTOWAITING_FOR_PRE"}, {"0", "GOTOIDLE"}} } } } +WebRoot = { Class = HttpObjectBrowser Root = "." +ObjectBrowse = { Class = HttpObjectBrowser Root = "/" } +ResourcesHtml = { Class = HttpDirectoryResource BaseDir = "../../MARTe2/MARTe2/Resources/HTTP/" } +HttpMessageInterface = { Class = HttpMessageInterface +GOTOIDLE = { Class = Message Destination = StateMachine Function = GOTOIDLE Mode = ExpectsReply } +GOTOWAITING_FOR_PRE = { Class = Message Destination = StateMachine Function = GOTOWAITING_FOR_PRE Mode = ExpectsReply } +GOTOPULSING = { Class = Message Destination = StateMachine Function = GOTOPULSING Mode = ExpectsReply } +GOTOERR = { Class = Message Destination = StateMachineError Function = GOTOERR Mode = ExpectsReply } } } +WebServer = { Class = HttpService Port = 8084 WebRoot = WebRoot Timeout = 0 ListenMaxConnections = 255 AcceptTimeout = 1000 MaxNumberOfThreads = 8 MinNumberOfThreads = 1 } +StateMachine = { Class = StateMachine +INITIAL = { Class = ReferenceContainer +START = { Class = StateMachineEvent NextState = "IDLE" NextStateError = "IDLE" Timeout = 0 +StartHttpServer = { Class = Message Destination = "WebServer" Function = "Start" Mode = ExpectsReply } +StartEPICSCAInterface = { Class = Message Destination = "EPICSCAInterface" Mode = ExpectsReply Function = "Start" } +OpenTreeMsg = { Class = Message Destination = "MdsLoopApp.Data.MDSWriter" Function = OpenTree Mode = ExpectsReply +Parameters = { Class = ConfigurationDatabase param1 = 1 } } +ChangeToStateIdleMsg = { Class = Message Destination = MdsLoopApp Mode = ExpectsReply Function = PrepareNextState +Parameters = { Class = ConfigurationDatabase param1 = Idle } } +StartNextStateExecutionMsg = { Class = Message Destination = MdsLoopApp Function = StartNextStateExecution Mode = ExpectsReply } } } +IDLE = { Class = ReferenceContainer +GOTOWAITING_FOR_PRE = { Class = StateMachineEvent NextState = "WAITING_FOR_PRE" NextStateError = "IDLE" Timeout = 0 +ChangeToRunMsg = { Class = Message Destination = MdsLoopApp Mode = ExpectsReply Function = PrepareNextState +Parameters = { Class = ConfigurationDatabase param1 = Online } } +StopCurrentStateExecutionMsg = { Class = Message Destination = MdsLoopApp Function = StopCurrentStateExecution Mode = ExpectsReply } +StartNextStateExecutionMsg = { Class = Message Destination = MdsLoopApp Function = StartNextStateExecution Mode = ExpectsReply } } } +WAITING_FOR_PRE = { Class = ReferenceContainer +ENTER = { Class = ReferenceContainer +SetStatusPV = { Class = Message Destination = "EPICSCAInterface.PV_STATUS" Function = CAPut Mode = ExpectsReply +Parameters = { Class = ConfigurationDatabase param1 = 1 } } } +GOTOPULSING = { Class = StateMachineEvent NextState = "PULSING" NextStateError = "IDLE" Timeout = 0 +CalcOffSetsMsg = { Class = "Message" Destination = "MdsLoopApp.Functions.GAMElectricProbes" Function = "CalcOffSets" Mode = "ExpectsReply" } +StopCurrentStateExecutionMsg = { Class = Message Destination = MdsLoopApp Function = StopCurrentStateExecution Mode = ExpectsReply } +StartNextStateExecutionMsg = { Class = Message Destination = MdsLoopApp Function = StartNextStateExecution Mode = ExpectsReply } } } +PULSING = { Class = ReferenceContainer +ENTER = { Class = ReferenceContainer +SetStatusPV = { Class = Message Destination = "EPICSCAInterface.PV_STATUS" Function = CAPut Mode = ExpectsReply +Parameters = { Class = ConfigurationDatabase param1 = 2 } } } +GOTOIDLE = { Class = StateMachineEvent NextState = "IDLE" NextStateError = "IDLE" Timeout = 0 +ChangeToIdleMsg = { Class = Message Destination = MdsLoopApp Mode = ExpectsReply Function = PrepareNextState +Parameters = { Class = ConfigurationDatabase param1 = Idle } } +StopCurrentStateExecutionMsg = { Class = Message Destination = MdsLoopApp Function = StopCurrentStateExecution Mode = ExpectsReply } +StartNextStateExecutionMsg = { Class = Message Destination = MdsLoopApp Function = StartNextStateExecution Mode = ExpectsReply } +SetStatusPV = { Class = Message Destination = "EPICSCAInterface.PV_STATUS" Function = CAPut Mode = ExpectsReply +Parameters = { Class = ConfigurationDatabase param1 = 0 } } } } } $MdsLoopApp = { Class = RealTimeApplication +Functions = { Class = ReferenceContainer +GAMTimer = { Class = IOGAM InputSignals = { Counter = { DataSource = Timer Type = uint32 } Time = { Frequency = 10000 DataSource = Timer Type = uint32 } Idle_Thread1_CycleTime = { DataSource = Timings Alias = "Idle.Thread1_CycleTime" Type = uint32 } Run_Thread1_CycleTime = { DataSource = Timings Alias = "Online.Thread1_CycleTime" Type = uint32 } } OutputSignals = { Counter = { DataSource = DDB1 Type = uint32 } Time = { DataSource = DDB1 Type = uint32 } Idle_Thread1_CycleTime = { DataSource = DDB1 Type = uint32 } Run_Thread1_CycleTime = { DataSource = DDB1 Type = uint32 } } } +GAMFileReader = { Class = IOGAM InputSignals = { Time = { DataSource = FileReader_DS Type = uint32 } Langmuir0 = { DataSource = FileReader_DS Type = float32 } Langmuir1 = { DataSource = FileReader_DS Type = float32 } Langmuir2 = { DataSource = FileReader_DS Type = float32 } Langmuir3= { DataSource = FileReader_DS Type = float32 } } OutputSignals = { TimeSdas = { DataSource = "DDB1" Type = uint32 } Langmuir0= { DataSource = "DDB1" Type = float32 } Langmuir1= { DataSource = "DDB1" Type = float32 } Langmuir2= { DataSource = "DDB1" Type = float32 } Langmuir3= { DataSource = "DDB1" Type = float32 } } } /* Langmuir0 = { DataSource = "DDB1" Type = float32 } Langmuir1 = { DataSource = "DDB1" Type = float32 } Langmuir2 = { DataSource = "DDB1" Type = float32 } Langmuir3 = { DataSource = "DDB1" Type = float32 } LangmuirS = { DataSource = "DDB1" Type = float32 NumberOfElements = 4 Ranges = {{1,1}} } LangmuirS = { DataSource = "DDB1" Type = float32 NumberOfElements = 4 Ranges = {{2,2}} } LangmuirS = { DataSource = "DDB1" Type = float32 NumberOfElements = 4 Ranges = {{3,3}} } OutMdsW1 = { DataSource = FileSignalsWriter Type = float32 } OutMdsW2 = { DataSource = FileSignalsWriter Type = float32 } OutMdsW3 = { DataSource = FileSignalsWriter Type = float32 } */ +GAMSignalsWriter = { Class = IOGAM InputSignals = { Time = { DataSource = "DDB1" Type = uint32 } Langmuir0 = { DataSource = "DDB1" Type = float32 } Langmuir1 = { DataSource = "DDB1" Type = float32 } Langmuir2 = { DataSource = "DDB1" Type = float32 } Langmuir3 = { DataSource = "DDB1" Type = float32 } } OutputSignals = { Time = { DataSource = FileSignalsWriter Type = uint32 } OutMdsW0 = { DataSource = FileSignalsWriter Type = float32 } OutMdsW1 = { DataSource = FileSignalsWriter Type = float32 } OutMdsW2 = { DataSource = FileSignalsWriter Type = float32 } OutMdsW3 = { DataSource = FileSignalsWriter Type = float32 } } } +GAMElectricProbes = { Class = ElectricProbesGAM Gain = 5 //Compulsory NumberOfSamplesAvg = 4 //Compulsory ResetInEachState = 0//Compulsory. 1–> reset in each state, 0–> reset if the previous state is different from the next state InputSignals = { Langmuir0 = { DataSource = "DDB1" Type = float32 } Langmuir1 = { DataSource = "DDB1" Type = float32 } Langmuir2 = { DataSource = "DDB1" Type = float32 } Langmuir3 = { DataSource = "DDB1" Type = float32 } } OutputSignals = { SignalEP_OutR = { DataSource = "DDB1" Type = float32 } SignalEP_OutZ = { DataSource = "DDB1" Type = float32 } } } +GAMMDSWriter = { Class = IOGAM InputSignals = { Langmuir0 = { DataSource = "DDB1" Type = float32 } Langmuir1 = { DataSource = "DDB1" Type = float32 } Langmuir2 = { DataSource = "DDB1" Type = float64 } CycleTime = { DataSource = Timings Alias = Idle.Thread1_CycleTime Type = uint32 } } OutputSignals = { OutMdsW0 = { DataSource = MDSWriter Type = float32 } OutMdsW1 = { DataSource = MDSWriter Type = float32 } OutMdsW2 = { DataSource = MDSWriter Type = float64 } CycleTime = { DataSource = MDSWriter Type = uint32 } } } } +Data = { Class = ReferenceContainer DefaultDataSource = DDB1 +DDB1 = { Class = GAMDataSource } +LoggerDataSource = { Class = LoggerDataSource } +Timings = { Class = TimingDataSource } +Timer = { Class = LinuxTimer SleepNature = "Default" ExecutionMode = RealTimeThread Signals = { Counter = { Type = uint32 } Time = { Type = uint32 } } } +FileReader_DS = { Class = FileDataSource::FileReader Filename = "../Analysis/LangmuirSdas_46241.csv" FileFormat = "csv" CSVSeparator = "," Interpolate = "no" Preload = "yes" //Optional EOF = "Last" // "Rewind" } +FileSignalsWriter = { Class = FileDataSource::FileWriter NumberOfBuffers = 10000 CPUMask = 1 StackSize = 10000000 Filename = "IsttokOutput.csv" Overwrite = "yes" FileFormat = "csv" CSVSeparator = "," StoreOnTrigger = 0 Signals = { Time = { Type = uint32 } OutMdsW0 = { Type = float32 } OutMdsW1 = { Type = float32 } OutMdsW2 = { Type = float32 } OutMdsW3 = { Type = float32 } } } +MDSWriter = { Class = MDSWriter NumberOfBuffers = 10 //Compulsory. Number of buffers in the circular buffer defined above. Each buffer is capable of holding a copy of all the DataSourceI signals. CPUMask = 2 //Compulsory. Affinity assigned to the threads responsible for asynchronously flush data into the MDSplus database. StackSize = 10000000 //Compulsory. Stack size of the thread above. TreeName = "isttokoutput" //Compulsory. Name of the MDSplus tree. PulseNumber = 1 //Optional. If -1 a new pulse will be created and the MDSplus pulse number incremented. StoreOnTrigger = 0 //Compulsory. If 0 all the data in the circular buffer is continuously stored. If 1 data is stored when the Trigger signal is 1 (see below). EventName = "updatejScope" //Compulsory. Event sent to jScope when TimeRefresh seconds have elapsed. TimeRefresh = 5 //Compulsory. An event with the name set in the property EventName is sent to jScope when TimeRefresh seconds have elapsed. Signals = { OutMdsW0 = { //As many as required. NodeName = "\TOP.OUT.OUT0" // node of the tree node Period = 0.0001 //Compulsory. Period between signal samples. AutomaticSegmentation = 0 MakeSegmentAfterNWrites = 100 } OutMdsW1 = { //As many as required. NodeName = "\TOP.OUT.OUT1" Period = 0.0001 AutomaticSegmentation = 1 // MakeSegmentAfterNWrites = 100 } OutMdsW2 = { NodeName = "\TOP.OUT.OUT2" Period = 0.0001 AutomaticSegmentation = 0 MakeSegmentAfterNWrites = 100 } CycleTime = { //As many as required. NodeName = "\TOP.OUT.Cycle_Time" // node of the tree node Period = 0.0001 AutomaticSegmentation = 0 MakeSegmentAfterNWrites = 100 } } } } +States = { Class = ReferenceContainer +Idle = { Class = RealTimeState +Threads = { Class = ReferenceContainer +Thread1 = { Class = RealTimeThread CPUs = 0x1 Functions = {GAMTimer } } } } +Online = { Class = RealTimeState +Threads = { Class = ReferenceContainer +Thread1 = { Class = RealTimeThread CPUs = 0x1 Functions = {GAMTimer GAMFileReader GAMElectricProbes GAMSignalsWriter GAMMDSWriter} } } } } +Scheduler = { Class = GAMScheduler TimingDataSource = Timings } } // vim: syntax=cpp ts=4 sw=4 sts=4 sr et