LoggerAddress = "localhost" LoggerPort = 32767 DefaultCPUs = 1 Version = "$Id: MARTe-WaterTank.cfg,v 1.5 2010/04/20 15:42:02 ppcc_dev Exp $" +WEB = { Class = HttpGroupResource +BROWSE = { Title = "Http Object Browser" Class = HttpGCRCBrowser AddReference = {MARTe StateMachine OBJBROWSE THRBROWSE CFGUpload HTTPSignalServer MatlabSignalServer FlotPlot} } +RGRAPH_LIB_DIR = { Class = HttpDirectoryResource BaseDir = "../3rdPartyLibs/RGraph/libraries" } +PLOTTING_GAM_DIR = { Class = HttpDirectoryResource BaseDir = "../GAMs/PlottingGAM" } +FLOT_DIR = { Class = HttpDirectoryResource BaseDir = "../3rdPartyLibs/flot" } } +HTTPSERVER = { Class = HttpService VerboseLevel = 10 Port = 8085 HttpRelayURL = "ignore.me:1234" Root = WEB } +OBJBROWSE = { Class = HttpClassListResource } +THRBROWSE = { Class = HttpThreadListResource } +MatlabSignalServer = { Class = MATLABHandler } +FlotPlot = { Class = FlotPlot } +HTTPSignalServer = { Class = SignalServer } +CFGUpload = { Class = CFGUploader } +TCPMessageHandler = { Class = TCPMessageHandler ServerPort = 9090 //CPUMask = 8 } +TCPConfigurationHandler = { Class = TCPConfigurationHandler ServerPort = 10010 //CPUMask = 8 MARTeLocation = MARTe } +StateMachine = { Class = StateMachine VerboseLevel = 10 +OFF = { Class = StateMachineState StateCode = 0x0 +START = { Class = StateMachineEvent Value = START NextState = READY +SWITCH_ON = { Class = MessageDeliveryRequest MsecTimeOut = 1000 Sender = StateMachine Destinations = "HTTPSERVER MARTe" Flags = NoReply Message = { Class = Message Content = START } } } } +READY = { Class = StateMachineState StateCode = 0x500 +START_PULSE_SEQUENCE = { Class = StateMachineEvent NextState = INITIALISING Code = 0x701 +NOTIFY = { Class = MessageEnvelope Sender = StateMachine Destination = MARTe +MESSAGE = { Class = Message Content = PREPULSECHECK } } +UPDATE_MSS = { Class = MessageEnvelope Destination = MatlabSignalServer +MESSAGE = { Class = Message Content = AUTODETECT } } +UPDATE_SS = { Class = MessageEnvelope Destination = HTTPSignalServer +MESSAGE = { Class = Message Content = AUTODETECT } } +UPDATE_FLOT = { Class = MessageEnvelope Destination = FlotPlot +MESSAGE = { Class = Message Content = AUTODETECT } } } +UNRECOVERABLE = { Class = StateMachineEvent NextState = UNRECOVERABLE Code = 0x776 } +CONFIG_ERROR = { Class = StateMachineEvent NextState = CONFIG_ERROR Code = 0x777 } +CONFIG_OK = { Class = StateMachineEvent NextState = SAMESTATE Code = 0x778 +NOTIFY = { Class = MessageEnvelope Sender = StateMachine Destination = COULD.BE.A.MIMIC +SENDSTATE = { Class = Message Code = 0x500 } } } +SWITCH_OFF = { Class = StateMachineEvent Value = STOP NextState = READY Code = 0x005 +STOPALL = { Class = MessageDeliveryRequest MsecTimeOut = 1000 Sender = StateMachine Destinations = "HTTPSERVER MARTe" Flags = NoReply Message = { Class = Message Content = STOP } } } } +INITIALISING = { Class = StateMachineState StateCode = 0x508 +PRE_PULSE_CHECKS_FINISHED = { Class = StateMachineEvent NextState = INITIALISED Code = 0x705 } +ABORT = { Class = StateMachineEvent NextState = READY Code = 0x702 +NOTIFY = { Class = MessageEnvelope Sender = StateMachine Destination = MARTe +MESSAGE = { Class = Message Content = PULSESTOP } } } } +INITIALISED = { Class = StateMachineState StateCode = 0x504 +START_PULSE = { Class = StateMachineEvent NextState = EXECUTING Code = 0x708 +NOTIFY = { Class = MessageEnvelope Sender = StateMachine Destination = MARTe +MESSAGE = { Class = Message Content = PULSESTART } } } +ABORT = { Class = StateMachineEvent NextState = READY Code = 0x702 +NOTIFY = { Class = MessageEnvelope Sender = StateMachine Destination = MARTe +MESSAGE = { Class = Message Content = PULSESTOP } } } } +EXECUTING = { Class = StateMachineState StateCode = 0x505 +ENTER = { Class = MessageEnvelope Destination = COULD.BE.A.MIMIC +SENDSTATE = { Class = Message } } +ABORT = { Class = StateMachineEvent NextState = READY Code = 0x702 +NOTIFY = { Class = MessageEnvelope Sender = StateMachine Destination = MARTe +MESSAGE = { Class = Message Content = PULSESTOP } } } +END_PULSE = { Class = StateMachineEvent NextState = POST_PULSE Code = 0x709 +NOTIFY = { Class = MessageEnvelope Sender = StateMachine Destination = MARTe +MESSAGE = { Class = Message Content = PULSESTOP } } } } +POST_PULSE = { Class = StateMachineState StateCode = 0x507 +ENTER = { Class = MessageEnvelope Destination = COULD.BE.A.MIMIC +SENDSTATE = { Class = Message } } +PULSE_CHECKS_FINISHED = { Class = StateMachineEvent NextState = READY Code = 0x703 +NOTIFY = { Class = MessageEnvelope Sender = StateMachine Destination = MARTe +MESSAGE = { Class = Message Content = COLLECTIONCOMPLETED } } } } +NOT_READY = { Class = StateMachineState StateCode = 0x601 +ACTIVATE = { Class = StateMachineEvent NextState = READY Code = 0x705 } } +CONFIG_ERROR = { Class = StateMachineState StateCode = 0x601 +ENTER = { Class = MessageEnvelope Destination = COULD.BE.A.MIMIC +SENDSTATE = { Class = Message } } +CONFIG_OK = { Class = StateMachineEvent NextState = READY Code = 0x778 +NOTIFY = { Class = MessageEnvelope Sender = StateMachine Destination = COULD.BE.A.MIMIC +SENDSTATE = { Class = Message Code = 0x500 } } } } +UNRECOVERABLE = { Class = StateMachineState StateCode = 0x601 +DEFAULT = { Class = StateMachineEvent UserCode = 0 NextState = UNRECOVERABLE } } +COMM_ERROR = { Class = StateMachineState StateCode = 0x601 +ABORT = { Class = StateMachineEvent NextState = SAMESTATE Code = 0x702 } } +DEFAULT = { Class = StateMachineState StateCode = 0x601 +ABORT = { Class = StateMachineEvent NextState = READY Code = 0x702 } } } +MARTeMenu = { Class = MarteSupLib::MARTeMenu AddReference = MARTe.MARTe Title = "MARTe Menu" +MenuA = { Class = MenuContainer Title = "State Machine" +ABORT = { Class = SendMessageMenuEntry Title = Abort Envelope = { Class = MessageEnvelope Sender = MARTeMenu Destination = StateMachine +Message = { Class = Message Content = ABORT Code = 0x702 } } } +START_PULSE_SEQUENCE = { Class = SendMessageMenuEntry Title = "Start Pulse Sequence" Envelope = { Class = MessageEnvelope Sender = MARTeMenu Destination = StateMachine +Message = { Class = Message Content = START_PULSE_SEQUENCE Code = 0x701 } } } +PRE_PULSE_CHECKS_FINISHED = { Class = SendMessageMenuEntry Title = "Pre Pulse Checks Finished" Envelope = { Class = MessageEnvelope Sender = MARTeMenu Destination = StateMachine +Message = { Class = Message Content = PRE_PULSE_CHECKS_FINISHED Code = 0x705 } } } +START_PULSE = { Class = SendMessageMenuEntry Title = "Start Pulse" Envelope = { Class = MessageEnvelope Sender = MARTeMenu Destination = StateMachine +Message = { Class = Message Content = START_PULSE Code = 0x708 } } } +END_PULSE = { Class = SendMessageMenuEntry Title = "End Pulse" Envelope = { Class = MessageEnvelope Sender = MARTeMenu Destination = StateMachine +Message = { Class = Message Content = END_PULSE Code = 0x709 } } } +PULSE_CHECKS_FINISHED = { Class = SendMessageMenuEntry Title = "Pulse Checks Finished" Envelope = { Class = MessageEnvelope Sender = MARTeMenu Destination = StateMachine +Message = { Class = Message Content = PULSE_CHECKS_FINISHED Code = 0x703 } } } } } +EPICSLib = { Class = EPICSHandler RunOnCPU_event = 16 RunOnCPU = 2 PREFIX = TEST-MNGR-PCF1: asyncScan = true debugLevel = 0 asyncDelay = 0.1 maxSimultAsyncIO = 100 scanOn = true ProcessVariable = { pv_1 = { INP = "CycleUsecTime" VAL = 0 NAME = STMA-CYCL-TIME-G PINI = "No" DTYP = "MARTe-translator" DESC = "MARTe Cycle Time" SYNC = excasIoSync LOPR = 0 EGU = "us" SCAN = "Passive" TYPE = aitEnumFloat64 } pv_98 = { INP = "usecTime" VAL = 0 NAME = STMA-USEC-TIME-G PINI = "NO" DTYP = "MARTe-translator" DESC = "MARTe Absolute Time" SYNC = excasIoSync LOPR = 0 EGU = "us" SCAN = "Passive" TYPE = aitEnumUint32 } pv_99 = { HSV = "MINOR" LOLO = 0 SYNC = excasIoSync HHSV = "MAJOR" LSV = "MINOR" EGU = "Volts" LOPR = 0 MDEL = 0 PREC = 2 HIHI = 9 INP = "pumpVoltage" ADEL = 0 LOW = 0 TYPE = aitEnumFloat64 HYST = 0 NAME = STMA-PUMP-VOLT-G LLSV = "MAJOR" SMOO = 0 PINI = "NO" DTYP = "MARTe-translator" HIGH = 8 SCAN = "Passive" VAL = 0 DESC = "MARTe Pump Voltage" HOPR = 10 } pv_100 = { LOLO = 0 HSV = "MINOR" HYST = 0 NAME = STMA-WTER-HGHT-G SMOO = 0 LLSV = "MAJOR" PINI = "NO" DTYP = "MARTe-translator" SYNC = excasIoSync LSV = "MINOR" HHSV = "MAJOR" HIGH = 8 LOPR = 0 MDEL = 0 PREC = 2 SCAN = "Passive" HIHI = 9 INP = "waterHeight" VAL = 0 DESC = "MARTe Water Height" ADEL = 0 LOW = 0 TYPE = aitEnumFloat64 HOPR = 10 } } } +MARTe = { Class = MARTeContainer Level1Name = LEVEL1 StateMachineName = StateMachine MenuContainerName = MARTe +MARTe = { Class = MenuContainer } +DriverPool = { Class = GCReferenceContainer +TimerBoard = { Class = GenericTimerDrv CPUMask = 1 NumberOfOutputs = 0 TimerUsecPeriod = 1000 NumberOfInputs = 2 SynchronizationMethod = Synchronizing } } +Messages = { Class = GCReferenceContainer +FatalErrorMessage = { Class = MessageDeliveryRequest MsecTimeOut = 1000 Destinations = StateMachine Flags = NoReply Message = { Class = Message Content = UNRECOVERABLE Code = 0x776 } } +ConfigLoadErrorMessage = { Class = MessageDeliveryRequest MsecTimeOut = 1000 Destinations = StateMachine Flags = NoReply Message = { Class = Message Content = CONFIG_ERROR Code = 0x777 } } +ConfigLoadOKMessage = { Class = MessageDeliveryRequest MsecTimeOut = 1000 Destinations = StateMachine Flags = NoReply Message = { Class = Message Content = CONFIG_OK Code = 0x778 } } +SafetyErrorMessage = { Class = MessageDeliveryRequest MsecTimeOut = 1000 Destinations = MARTe Flags = NoReply Message = { Class = Message Content = ERROR } } } +ExternalTimeTriggeringService = { Class = InterruptDrivenTTS TsOfflineUsecPhase = 0 TsOnlineUsecPhase = 0 TsOfflineUsecPeriod = 1000 TsOnlineUsecPeriod = 1000 TimeModule = { BoardName = TimerBoard } } +Thread_1 = { Class = RealTimeThread SafetyMsecSleep = 1 RunOnCPU = 2 TriggeringServiceName = MARTe.ExternalTimeTriggeringService OfflineSemaphoreTimeout = 50 ThreadPriority = 28 SMStatusChangeMsecTimeout = 1000 RTStatusChangeMsecTimeout = 1000 +DDB = { Class = DDB } +Timer = { Class = IOGAMs::TimeInputGAM TriggeringServiceName = ExternalTimeTriggeringService BoardName = TimerBoard Signals = { time = { SignalName = usecTime SignalType = uint32 } counter = { SignalName = counter SignalType = int32 } } } +WaveformGen = { Class = WaveformGenerator UsecTimeType = uint32 UsecTime = usecTime +waterHeightReference = { Class = WaveformClassSine Gain = 1 Offset = 2.5 Frequency = 0.1 Tend = 2000 } +zeroSignal = { Class = WaveformClassPoints TimeVector = {0 1} ValueVector = {0 0} Frequency = 1 Tend = 2000 } } +PIDGAM = { Class = PIDGAM TEnd = 2000.0 SamplingTime = 0.001 Ki = 2.00 Kd = 0.20 TStart = 0.0 ControllerOn = On Kp = 3.00 InputSignals = { PIDInput = { SignalName = PIDIn SignalType = PIDGAMInputStructure FlatNamed = True } } OutputSignals = { PIDOutput = { SignalName = PIDOut SignalType = PIDGAMOutputStructure FlatNamed = True } } Remappings = { InputInterface = { feedforward = zeroSignal usecTime = usecTime reference = waterHeightReference measurement = waterHeight } OutputInterface = { feedback = pumpVoltageRequest integratorState = pidIntState controlSignal = pumpVoltageRequest error = pidHeightError } } } +WaterTank = { Class = WaterTank MinVoltage = 0 MaxVoltage = 5 TankArea = 20.0 aFlowRate = 20.0 AnimationEnabled = 1 SVGFileLocation = "../../GAMs/WaterTank/WaterTank.svg" bFlowRate = 50.0 InputSignals = { usecTime = { SignalName = usecTime SignalType = uint32 } voltage = { SignalName = pumpVoltageRequest SignalType = float } } OutputSignals = { height = { SignalName = waterHeight SignalType = float } pumpVoltage = { SignalName = pumpVoltage SignalType = float } } } +Statistic = { Class = WebStatisticGAM Verbose = True FrequencyOfVerbose = 2000000 Signals = { SignalU = { SignalName = usecTime SignalType = uint32 } Signal0 = { SignalName = CycleUsecTime SignalType = float } Signal1 = { SignalName = waterHeightReference SignalType = float } Signal2 = { SignalName = waterHeight SignalType = float } Signal3 = { SignalName = pumpVoltageRequest SignalType = float } Signal4 = { SignalName = pumpVoltage SignalType = float } Signal5 = { SignalName = TimerAbsoluteUsecTime SignalType = float } Signal6 = { SignalName = WaveformGenAbsoluteUsecTime SignalType = float } Signal7 = { SignalName = PIDGAMAbsoluteUsecTime SignalType = float } Signal8 = { SignalName = WaterTankAbsoluteUsecTime SignalType = float } Signal9 = { SignalName = StatisticAbsoluteUsecTime SignalType = float } Signal10 = { SignalName = CollectionAbsoluteUsecTime SignalType = float } Signal11 = { SignalName = TimerRelativeUsecTime SignalType = float } Signal12 = { SignalName = WaveformGenRelativeUsecTime SignalType = float } Signal13 = { SignalName = PIDGAMRelativeUsecTime SignalType = float } Signal14 = { SignalName = WaterTankRelativeUsecTime SignalType = float } Signal15 = { SignalName = StatisticRelativeUsecTime SignalType = float } Signal16 = { SignalName = CollectionRelativeUsecTime SignalType = float } } } +PlottingGAM = { Class = PlottingGAM::PlottingGAM HttpRefreshMsecTime = 500 +Window1 = { Class = PlotWindow::PlotWindow YAxisScale = "Linear" OnlyPositiveY = Yes PlotPixelHeight = 350 PlotPixelWidth = 1250 XAxisScaleFactor = 0.001 XAxisSignalName = usecTime XLabel = "Time (ms)" YLabel = "cm" XAxisSignalType = uint32 PlotLastNBuffers = 3 InputSignals = { Signal1 = { SignalName = waterHeightReference SignalType = float } Signal2 = { SignalName = waterHeight SignalType = float } } } +Window3 = { Class = PlotWindow::PlotWindow YAxisScale = "linear" OnlyPositiveY = Yes PlotPixelHeight = 350 PlotPixelWidth = 1250 XAxisScaleFactor = 0.001 XAxisSignalName = usecTime XLabel = "Time (ms)" YLabel = "Cycle time (s)" XAxisSignalType = uint32 PlotLastNBuffers = 500 InputSignals = { Signal1 = { SignalName = CycleUsecTime SignalType = float } } } } +Collection = { Class = CollectionGAMs::DataCollectionGAM TimeSignalType = uint32 UsecTimeSignalName = usecTime PreTrigger = 200 NOfAcquisitionSamples = 400000 EventTrigger = { MaxFastAcquisitionPoints = 800 PointsForSingleFastAcquisition = 400 TimeWindow0 = { UsecPeriod = 1000 NOfSamples = 40000 } } Signals = { CLOCK = { SignalName = usecTime Cal1 = 1.000000e-06 SignalType = uint32 Cal0 = 0.0 JPFName = "TIME" } CycleTime = { SignalName = CycleUsecTime SignalType = float JPFName = "CycleTime" } WaterReference = { SignalName = waterHeightReference SignalType = float JPFName = "WaterHeightReference" } WaterHeight = { SignalName = waterHeight SignalType = float JPFName = "WaterHeight" } PumpVoltageReq = { SignalName = pumpVoltageRequest SignalType = float JPFName = "PumpVoltageRequest" } PumpVoltage = { SignalName = pumpVoltage SignalType = float JPFName = "PumpVoltage" } PIDError = { SignalName = pidHeightError SignalType = float JPFName = "PIDError" } PIDIntState = { SignalName = pidIntState SignalType = float JPFName = "PIDIntState" } Signal5 = { SignalName = TimerAbsoluteUsecTime SignalType = float JPFName = "TimerAbsoluteUsecTime" } Signal6 = { SignalName = WaveformGenAbsoluteUsecTime SignalType = float JPFName = "WaveformGenAbsoluteUsecTime" } Signal7 = { SignalName = PIDGAMAbsoluteUsecTime SignalType = float JPFName = "PIDGAMAbsoluteUsecTime" } Signal8 = { SignalName = WaterTankAbsoluteUsecTime SignalType = float JPFName = "WaterTankAbsoluteUsecTime" } Signal9 = { SignalName = StatisticAbsoluteUsecTime SignalType = float JPFName = "StatisticAbsoluteUsecTime" } Signal10 = { SignalName = CollectionAbsoluteUsecTime SignalType = float JPFName = "CollectionAbsoluteUsecTime" } Signal11 = { SignalName = TimerRelativeUsecTime SignalType = float JPFName = "TimerRelativeUsecTime" } Signal12 = { SignalName = WaveformGenRelativeUsecTime SignalType = float JPFName = "WaveformGenRelativeUsecTime" } Signal13 = { SignalName = PIDGAMRelativeUsecTime SignalType = float JPFName = "PIDGAMRelativeUsecTime" } Signal14 = { SignalName = WaterTankRelativeUsecTime SignalType = float JPFName = "WaterTankRelativeUsecTime" } Signal15 = { SignalName = StatisticRelativeUsecTime SignalType = float JPFName = "StatisticRelativeUsecTime" } Signal16 = { SignalName = CollectionRelativeUsecTime SignalType = float JPFName = "CollectionRelativeUsecTime" } } } +EPICSStream = { Class = EPICSGAM UsecTimeSignalName = usecTime TimeSignalType = uint32 SignalsServer = EPICSLib NOfAcquisitionSamples = 2000 Signals = { sign1 = { SignalName = CycleUsecTime ServerSubSampling = 100 SignalType = float ServerName = TEST-MNGR-PCF1:STMA-CYCL-TIME-G } sign98 = { SignalName = usecTime ServerSubSampling = 100 SignalType = uint32 ServerName = TEST-MNGR-PCF1:STMA-USEC-TIME-G } sign99 = { SignalName = pumpVoltage ServerSubSampling = 100 SignalType = float ServerName = TEST-MNGR-PCF1:STMA-PUMP-VOLT-G } sign100 = { SignalName = waterHeight ServerSubSampling = 100 SignalType = float ServerName = TEST-MNGR-PCF1:STMA-WTER-HGHT-G } } } Online = "Timer WaveformGen PIDGAM WaterTank PlottingGAM Statistic Collection EPICSStream" Offline = "Timer PlottingGAM Statistic EPICSStream" } }