+Data = {
        Class = ReferenceContainer
        DefaultDataSource = DDB1
        +DDB1 = { Class = GAMDataSource }    
        +LoggerDataSource = { Class = LoggerDataSource }
        +Timings = { Class = TimingDataSource }
        +Timer = {
            Class = LinuxTimer
            SleepNature = "Busy" // Default | Busy
            ExecutionMode = RealTimeThread // IndependentThread | RealTimeThread
            CPUMask = 0x8 // IndependentThread CPU mask
            Signals = {
                Counter = { Type = uint32 }
                Time = { Type = uint32 }
            }
        }
        >MDSWAVEGEN0<

        +MDSWriter_0 = {
            Class = MDSWriter
            NumberOfBuffers = 2000 //Compulsory. Number of buffers in the circular buffer defined above. Each buffer is capable of holding a copy of all the DataSourceI signals.
            CPUMask = 0x8 //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 = "scdds" //Compulsory. Name of the MDSplus tree.
            PulseNumber = MDSDSTSHOT //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.
            NumberOfPreTriggers = 0 //Compulsory iff StoreOnTrigger = 1.  Number of cycles to store before the trigger.
            NumberOfPostTriggers = 0 //Compulsory iff StoreOnTrigger = 1.  Number of cycles to store after the trigger.
            Signals = {
            /*
                Trigger = { //Compulsory when StoreOnTrigger = 1. Must be set in index 0 of the Signals node. When the value of this signal is 1 data will be stored.
                    Type = uint8 //Type must be uint8
                }
                Time = { //Compulsory when StoreOnTrigger = 1. Can be store in any index, but TimeSignal must be set = 1
                    Type = uint32 //Type must be uint32 or int32
                    TimeSignal = 1 //When set, this signal will be considered as the time source against which all signals will be stored.
                    TimeSignalMultiplier = 1e-9 //Default = 1e-6. Multiplier to convert the time signal units into seconds,
                }
            */
            
                Thread1_Cycletime       = { NodeName = "template.system.CH01" Period = 1 AutomaticSegmentation = 0 MakeSegmentAfterNWrites = 2000 SamplePhase = 0 }
                GAMSimulink1_ReadTime   = { NodeName = "template.system.CH02" Period = 1 AutomaticSegmentation = 0 MakeSegmentAfterNWrites = 2000 SamplePhase = 0 }
                GAMSimulink1_ExecTime   = { NodeName = "template.system.CH03" Period = 1 AutomaticSegmentation = 0 MakeSegmentAfterNWrites = 2000 SamplePhase = 0 }
                GAMSimulink1_WriteTime  = { NodeName = "template.system.CH04" Period = 1 AutomaticSegmentation = 0 MakeSegmentAfterNWrites = 2000 SamplePhase = 0 }
                
                >OUTPUTBUSMDSWRITER<
            }
            /*
            +Messages = { //Optional. If set a message will be fired every time one of the events below occur
                Class = ReferenceContainer
                +TreeOpenedOK = { //Optional, but if set, the name of the Object shall be TreeOpenedOK. If set a message containing a ConfigurationDatabase with param1=PULSE_NUMBER will be sent to the Destination, every time the Tree is successfully opened
                    Class = Message
                    Destination = SomeObject
                    Function = SomeFunction
                    Mode = ExpectsReply
                }
                +TreeOpenedFail = { //Optional, but if set, the name of the Object shall be TreeOpenedFail. If set a message will be sent to the Destination, every time the Tree cannot be successfully opened
                    Class = Message
                    Destination = SomeObject
                    Function = SomeFunction
                    Mode = ExpectsReply
                }
                +TreeFlushed = { //Optional, but if set, the name of the Object shall be TreeFlushed. If set a message will be sent to the Destination, every time the Tree is flushed.
                    Class = Message
                    Destination = SomeObject
                    Function = SomeFunction
                    Mode = ExpectsReply
                }
            }
            */
        }
    }
    +States = {
        Class = ReferenceContainer
        +State1 = {
            Class = RealTimeState
            +Threads = {
                Class = ReferenceContainer
                +Thread1 = {
                    Class = RealTimeThread 
                    CPUs = 0x4
                    Functions = {
                      GAMTimer                         	      
                      Constants
                      Wavegen0TimeBroker
                      Wavegen0DataBroker
                      GAMSimulink1
                      StorageBroker
                      //LoggerBroker
                    }
                }
            }
        }        
    }
    +Scheduler = {
        Class = GAMScheduler
        TimingDataSource = Timings
    }
}