// +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 } }