diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..dad38ec527fe3c13371df8625460fd062bdf6aee --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +Autotuners/slprj* diff --git a/Autotuners/autotuner_tito_2012a.mdl b/Autotuners/autotuner_tito_2012a.mdl new file mode 100644 index 0000000000000000000000000000000000000000..4163f067d7ee7fa600e8c001cda5060cf6ba8131 --- /dev/null +++ b/Autotuners/autotuner_tito_2012a.mdl @@ -0,0 +1,3964 @@ +Model { + Name "autotuner_tito_2012a" + Version 7.9 + MdlSubVersion 0 + GraphicalInterface { + NumRootInports 0 + NumRootOutports 0 + ParameterArgumentNames "" + ComputedModelVersion "1.665" + NumModelReferences 0 + NumTestPointedSignals 0 + } + SavedCharacterEncoding "UTF-8" + SaveDefaultBlockParams on + ScopeRefreshTime 0.035000 + OverrideScopeRefreshTime off + DisableAllScopes off + DataTypeOverride "UseLocalSettings" + DataTypeOverrideAppliesTo "AllNumericTypes" + MinMaxOverflowLogging "UseLocalSettings" + MinMaxOverflowArchiveMode "Overwrite" + FPTRunName "Run 1" + MaxMDLFileLineLength 120 + Created "Sun Jun 12 02:17:00 2005" + Creator "josefinb" + UpdateHistory "UpdateHistoryNever" + ModifiedByFormat "%<Auto>" + LastModifiedBy "josefinb" + ModifiedDateFormat "%<Auto>" + LastModifiedDate "Fri Dec 08 13:12:03 2017" + RTWModifiedTimeStamp 434639519 + ModelVersionFormat "1.%<AutoIncrement:665>" + ConfigurationManager "none" + SampleTimeColors off + SampleTimeAnnotations off + LibraryLinkDisplay "none" + WideLines off + ShowLineDimensions on + ShowPortDataTypes off + ShowDesignRanges off + ShowLoopsOnError on + IgnoreBidirectionalLines off + ShowStorageClass off + ShowTestPointIcons on + ShowSignalResolutionIcons on + ShowViewerIcons on + SortedOrder off + ExecutionContextIcon on + ShowLinearizationAnnotations on + BlockNameDataTip off + BlockParametersDataTip on + BlockDescriptionStringDataTip off + ToolBar on + StatusBar on + BrowserShowLibraryLinks off + BrowserLookUnderMasks off + SimulationMode "normal" + LinearizationMsg "none" + Profile off + ParamWorkspaceSource "MATLABWorkspace" + AccelSystemTargetFile "accel.tlc" + AccelTemplateMakefile "accel_default_tmf" + AccelMakeCommand "make_rtw" + TryForcingSFcnDF off + RecordCoverage off + CovPath "/" + CovSaveName "covdata" + CovMetricSettings "dw" + CovNameIncrementing off + CovHtmlReporting on + CovForceBlockReductionOff on + covSaveCumulativeToWorkspaceVar on + CovSaveSingleToWorkspaceVar on + CovCumulativeVarName "covCumulativeData" + CovCumulativeReport off + CovReportOnPause on + CovModelRefEnable "Off" + CovExternalEMLEnable off + ExtModeBatchMode off + ExtModeEnableFloating on + ExtModeTrigType "manual" + ExtModeTrigMode "oneshot" + ExtModeTrigPort "1" + ExtModeTrigElement "any" + ExtModeTrigDuration 1000 + ExtModeTrigDurationFloating "auto" + ExtModeTrigHoldOff 0 + ExtModeTrigDelay 0 + ExtModeTrigDirection "rising" + ExtModeTrigLevel 0 + ExtModeArchiveMode "off" + ExtModeAutoIncOneShot off + ExtModeIncDirWhenArm off + ExtModeAddSuffixToVar off + ExtModeWriteAllDataToWs off + ExtModeArmWhenConnect off + ExtModeSkipDownloadWhenConnect off + ExtModeLogAll on + ExtModeAutoUpdateStatusClock on + BufferReuse on + ShowModelReferenceBlockVersion off + ShowModelReferenceBlockIO off + Array { + Type "Handle" + Dimension 1 + Simulink.ConfigSet { + $ObjectID 1 + Version "1.12.0" + Array { + Type "Handle" + Dimension 8 + Simulink.SolverCC { + $ObjectID 2 + Version "1.12.0" + StartTime "0.0" + StopTime "simopt.Tf" + AbsTol "auto" + FixedStep "simopt.h" + InitialStep "auto" + MaxNumMinSteps "-1" + MaxOrder 5 + ZcThreshold "auto" + ConsecutiveZCsStepRelTol "10*128*eps" + MaxConsecutiveZCs "1000" + ExtrapolationOrder 4 + NumberNewtonIterations 1 + MaxStep "auto" + MinStep "auto" + MaxConsecutiveMinStep "1" + RelTol "1e-3" + SolverMode "Auto" + EnableConcurrentExecution off + ConcurrentTasks off + Solver "ode3" + SolverName "ode3" + SolverJacobianMethodControl "auto" + ShapePreserveControl "DisableAll" + ZeroCrossControl "UseLocalSettings" + ZeroCrossAlgorithm "Nonadaptive" + AlgebraicLoopSolver "TrustRegion" + SolverResetMethod "Fast" + PositivePriorityOrder off + AutoInsertRateTranBlk off + SampleTimeConstraint "Unconstrained" + InsertRTBMode "Whenever possible" + } + Simulink.DataIOCC { + $ObjectID 3 + Version "1.12.0" + Decimation "1" + ExternalInput "[t, u]" + FinalStateName "xf" + InitialState "x0" + LimitDataPoints off + MaxDataPoints "1000" + LoadExternalInput off + LoadInitialState off + SaveFinalState off + SaveCompleteFinalSimState on + SaveFormat "Array" + SignalLoggingSaveFormat "ModelDataLogs" + SaveOutput on + SaveState off + SignalLogging on + DSMLogging on + InspectSignalLogs off + SaveTime on + ReturnWorkspaceOutputs off + StateSaveName "xout" + TimeSaveName "tout" + OutputSaveName "yout" + SignalLoggingName "logsout" + DSMLoggingName "dsmout" + OutputOption "RefineOutputTimes" + OutputTimes "[]" + ReturnWorkspaceOutputsName "out" + Refine "1" + } + Simulink.OptimizationCC { + $ObjectID 4 + Version "1.12.0" + BlockReduction off + BooleanDataType off + ConditionallyExecuteInputs on + InlineParams off + UseIntDivNetSlope off + UseFloatMulNetSlope off + UseSpecifiedMinMax off + InlineInvariantSignals off + OptimizeBlockIOStorage on + BufferReuse on + EnhancedBackFolding off + StrengthReduction off + ExpressionFolding on + BooleansAsBitfields off + BitfieldContainerType "uint_T" + EnableMemcpy on + MemcpyThreshold 64 + PassReuseOutputArgsAs "Structure reference" + ExpressionDepthLimit 2147483647 + FoldNonRolledExpr on + LocalBlockOutputs on + RollThreshold 5 + SystemCodeInlineAuto off + StateBitsets off + DataBitsets off + UseTempVars off + ZeroExternalMemoryAtStartup on + ZeroInternalMemoryAtStartup on + InitFltsAndDblsToZero on + NoFixptDivByZeroProtection off + EfficientFloat2IntCast off + EfficientMapNaN2IntZero on + OptimizeModelRefInitCode off + LifeSpan "inf" + MaxStackSize "Inherit from target" + BufferReusableBoundary on + SimCompilerOptimization "Off" + AccelVerboseBuild off + ParallelExecutionInRapidAccelerator on + } + Simulink.DebuggingCC { + $ObjectID 5 + Version "1.12.0" + RTPrefix "error" + ConsistencyChecking "none" + ArrayBoundsChecking "none" + SignalInfNanChecking "none" + SignalRangeChecking "none" + ReadBeforeWriteMsg "UseLocalSettings" + WriteAfterWriteMsg "UseLocalSettings" + WriteAfterReadMsg "UseLocalSettings" + AlgebraicLoopMsg "warning" + ArtificialAlgebraicLoopMsg "warning" + SaveWithDisabledLinksMsg "warning" + SaveWithParameterizedLinksMsg "none" + CheckSSInitialOutputMsg on + UnderspecifiedInitializationDetection "Classic" + MergeDetectMultiDrivingBlocksExec "none" + CheckExecutionContextPreStartOutputMsg off + CheckExecutionContextRuntimeOutputMsg off + SignalResolutionControl "TryResolveAllWithWarning" + BlockPriorityViolationMsg "warning" + MinStepSizeMsg "warning" + TimeAdjustmentMsg "none" + MaxConsecutiveZCsMsg "error" + MaskedZcDiagnostic "warning" + IgnoredZcDiagnostic "warning" + SolverPrmCheckMsg "none" + InheritedTsInSrcMsg "warning" + DiscreteInheritContinuousMsg "warning" + MultiTaskDSMMsg "warning" + MultiTaskCondExecSysMsg "none" + MultiTaskRateTransMsg "error" + SingleTaskRateTransMsg "none" + TasksWithSamePriorityMsg "warning" + SigSpecEnsureSampleTimeMsg "warning" + CheckMatrixSingularityMsg "none" + IntegerOverflowMsg "warning" + Int32ToFloatConvMsg "warning" + ParameterDowncastMsg "error" + ParameterOverflowMsg "error" + ParameterUnderflowMsg "none" + ParameterPrecisionLossMsg "warning" + ParameterTunabilityLossMsg "warning" + FixptConstUnderflowMsg "none" + FixptConstOverflowMsg "none" + FixptConstPrecisionLossMsg "none" + UnderSpecifiedDataTypeMsg "none" + UnnecessaryDatatypeConvMsg "none" + VectorMatrixConversionMsg "none" + InvalidFcnCallConnMsg "error" + FcnCallInpInsideContextMsg "Use local settings" + SignalLabelMismatchMsg "none" + UnconnectedInputMsg "warning" + UnconnectedOutputMsg "warning" + UnconnectedLineMsg "warning" + SFcnCompatibilityMsg "none" + FrameProcessingCompatibilityMsg "error" + UniqueDataStoreMsg "none" + BusObjectLabelMismatch "warning" + RootOutportRequireBusObject "warning" + AssertControl "UseLocalSettings" + EnableOverflowDetection off + ModelReferenceIOMsg "none" + ModelReferenceMultiInstanceNormalModeStructChecksumCheck "error" + ModelReferenceVersionMismatchMessage "none" + ModelReferenceIOMismatchMessage "none" + ModelReferenceCSMismatchMessage "none" + UnknownTsInhSupMsg "warning" + ModelReferenceDataLoggingMessage "warning" + ModelReferenceSymbolNameMessage "warning" + ModelReferenceExtraNoncontSigs "error" + StateNameClashWarn "warning" + SimStateInterfaceChecksumMismatchMsg "warning" + SimStateOlderReleaseMsg "error" + InitInArrayFormatMsg "warning" + StrictBusMsg "ErrorLevel1" + BusNameAdapt "WarnAndRepair" + NonBusSignalsTreatedAsBus "none" + LoggingUnavailableSignals "error" + BlockIODiagnostic "none" + SFUnusedDataAndEventsDiag "warning" + SFUnexpectedBacktrackingDiag "warning" + SFInvalidInputDataAccessInChartInitDiag "warning" + SFNoUnconditionalDefaultTransitionDiag "warning" + SFTransitionOutsideNaturalParentDiag "warning" + SFUnconditionalTransitionShadowingDiag "warning" + } + Simulink.HardwareCC { + $ObjectID 6 + Version "1.12.0" + ProdBitPerChar 8 + ProdBitPerShort 16 + ProdBitPerInt 32 + ProdBitPerLong 32 + ProdBitPerFloat 32 + ProdBitPerDouble 64 + ProdBitPerPointer 32 + ProdLargestAtomicInteger "Char" + ProdLargestAtomicFloat "None" + ProdIntDivRoundTo "Undefined" + ProdEndianess "Unspecified" + ProdWordSize 32 + ProdShiftRightIntArith on + ProdHWDeviceType "32-bit Generic" + TargetBitPerChar 8 + TargetBitPerShort 16 + TargetBitPerInt 32 + TargetBitPerLong 32 + TargetBitPerFloat 32 + TargetBitPerDouble 64 + TargetBitPerPointer 32 + TargetLargestAtomicInteger "Char" + TargetLargestAtomicFloat "None" + TargetShiftRightIntArith on + TargetIntDivRoundTo "Undefined" + TargetEndianess "Unspecified" + TargetWordSize 32 + TargetTypeEmulationWarnSuppressLevel 0 + TargetPreprocMaxBitsSint 32 + TargetPreprocMaxBitsUint 32 + TargetHWDeviceType "Specified" + TargetUnknown on + ProdEqTarget on + } + Simulink.ModelReferenceCC { + $ObjectID 7 + Version "1.12.0" + UpdateModelReferenceTargets "IfOutOfDateOrStructuralChange" + CheckModelReferenceTargetMessage "error" + EnableParallelModelReferenceBuilds off + ParallelModelReferenceErrorOnInvalidPool on + ParallelModelReferenceMATLABWorkerInit "None" + ModelReferenceNumInstancesAllowed "Multi" + PropagateVarSize "Infer from blocks in model" + ModelReferencePassRootInputsByReference on + ModelReferenceMinAlgLoopOccurrences off + PropagateSignalLabelsOutOfModel off + SupportModelReferenceSimTargetCustomCode off + } + Simulink.SFSimCC { + $ObjectID 8 + Version "1.12.0" + SFSimEnableDebug on + SFSimOverflowDetection on + SFSimEcho on + SimBlas on + SimCtrlC on + SimExtrinsic on + SimIntegrity on + SimUseLocalCustomCode off + SimParseCustomCode on + SimBuildMode "sf_incremental_build" + } + Simulink.RTWCC { + $BackupClass "Simulink.RTWCC" + $ObjectID 9 + Version "1.12.0" + SystemTargetFile "grt.tlc" + GenCodeOnly off + MakeCommand "make_rtw" + GenerateMakefile on + TemplateMakefile "grt_default_tmf" + GenerateReport off + SaveLog off + RTWVerbose on + RetainRTWFile off + ProfileTLC off + TLCDebug off + TLCCoverage off + TLCAssert off + ProcessScriptMode "Default" + ConfigurationMode "Optimized" + ConfigAtBuild off + RTWUseLocalCustomCode off + RTWUseSimCustomCode off + IncludeHyperlinkInReport off + LaunchReport off + TargetLang "C" + IncludeBusHierarchyInRTWFileBlockHierarchyMap off + IncludeERTFirstTime off + GenerateTraceInfo off + GenerateTraceReport off + GenerateTraceReportSl off + GenerateTraceReportSf off + GenerateTraceReportEml off + GenerateCodeInfo off + GenerateWebview off + GenerateCodeMetricsReport off + GenerateCodeReplacementReport off + RTWCompilerOptimization "Off" + CheckMdlBeforeBuild "Off" + CustomRebuildMode "OnUpdate" + Array { + Type "Handle" + Dimension 2 + Simulink.CodeAppCC { + $ObjectID 10 + Version "1.12.0" + ForceParamTrailComments off + GenerateComments on + IgnoreCustomStorageClasses on + IgnoreTestpoints off + IncHierarchyInIds off + MaxIdLength 31 + PreserveName off + PreserveNameWithParent off + ShowEliminatedStatement off + IncAutoGenComments off + SimulinkDataObjDesc off + SFDataObjDesc off + MATLABFcnDesc off + IncDataTypeInIds off + MangleLength 1 + CustomSymbolStrGlobalVar "$R$N$M" + CustomSymbolStrType "$N$R$M_T" + CustomSymbolStrField "$N$M" + CustomSymbolStrFcn "$R$N$M$F" + CustomSymbolStrFcnArg "rt$I$N$M" + CustomSymbolStrBlkIO "rtb_$N$M" + CustomSymbolStrTmpVar "$N$M" + CustomSymbolStrMacro "$R$N$M" + DefineNamingRule "None" + ParamNamingRule "None" + SignalNamingRule "None" + InsertBlockDesc off + InsertPolySpaceComments off + SimulinkBlockComments on + MATLABSourceComments off + EnableCustomComments off + InlinedPrmAccess "Literals" + ReqsInCode off + UseSimReservedNames off + } + Simulink.GRTTargetCC { + $BackupClass "Simulink.TargetCC" + $ObjectID 11 + Version "1.12.0" + Array { + Type "Cell" + Dimension 2 + Cell "MultiInstanceERTCode" + Cell "CombineOutputUpdateFcns" + PropName "DisabledProps" + } + TargetFcnLib "ansi_tfl_tmw.mat" + TargetLibSuffix "" + TargetPreCompLibLocation "" + CodeReplacementLibrary "C89/C90 (ANSI)" + UtilityFuncGeneration "Auto" + ERTMultiwordTypeDef "System defined" + CodeExecutionProfiling off + ERTMultiwordLength 256 + MultiwordLength 2048 + GenerateFullHeader on + GenerateSampleERTMain off + GenerateTestInterfaces off + IsPILTarget off + ModelReferenceCompliant off + ParMdlRefBuildCompliant on + CompOptLevelCompliant on + ConcurrentExecutionCompliant on + IncludeMdlTerminateFcn on + GeneratePreprocessorConditionals "Disable all" + CombineOutputUpdateFcns off + CombineSignalStateStructs off + SuppressErrorStatus off + ERTFirstTimeCompliant off + IncludeFileDelimiter "Auto" + ERTCustomFileBanners off + SupportAbsoluteTime on + LogVarNameModifier "rt_" + MatFileLogging off + MultiInstanceERTCode off + SupportNonFinite on + SupportComplex on + PurelyIntegerCode off + SupportContinuousTime on + SupportNonInlinedSFcns on + SupportVariableSizeSignals off + EnableShiftOperators on + ParenthesesLevel "Nominal" + PortableWordSizes off + ModelStepFunctionPrototypeControlCompliant off + CPPClassGenCompliant off + AutosarCompliant off + GRTInterface on + UseMalloc off + ExtMode off + ExtModeStaticAlloc off + ExtModeTesting off + ExtModeStaticAllocSize 1000000 + ExtModeTransport 0 + ExtModeMexFile "ext_comm" + ExtModeIntrfLevel "Level1" + RTWCAPISignals off + RTWCAPIParams off + RTWCAPIStates off + RTWCAPIRootIO off + GenerateASAP2 off + } + PropName "Components" + } + } + PropName "Components" + } + Name "Configuration" + CurrentDlgPage "Solver" + ConfigPrmDlgPosition [ 295, 27, 1148, 709 ] + } + PropName "ConfigurationSets" + } + Simulink.ConfigSet { + $PropName "ActiveConfigurationSet" + $ObjectID 1 + } + ExplicitPartitioning off + BlockDefaults { + ForegroundColor "black" + BackgroundColor "white" + DropShadow off + NamePlacement "normal" + FontName "Helvetica" + FontSize 10 + FontWeight "normal" + FontAngle "normal" + ShowName on + BlockRotation 0 + BlockMirror off + } + AnnotationDefaults { + HorizontalAlignment "center" + VerticalAlignment "middle" + ForegroundColor "black" + BackgroundColor "white" + DropShadow off + FontName "Helvetica" + FontSize 10 + FontWeight "normal" + FontAngle "normal" + UseDisplayTextAsClickCallback off + } + LineDefaults { + FontName "Helvetica" + FontSize 9 + FontWeight "normal" + FontAngle "normal" + } + BlockParameterDefaults { + Block { + BlockType Constant + Value "1" + VectorParams1D on + SamplingMode "Sample based" + OutMin "[]" + OutMax "[]" + OutDataTypeStr "Inherit: Inherit from 'Constant value'" + LockScale off + SampleTime "inf" + FramePeriod "inf" + PreserveConstantTs off + } + Block { + BlockType Demux + Outputs "4" + DisplayOption "none" + BusSelectionMode off + } + Block { + BlockType DigitalClock + SampleTime "1" + } + Block { + BlockType Inport + Port "1" + OutputFunctionCall off + OutMin "[]" + OutMax "[]" + OutDataTypeStr "Inherit: auto" + LockScale off + BusOutputAsStruct off + PortDimensions "-1" + VarSizeSig "Inherit" + SampleTime "-1" + SignalType "auto" + SamplingMode "auto" + LatchByDelayingOutsideSignal off + LatchInputForFeedbackSignals off + Interpolate on + } + Block { + BlockType Mux + Inputs "4" + DisplayOption "none" + UseBusObject off + BusObject "BusObject" + NonVirtualBus off + } + Block { + BlockType Outport + Port "1" + OutMin "[]" + OutMax "[]" + OutDataTypeStr "Inherit: auto" + LockScale off + BusOutputAsStruct off + PortDimensions "-1" + VarSizeSig "Inherit" + SampleTime "-1" + SignalType "auto" + SamplingMode "auto" + SourceOfInitialOutputValue "Dialog" + OutputWhenDisabled "held" + InitialOutput "[]" + } + Block { + BlockType Product + Inputs "2" + Multiplication "Element-wise(.*)" + CollapseMode "All dimensions" + CollapseDim "1" + InputSameDT on + OutMin "[]" + OutMax "[]" + OutDataTypeStr "Inherit: Same as first input" + LockScale off + RndMeth "Zero" + SaturateOnIntegerOverflow on + SampleTime "-1" + } + Block { + BlockType S-Function + FunctionName "system" + SFunctionModules "''" + PortCounts "[]" + SFunctionDeploymentMode off + } + Block { + BlockType Scope + ModelBased off + TickLabels "OneTimeTick" + ZoomMode "on" + Grid "on" + TimeRange "auto" + YMin "-5" + YMax "5" + SaveToWorkspace off + SaveName "ScopeData" + DataFormat "Array" + LimitDataPoints on + MaxDataPoints "5000" + Decimation "1" + SampleInput off + SampleTime "-1" + } + Block { + BlockType Step + Time "1" + Before "0" + After "1" + SampleTime "-1" + VectorParams1D on + ZeroCross on + } + Block { + BlockType Stop + } + Block { + BlockType SubSystem + ShowPortLabels "FromPortIcon" + Permissions "ReadWrite" + PermitHierarchicalResolution "All" + TreatAsAtomicUnit off + CheckFcnCallInpInsideContextMsg off + SystemSampleTime "-1" + RTWFcnNameOpts "Auto" + RTWFileNameOpts "Auto" + RTWMemSecFuncInitTerm "Inherit from model" + RTWMemSecFuncExecute "Inherit from model" + RTWMemSecDataConstants "Inherit from model" + RTWMemSecDataInternal "Inherit from model" + RTWMemSecDataParameters "Inherit from model" + SimViewingDevice off + DataTypeOverride "UseLocalSettings" + DataTypeOverrideAppliesTo "AllNumericTypes" + MinMaxOverflowLogging "UseLocalSettings" + SFBlockType "NONE" + Variant off + GeneratePreprocessorConditionals off + } + Block { + BlockType Sum + IconShape "rectangular" + Inputs "++" + CollapseMode "All dimensions" + CollapseDim "1" + InputSameDT on + AccumDataTypeStr "Inherit: Inherit via internal rule" + OutMin "[]" + OutMax "[]" + OutDataTypeStr "Inherit: Same as first input" + LockScale off + RndMeth "Floor" + SaturateOnIntegerOverflow on + SampleTime "-1" + } + Block { + BlockType Switch + Criteria "u2 >= Threshold" + Threshold "0" + InputSameDT on + OutMin "[]" + OutMax "[]" + OutDataTypeStr "Inherit: Inherit via internal rule" + LockScale off + RndMeth "Floor" + SaturateOnIntegerOverflow on + ZeroCross on + SampleTime "-1" + AllowDiffInputSizes off + } + Block { + BlockType Terminator + } + Block { + BlockType ToWorkspace + VariableName "simulink_output" + MaxDataPoints "1000" + Decimation "1" + SampleTime "0" + SaveFormat "Array" + FixptAsFi off + NumInputs "1" + } + Block { + BlockType TransferFcn + Numerator "[1]" + Denominator "[1 2 1]" + AbsoluteTolerance "auto" + ContinuousStateAttributes "''" + Realization "auto" + } + Block { + BlockType TransportDelay + DelayTime "1" + InitialOutput "0" + BufferSize "1024" + FixedBuffer off + TransDelayFeedthrough off + PadeOrder "0" + } + } + System { + Name "autotuner_tito_2012a" + Location [141, 310, 1163, 745] + Open on + ModelBrowserVisibility off + ModelBrowserWidth 200 + ScreenColor "white" + PaperOrientation "landscape" + PaperPositionMode "auto" + PaperType "usletter" + PaperUnits "inches" + TiledPaperMargins [0.500000, 0.500000, 0.500000, 0.500000] + TiledPageScale 1 + ShowPageBoundaries off + ZoomFactor "100" + ReportName "simulink-default.rpt" + SIDHighWatermark "1211" + Block { + BlockType SubSystem + Name "Logger" + SID "76" + Ports [4] + Position [730, 103, 750, 292] + ZOrder 91 + MinAlgLoopOccurrences off + PropExecContextOutsideSubsystem off + RTWSystemCode "Auto" + FunctionWithSeparateData off + Opaque off + RequestExecContextInheritance off + MaskHideContents off + System { + Name "Logger" + Location [1911, 198, 2953, 1077] + Open off + ModelBrowserVisibility off + ModelBrowserWidth 200 + ScreenColor "white" + PaperOrientation "landscape" + PaperPositionMode "auto" + PaperType "usletter" + PaperUnits "inches" + TiledPaperMargins [0.500000, 0.500000, 0.500000, 0.500000] + TiledPageScale 1 + ShowPageBoundaries off + ZoomFactor "100" + Block { + BlockType Inport + Name "u1" + SID "77" + Position [20, 23, 50, 37] + ZOrder 88 + IconDisplay "Port number" + SampleTime "simopt.h" + } + Block { + BlockType Inport + Name "y1" + SID "79" + Position [20, 58, 50, 72] + ZOrder 90 + Port "2" + IconDisplay "Port number" + SampleTime "simopt.h" + } + Block { + BlockType Inport + Name "u2" + SID "443" + Position [20, 103, 50, 117] + ZOrder 91 + Port "3" + IconDisplay "Port number" + SampleTime "simopt.h" + } + Block { + BlockType Inport + Name "y2" + SID "444" + Position [20, 143, 50, 157] + ZOrder 92 + Port "4" + IconDisplay "Port number" + SampleTime "simopt.h" + } + Block { + BlockType ToWorkspace + Name "Logger" + SID "69" + Ports [1] + Position [140, 75, 200, 105] + ZOrder 87 + VariableName "simout" + MaxDataPoints "inf" + SampleTime "simopt.h" + SaveFormat "Structure With Time" + } + Block { + BlockType Mux + Name "Mux" + SID "68" + Ports [4, 1] + Position [75, 12, 80, 168] + ZOrder 86 + ShowName off + DisplayOption "bar" + } + Line { + SrcBlock "Mux" + SrcPort 1 + DstBlock "Logger" + DstPort 1 + } + Line { + SrcBlock "u1" + SrcPort 1 + DstBlock "Mux" + DstPort 1 + } + Line { + SrcBlock "y1" + SrcPort 1 + Points [3, 0; 0, 5] + DstBlock "Mux" + DstPort 2 + } + Line { + SrcBlock "u2" + SrcPort 1 + DstBlock "Mux" + DstPort 3 + } + Line { + SrcBlock "y2" + SrcPort 1 + DstBlock "Mux" + DstPort 4 + } + } + } + Block { + BlockType Step + Name "Step" + SID "1104" + Position [15, 105, 45, 135] + ZOrder 59 + Time "0" + After "0" + SampleTime "simopt.h" + } + Block { + BlockType Step + Name "Step1" + SID "1105" + Position [15, 200, 45, 230] + ZOrder 59 + Time "0" + After "0" + SampleTime "simopt.h" + } + Block { + BlockType Sum + Name "Sum" + SID "1106" + Ports [2, 1] + Position [95, 155, 115, 175] + ZOrder -18 + ShowName off + IconShape "round" + Inputs "-+|" + InputSameDT off + OutDataTypeStr "Inherit: Inherit via internal rule" + SaturateOnIntegerOverflow off + } + Block { + BlockType Sum + Name "Sum1" + SID "1107" + Ports [2, 1] + Position [95, 190, 115, 210] + ZOrder -18 + ShowName off + IconShape "round" + Inputs "|+-" + InputSameDT off + OutDataTypeStr "Inherit: Inherit via internal rule" + SaturateOnIntegerOverflow off + } + Block { + BlockType SubSystem + Name "WoodBerry" + SID "1113" + Ports [2, 2] + Position [370, 130, 470, 205] + ZOrder 158 + BackgroundColor "gray" + MinAlgLoopOccurrences off + PropExecContextOutsideSubsystem off + RTWSystemCode "Auto" + FunctionWithSeparateData off + Opaque off + RequestExecContextInheritance off + MaskHideContents off + System { + Name "WoodBerry" + Location [108, 94, 920, 529] + Open off + ModelBrowserVisibility off + ModelBrowserWidth 200 + ScreenColor "white" + PaperOrientation "landscape" + PaperPositionMode "auto" + PaperType "A4" + PaperUnits "centimeters" + TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] + TiledPageScale 1 + ShowPageBoundaries off + ZoomFactor "100" + Block { + BlockType Inport + Name "u1" + SID "1114" + Position [175, 103, 205, 117] + ZOrder -1 + IconDisplay "Port number" + } + Block { + BlockType Inport + Name "u2" + SID "1115" + Position [175, 313, 205, 327] + ZOrder 1 + Port "2" + IconDisplay "Port number" + } + Block { + BlockType TransferFcn + Name "P11" + SID "1116" + Position [275, 92, 335, 128] + ZOrder -9 + Numerator "[12.8]" + Denominator "[16.7 1]" + } + Block { + BlockType TransportDelay + Name "P11_d" + SID "1117" + Ports [1, 1] + Position [365, 95, 395, 125] + ZOrder -10 + } + Block { + BlockType TransferFcn + Name "P12" + SID "1118" + Position [275, 162, 335, 198] + ZOrder -9 + Numerator "[-18.9]" + Denominator "[21 1]" + } + Block { + BlockType TransportDelay + Name "P12_d" + SID "1119" + Ports [1, 1] + Position [365, 165, 395, 195] + ZOrder -10 + DelayTime "3" + } + Block { + BlockType TransferFcn + Name "P21" + SID "1120" + Position [275, 227, 335, 263] + ZOrder -9 + Numerator "[6.6]" + Denominator "[10.9 1]" + } + Block { + BlockType TransportDelay + Name "P21_d" + SID "1121" + Ports [1, 1] + Position [365, 230, 395, 260] + ZOrder -10 + DelayTime "7" + } + Block { + BlockType TransferFcn + Name "P22" + SID "1122" + Position [275, 302, 335, 338] + ZOrder -9 + Numerator "[-19.4]" + Denominator "[14.4 1]" + } + Block { + BlockType TransportDelay + Name "P22_d" + SID "1123" + Ports [1, 1] + Position [365, 305, 395, 335] + ZOrder -10 + DelayTime "3" + } + Block { + BlockType Sum + Name "Sum" + SID "1124" + Ports [2, 1] + Position [465, 100, 485, 120] + ZOrder -18 + ShowName off + IconShape "round" + Inputs "|++" + InputSameDT off + OutDataTypeStr "Inherit: Inherit via internal rule" + SaturateOnIntegerOverflow off + } + Block { + BlockType Sum + Name "Sum2" + SID "1125" + Ports [2, 1] + Position [465, 310, 485, 330] + ZOrder -18 + NamePlacement "alternate" + ShowName off + IconShape "round" + Inputs "++|" + InputSameDT off + OutDataTypeStr "Inherit: Inherit via internal rule" + SaturateOnIntegerOverflow off + } + Block { + BlockType Outport + Name "y1" + SID "1126" + Position [640, 103, 670, 117] + ZOrder -2 + IconDisplay "Port number" + } + Block { + BlockType Outport + Name "y2" + SID "1127" + Position [640, 313, 670, 327] + ZOrder 4 + Port "2" + IconDisplay "Port number" + } + Line { + SrcBlock "Sum2" + SrcPort 1 + DstBlock "y2" + DstPort 1 + } + Line { + SrcBlock "P22_d" + SrcPort 1 + DstBlock "Sum2" + DstPort 2 + } + Line { + SrcBlock "P22" + SrcPort 1 + DstBlock "P22_d" + DstPort 1 + } + Line { + SrcBlock "P21_d" + SrcPort 1 + Points [75, 0] + DstBlock "Sum2" + DstPort 1 + } + Line { + SrcBlock "P21" + SrcPort 1 + DstBlock "P21_d" + DstPort 1 + } + Line { + SrcBlock "u2" + SrcPort 1 + Points [10, 0] + Branch { + DstBlock "P22" + DstPort 1 + } + Branch { + Points [0, 0; 0, -140] + DstBlock "P12" + DstPort 1 + } + } + Line { + SrcBlock "P12_d" + SrcPort 1 + Points [75, 0] + DstBlock "Sum" + DstPort 2 + } + Line { + SrcBlock "P12" + SrcPort 1 + DstBlock "P12_d" + DstPort 1 + } + Line { + SrcBlock "u1" + SrcPort 1 + Points [5, 0] + Branch { + Points [25, 0; 0, 135] + DstBlock "P21" + DstPort 1 + } + Branch { + DstBlock "P11" + DstPort 1 + } + } + Line { + SrcBlock "Sum" + SrcPort 1 + DstBlock "y1" + DstPort 1 + } + Line { + SrcBlock "P11_d" + SrcPort 1 + DstBlock "Sum" + DstPort 1 + } + Line { + SrcBlock "P11" + SrcPort 1 + DstBlock "P11_d" + DstPort 1 + } + } + } + Block { + BlockType SubSystem + Name "multi-NOMAD" + SID "1170" + Ports [2, 2] + Position [160, 154, 260, 196] + ZOrder 158 + BackgroundColor "lightBlue" + MinAlgLoopOccurrences off + PropExecContextOutsideSubsystem off + RTWSystemCode "Auto" + FunctionWithSeparateData off + Opaque off + RequestExecContextInheritance off + MaskHideContents off + System { + Name "multi-NOMAD" + Location [107, 14, 1149, 449] + Open off + ModelBrowserVisibility off + ModelBrowserWidth 200 + ScreenColor "white" + PaperOrientation "landscape" + PaperPositionMode "auto" + PaperType "A4" + PaperUnits "centimeters" + TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] + TiledPageScale 1 + ShowPageBoundaries off + ZoomFactor "100" + Block { + BlockType Inport + Name "e1" + SID "1171" + Position [175, 103, 205, 117] + ZOrder -1 + IconDisplay "Port number" + } + Block { + BlockType Inport + Name "e2" + SID "1172" + Position [175, 193, 205, 207] + ZOrder 1 + Port "2" + IconDisplay "Port number" + } + Block { + BlockType SubSystem + Name "Autotuner1" + SID "1173" + Ports [2, 3] + Position [245, 99, 345, 141] + ZOrder 63 + MinAlgLoopOccurrences off + PropExecContextOutsideSubsystem off + RTWSystemCode "Auto" + FunctionWithSeparateData off + Opaque off + RequestExecContextInheritance off + MaskHideContents off + System { + Name "Autotuner1" + Location [950, 343, 1992, 858] + Open off + ModelBrowserVisibility off + ModelBrowserWidth 200 + ScreenColor "white" + PaperOrientation "landscape" + PaperPositionMode "auto" + PaperType "A4" + PaperUnits "centimeters" + TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] + TiledPageScale 1 + ShowPageBoundaries off + ZoomFactor "100" + Block { + BlockType Inport + Name "e" + SID "1174" + Position [30, 148, 60, 162] + ZOrder -1 + IconDisplay "Port number" + } + Block { + BlockType Inport + Name "other_done" + SID "1175" + Position [50, 438, 80, 452] + ZOrder -1 + Port "2" + IconDisplay "Port number" + } + Block { + BlockType Product + Name "AND" + SID "1176" + Ports [2, 1] + Position [170, 437, 200, 468] + ZOrder -13 + InputSameDT off + OutDataTypeStr "Inherit: Inherit via internal rule" + SaturateOnIntegerOverflow off + } + Block { + BlockType Reference + Name "Compare\nTo Constant" + SID "1177" + Ports [1, 1] + Position [370, 200, 400, 230] + ZOrder 118 + LibraryVersion "1.260" + SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Constant" + SourceType "Compare To Constant" + relop ">=" + const "params.expStartTime" + OutDataTypeStr "boolean" + ZeroCross on + } + Block { + BlockType Constant + Name "Constant" + SID "1178" + Position [310, 265, 340, 295] + ZOrder 117 + Value "params.ustart" + SampleTime "simopt.h" + } + Block { + BlockType SubSystem + Name "Constraint" + SID "1179" + Ports [3, 1] + Position [685, 370, 755, 420] + ZOrder -4 + LibraryVersion "1.32" + ErrorFcn "Stateflow.Translate.translate" + PermitHierarchicalResolution "ExplicitOnly" + TreatAsAtomicUnit on + MinAlgLoopOccurrences off + PropExecContextOutsideSubsystem off + SystemSampleTime "simopt.h" + RTWSystemCode "Auto" + FunctionWithSeparateData off + Opaque off + RequestExecContextInheritance off + MaskHideContents off + SFBlockType "MATLAB Function" + MaskType "Stateflow" + MaskDescription "Embedded MATLAB block" + MaskSelfModifiable on + MaskDisplay "bgColor = Simulink.Root.ColorString2Rgb(get_param(gcbh, 'BackgroundColor')); image(imread('p" + "rivate/eml_membrane_16.png','png','BackgroundColor',bgColor(1:3)),'center'); disp([10 10 'Constraint']);" + MaskIconFrame on + MaskIconOpaque off + MaskIconRotate "none" + MaskPortRotate "default" + MaskIconUnits "normalized" + System { + Name "Constraint" + Location [223, 338, 826, 833] + Open off + ModelBrowserVisibility off + ModelBrowserWidth 200 + ScreenColor "white" + PaperOrientation "landscape" + PaperPositionMode "auto" + PaperType "A4" + PaperUnits "centimeters" + TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] + TiledPageScale 1 + ShowPageBoundaries off + ZoomFactor "100" + SIDHighWatermark "29" + Block { + BlockType Inport + Name "time" + SID "1179::23" + Position [20, 101, 40, 119] + ZOrder 9 + IconDisplay "Port number" + } + Block { + BlockType Inport + Name "all_done" + SID "1179::24" + Position [20, 136, 40, 154] + ZOrder 10 + Port "2" + IconDisplay "Port number" + } + Block { + BlockType Inport + Name "timeAfterExp" + SID "1179::26" + Position [20, 171, 40, 189] + ZOrder 11 + Port "3" + IconDisplay "Port number" + } + Block { + BlockType Demux + Name " Demux " + SID "1179::28" + Ports [1, 1] + Position [270, 230, 320, 270] + ZOrder 13 + Outputs "1" + } + Block { + BlockType S-Function + Name " SFunction " + SID "1179::27" + Tag "Stateflow S-Function autotuner_tito_2012a 7" + Ports [3, 2] + Position [180, 100, 230, 180] + ZOrder 12 + FunctionName "sf_sfun" + PortCounts "[3 2]" + EnableBusSupport on + Port { + PortNumber 2 + Name "stop" + RTWStorageClass "Auto" + DataLoggingNameMode "SignalName" + } + } + Block { + BlockType Terminator + Name " Terminator " + SID "1179::29" + Position [460, 241, 480, 259] + ZOrder 14 + } + Block { + BlockType Outport + Name "stop" + SID "1179::5" + Position [460, 101, 480, 119] + ZOrder -7 + IconDisplay "Port number" + } + Line { + SrcBlock " SFunction " + SrcPort 1 + Points [20, 0] + DstBlock " Demux " + DstPort 1 + } + Line { + SrcBlock " Demux " + SrcPort 1 + DstBlock " Terminator " + DstPort 1 + } + Line { + Name "stop" + Labels [0, 0] + SrcBlock " SFunction " + SrcPort 2 + DstBlock "stop" + DstPort 1 + } + Line { + SrcBlock "timeAfterExp" + SrcPort 1 + DstBlock " SFunction " + DstPort 3 + } + Line { + SrcBlock "all_done" + SrcPort 1 + DstBlock " SFunction " + DstPort 2 + } + Line { + SrcBlock "time" + SrcPort 1 + DstBlock " SFunction " + DstPort 1 + } + } + } + Block { + BlockType DigitalClock + Name "Digital Clock" + SID "1180" + Position [15, 203, 80, 227] + ZOrder -8 + SampleTime "simopt.h" + } + Block { + BlockType Constant + Name "Relay_parameters" + SID "1181" + Position [30, 25, 60, 55] + ZOrder -4 + Value "[params.eps, params.gamma, simopt.h, params.low_limit, params.dev_limit, 1 , params.uon, params.h" + "yst, params.noiseMeasureTime, 1, params.gamma2, params.switches, params.ystep, params.ustep]" + SampleTime "simopt.h" + } + Block { + BlockType Stop + Name "Stop Simulation" + SID "1182" + Position [805, 377, 840, 413] + ZOrder -4 + } + Block { + BlockType Switch + Name "Switch" + SID "1183" + Position [730, 175, 780, 215] + ZOrder 62 + Criteria "u2 ~= 0" + InputSameDT off + SaturateOnIntegerOverflow off + } + Block { + BlockType SubSystem + Name "relay_exp\n" + SID "1184" + Ports [5, 3] + Position [480, 22, 635, 158] + ZOrder 3 + LibraryVersion "1.32" + ErrorFcn "Stateflow.Translate.translate" + PermitHierarchicalResolution "ExplicitOnly" + TreatAsAtomicUnit on + MinAlgLoopOccurrences off + PropExecContextOutsideSubsystem off + SystemSampleTime "simopt.h" + RTWSystemCode "Auto" + FunctionWithSeparateData off + Opaque off + RequestExecContextInheritance off + MaskHideContents off + SFBlockType "MATLAB Function" + MaskType "Stateflow" + MaskDescription "Embedded MATLAB block" + MaskSelfModifiable on + MaskDisplay "bgColor = Simulink.Root.ColorString2Rgb(get_param(gcbh, 'BackgroundColor')); image(imread('p" + "rivate/eml_membrane_16.png','png','BackgroundColor',bgColor(1:3)),'center'); disp([10 10 'relay_exp']);" + MaskIconFrame on + MaskIconOpaque off + MaskIconRotate "none" + MaskPortRotate "default" + MaskIconUnits "normalized" + System { + Name "relay_exp\n" + Location [189, 219, 840, 949] + Open off + ModelBrowserVisibility off + ModelBrowserWidth 200 + ScreenColor "white" + PaperOrientation "landscape" + PaperPositionMode "auto" + PaperType "A4" + PaperUnits "centimeters" + TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] + TiledPageScale 1 + ShowPageBoundaries off + ZoomFactor "100" + SIDHighWatermark "41" + Block { + BlockType Inport + Name "relay_par" + SID "1184::36" + Position [20, 101, 40, 119] + ZOrder 21 + IconDisplay "Port number" + } + Block { + BlockType Inport + Name "e" + SID "1184::23" + Position [20, 136, 40, 154] + ZOrder 9 + Port "2" + IconDisplay "Port number" + } + Block { + BlockType Inport + Name "t" + SID "1184::28" + Position [20, 171, 40, 189] + ZOrder 14 + Port "3" + IconDisplay "Port number" + } + Block { + BlockType Inport + Name "u_ref" + SID "1184::37" + Position [20, 206, 40, 224] + ZOrder 22 + Port "4" + IconDisplay "Port number" + } + Block { + BlockType Inport + Name "run_exp" + SID "1184::31" + Position [20, 246, 40, 264] + ZOrder 17 + Port "5" + IconDisplay "Port number" + } + Block { + BlockType Demux + Name " Demux " + SID "1184::40" + Ports [1, 1] + Position [270, 245, 320, 285] + ZOrder 25 + Outputs "1" + } + Block { + BlockType S-Function + Name " SFunction " + SID "1184::39" + Tag "Stateflow S-Function autotuner_tito_2012a 8" + Ports [5, 4] + Position [180, 100, 230, 220] + ZOrder 24 + FunctionName "sf_sfun" + PortCounts "[5 4]" + EnableBusSupport on + Port { + PortNumber 2 + Name "result" + RTWStorageClass "Auto" + DataLoggingNameMode "SignalName" + } + Port { + PortNumber 3 + Name "u" + RTWStorageClass "Auto" + DataLoggingNameMode "SignalName" + } + Port { + PortNumber 4 + Name "done" + RTWStorageClass "Auto" + DataLoggingNameMode "SignalName" + } + } + Block { + BlockType Terminator + Name " Terminator " + SID "1184::41" + Position [460, 256, 480, 274] + ZOrder 26 + } + Block { + BlockType Outport + Name "result" + SID "1184::38" + Position [460, 101, 480, 119] + ZOrder 23 + IconDisplay "Port number" + } + Block { + BlockType Outport + Name "u" + SID "1184::27" + Position [460, 136, 480, 154] + ZOrder 13 + Port "2" + IconDisplay "Port number" + } + Block { + BlockType Outport + Name "done" + SID "1184::32" + Position [460, 171, 480, 189] + ZOrder 18 + Port "3" + IconDisplay "Port number" + } + Line { + SrcBlock " SFunction " + SrcPort 1 + DstBlock " Demux " + DstPort 1 + } + Line { + SrcBlock " Demux " + SrcPort 1 + DstBlock " Terminator " + DstPort 1 + } + Line { + Name "done" + Labels [0, 0] + SrcBlock " SFunction " + SrcPort 4 + DstBlock "done" + DstPort 1 + } + Line { + Name "u" + Labels [0, 0] + SrcBlock " SFunction " + SrcPort 3 + DstBlock "u" + DstPort 1 + } + Line { + Name "result" + Labels [0, 0] + SrcBlock " SFunction " + SrcPort 2 + DstBlock "result" + DstPort 1 + } + Line { + SrcBlock "run_exp" + SrcPort 1 + DstBlock " SFunction " + DstPort 5 + } + Line { + SrcBlock "u_ref" + SrcPort 1 + DstBlock " SFunction " + DstPort 4 + } + Line { + SrcBlock "t" + SrcPort 1 + DstBlock " SFunction " + DstPort 3 + } + Line { + SrcBlock "e" + SrcPort 1 + DstBlock " SFunction " + DstPort 2 + } + Line { + SrcBlock "relay_par" + SrcPort 1 + DstBlock " SFunction " + DstPort 1 + } + } + } + Block { + BlockType Constant + Name "timeAfterExp" + SID "1185" + Position [585, 410, 615, 440] + ZOrder -4 + Value "params.timeAfterExp" + } + Block { + BlockType Outport + Name "u" + SID "1186" + Position [835, 188, 865, 202] + ZOrder 4 + IconDisplay "Port number" + } + Block { + BlockType Outport + Name "done" + SID "1187" + Position [830, 113, 860, 127] + ZOrder 4 + Port "2" + IconDisplay "Port number" + } + Block { + BlockType Outport + Name "result1" + SID "1188" + Position [705, 38, 735, 52] + ZOrder 119 + Port "3" + IconDisplay "Port number" + } + Line { + SrcBlock "relay_exp\n" + SrcPort 1 + DstBlock "result1" + DstPort 1 + } + Line { + SrcBlock "timeAfterExp" + SrcPort 1 + Points [25, 0; 0, -15] + DstBlock "Constraint" + DstPort 3 + } + Line { + SrcBlock "relay_exp\n" + SrcPort 3 + Points [0, 10; 18, 0] + Branch { + Points [157, 0] + DstBlock "done" + DstPort 1 + } + Branch { + Points [0, 180; -556, 0; 0, 135] + DstBlock "AND" + DstPort 2 + } + } + Line { + SrcBlock "other_done" + SrcPort 1 + DstBlock "AND" + DstPort 1 + } + Line { + SrcBlock "AND" + SrcPort 1 + Points [14, 0; 0, -60] + DstBlock "Constraint" + DstPort 2 + } + Line { + SrcBlock "Constraint" + SrcPort 1 + DstBlock "Stop Simulation" + DstPort 1 + } + Line { + SrcBlock "Digital Clock" + SrcPort 1 + Points [30, 0] + Branch { + Points [0, 165] + DstBlock "Constraint" + DstPort 1 + } + Branch { + Points [205, 0] + Branch { + DstBlock "Compare\nTo Constant" + DstPort 1 + } + Branch { + Points [0, -124] + DstBlock "relay_exp\n" + DstPort 3 + } + } + } + Line { + SrcBlock "e" + SrcPort 1 + Points [142, 0; 0, -90] + DstBlock "relay_exp\n" + DstPort 2 + } + Line { + SrcBlock "Constant" + SrcPort 1 + Points [90, 0] + Branch { + Points [127, 0; 0, -70] + DstBlock "Switch" + DstPort 3 + } + Branch { + Points [0, -165] + DstBlock "relay_exp\n" + DstPort 4 + } + } + Line { + SrcBlock "Compare\nTo Constant" + SrcPort 1 + Points [60, 0; 0, -19] + Branch { + DstBlock "relay_exp\n" + DstPort 5 + } + Branch { + Points [250, 0] + DstBlock "Switch" + DstPort 2 + } + } + Line { + SrcBlock "relay_exp\n" + SrcPort 2 + Points [75, 0] + DstBlock "Switch" + DstPort 1 + } + Line { + SrcBlock "Relay_parameters" + SrcPort 1 + DstBlock "relay_exp\n" + DstPort 1 + } + Line { + SrcBlock "Switch" + SrcPort 1 + DstBlock "u" + DstPort 1 + } + } + } + Block { + BlockType SubSystem + Name "Autotuner2" + SID "1189" + Ports [2, 3] + Position [255, 189, 355, 231] + ZOrder 64 + MinAlgLoopOccurrences off + PropExecContextOutsideSubsystem off + RTWSystemCode "Auto" + FunctionWithSeparateData off + Opaque off + RequestExecContextInheritance off + MaskHideContents off + System { + Name "Autotuner2" + Location [118, 33, 1160, 912] + Open off + ModelBrowserVisibility off + ModelBrowserWidth 200 + ScreenColor "white" + PaperOrientation "landscape" + PaperPositionMode "auto" + PaperType "A4" + PaperUnits "centimeters" + TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] + TiledPageScale 1 + ShowPageBoundaries off + ZoomFactor "80" + Block { + BlockType Inport + Name "e" + SID "1190" + Position [30, 148, 60, 162] + ZOrder -1 + IconDisplay "Port number" + } + Block { + BlockType Inport + Name "other_done" + SID "1191" + Position [35, 413, 65, 427] + ZOrder -1 + Port "2" + IconDisplay "Port number" + } + Block { + BlockType Product + Name "AND" + SID "1192" + Ports [2, 1] + Position [110, 412, 140, 443] + ZOrder -13 + InputSameDT off + OutDataTypeStr "Inherit: Inherit via internal rule" + SaturateOnIntegerOverflow off + } + Block { + BlockType Reference + Name "Compare\nTo Constant" + SID "1193" + Ports [1, 1] + Position [370, 200, 400, 230] + ZOrder 120 + LibraryVersion "1.260" + SourceBlock "simulink/Logic and Bit\nOperations/Compare\nTo Constant" + SourceType "Compare To Constant" + relop ">=" + const "params.expStartTime" + OutDataTypeStr "boolean" + ZeroCross on + } + Block { + BlockType Constant + Name "Constant" + SID "1194" + Position [315, 265, 345, 295] + ZOrder 119 + Value "params.ustart" + SampleTime "simopt.h" + } + Block { + BlockType SubSystem + Name "Constraint" + SID "1195" + Ports [3, 1] + Position [675, 355, 745, 405] + ZOrder -4 + LibraryVersion "1.32" + ErrorFcn "Stateflow.Translate.translate" + PermitHierarchicalResolution "ExplicitOnly" + TreatAsAtomicUnit on + MinAlgLoopOccurrences off + PropExecContextOutsideSubsystem off + SystemSampleTime "simopt.h" + RTWSystemCode "Auto" + FunctionWithSeparateData off + Opaque off + RequestExecContextInheritance off + MaskHideContents off + SFBlockType "MATLAB Function" + MaskType "Stateflow" + MaskDescription "Embedded MATLAB block" + MaskSelfModifiable on + MaskDisplay "bgColor = Simulink.Root.ColorString2Rgb(get_param(gcbh, 'BackgroundColor')); image(imread('p" + "rivate/eml_membrane_16.png','png','BackgroundColor',bgColor(1:3)),'center'); disp([10 10 'Constraint']);" + MaskIconFrame on + MaskIconOpaque off + MaskIconRotate "none" + MaskPortRotate "default" + MaskIconUnits "normalized" + System { + Name "Constraint" + Location [223, 338, 826, 833] + Open off + ModelBrowserVisibility off + ModelBrowserWidth 200 + ScreenColor "white" + PaperOrientation "landscape" + PaperPositionMode "auto" + PaperType "A4" + PaperUnits "centimeters" + TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] + TiledPageScale 1 + ShowPageBoundaries off + ZoomFactor "100" + SIDHighWatermark "29" + Block { + BlockType Inport + Name "time" + SID "1195::23" + Position [20, 101, 40, 119] + ZOrder 9 + IconDisplay "Port number" + } + Block { + BlockType Inport + Name "all_done" + SID "1195::24" + Position [20, 136, 40, 154] + ZOrder 10 + Port "2" + IconDisplay "Port number" + } + Block { + BlockType Inport + Name "timeAfterExp" + SID "1195::26" + Position [20, 171, 40, 189] + ZOrder 11 + Port "3" + IconDisplay "Port number" + } + Block { + BlockType Demux + Name " Demux " + SID "1195::28" + Ports [1, 1] + Position [270, 230, 320, 270] + ZOrder 13 + Outputs "1" + } + Block { + BlockType S-Function + Name " SFunction " + SID "1195::27" + Tag "Stateflow S-Function autotuner_tito_2012a 9" + Ports [3, 2] + Position [180, 100, 230, 180] + ZOrder 12 + FunctionName "sf_sfun" + PortCounts "[3 2]" + EnableBusSupport on + Port { + PortNumber 2 + Name "stop" + RTWStorageClass "Auto" + DataLoggingNameMode "SignalName" + } + } + Block { + BlockType Terminator + Name " Terminator " + SID "1195::29" + Position [460, 241, 480, 259] + ZOrder 14 + } + Block { + BlockType Outport + Name "stop" + SID "1195::5" + Position [460, 101, 480, 119] + ZOrder -7 + IconDisplay "Port number" + } + Line { + SrcBlock " SFunction " + SrcPort 1 + Points [20, 0] + DstBlock " Demux " + DstPort 1 + } + Line { + SrcBlock " Demux " + SrcPort 1 + DstBlock " Terminator " + DstPort 1 + } + Line { + Name "stop" + Labels [0, 0] + SrcBlock " SFunction " + SrcPort 2 + DstBlock "stop" + DstPort 1 + } + Line { + SrcBlock "timeAfterExp" + SrcPort 1 + DstBlock " SFunction " + DstPort 3 + } + Line { + SrcBlock "all_done" + SrcPort 1 + DstBlock " SFunction " + DstPort 2 + } + Line { + SrcBlock "time" + SrcPort 1 + DstBlock " SFunction " + DstPort 1 + } + } + } + Block { + BlockType DigitalClock + Name "Digital Clock" + SID "1196" + Position [15, 203, 80, 227] + ZOrder -8 + SampleTime "simopt.h" + } + Block { + BlockType Constant + Name "Relay_parameters" + SID "1197" + Position [30, 25, 60, 55] + ZOrder -4 + Value "[params.eps,params.gamma, simopt.h,params.low_limit,params.dev_limit,1,params.uon,params.hyst,par" + "ams.noiseMeasureTime,1,params.gamma2,params.switches,params.ystep,params.ustep]" + SampleTime "simopt.h" + } + Block { + BlockType Scope + Name "Scope" + SID "1198" + Ports [1] + Position [795, 279, 825, 311] + ZOrder 54 + Floating off + Location [773, 742, 1350, 1166] + Open off + NumInputPorts "1" + ZoomMode "xonly" + List { + ListType AxesTitles + axes1 "%<SignalLabel>" + } + List { + ListType ScopeGraphics + FigureColor "[0.156862745098039 0.156862745098039 0.156862745098039]" + AxesColor "[0 0 0]" + AxesTickColor "[0.686274509803922 0.686274509803922 0.686274509803922]" + LineColors "[1 1 0;1 0 1;0 1 1;1 0 0;0 1 0;0 0 1]" + LineStyles "-|-|-|-|-|-" + LineWidths "[0.5 0.5 0.5 0.5 0.5 0.5]" + MarkerStyles "none|none|none|none|none|none" + } + ShowLegends off + YMin "-2" + YMax "10" + SaveName "ScopeData1" + DataFormat "StructureWithTime" + LimitDataPoints off + } + Block { + BlockType Stop + Name "Stop Simulation" + SID "1199" + Position [795, 362, 830, 398] + ZOrder -4 + } + Block { + BlockType Switch + Name "Switch" + SID "1200" + Position [730, 175, 780, 215] + ZOrder 62 + Criteria "u2 ~= 0" + InputSameDT off + SaturateOnIntegerOverflow off + } + Block { + BlockType SubSystem + Name "relay_exp\n" + SID "1201" + Ports [5, 3] + Position [480, 22, 635, 158] + ZOrder 3 + LibraryVersion "1.32" + ErrorFcn "Stateflow.Translate.translate" + PermitHierarchicalResolution "ExplicitOnly" + TreatAsAtomicUnit on + MinAlgLoopOccurrences off + PropExecContextOutsideSubsystem off + SystemSampleTime "simopt.h" + RTWSystemCode "Auto" + FunctionWithSeparateData off + Opaque off + RequestExecContextInheritance off + MaskHideContents off + SFBlockType "MATLAB Function" + MaskType "Stateflow" + MaskDescription "Embedded MATLAB block" + MaskSelfModifiable on + MaskDisplay "bgColor = Simulink.Root.ColorString2Rgb(get_param(gcbh, 'BackgroundColor')); image(imread('p" + "rivate/eml_membrane_16.png','png','BackgroundColor',bgColor(1:3)),'center'); disp([10 10 'relay_exp']);" + MaskIconFrame on + MaskIconOpaque off + MaskIconRotate "none" + MaskPortRotate "default" + MaskIconUnits "normalized" + System { + Name "relay_exp\n" + Location [189, 219, 840, 949] + Open off + ModelBrowserVisibility off + ModelBrowserWidth 200 + ScreenColor "white" + PaperOrientation "landscape" + PaperPositionMode "auto" + PaperType "A4" + PaperUnits "centimeters" + TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] + TiledPageScale 1 + ShowPageBoundaries off + ZoomFactor "100" + SIDHighWatermark "41" + Block { + BlockType Inport + Name "relay_par" + SID "1201::36" + Position [20, 101, 40, 119] + ZOrder 21 + IconDisplay "Port number" + } + Block { + BlockType Inport + Name "e" + SID "1201::23" + Position [20, 136, 40, 154] + ZOrder 9 + Port "2" + IconDisplay "Port number" + } + Block { + BlockType Inport + Name "t" + SID "1201::28" + Position [20, 171, 40, 189] + ZOrder 14 + Port "3" + IconDisplay "Port number" + } + Block { + BlockType Inport + Name "u_ref" + SID "1201::37" + Position [20, 206, 40, 224] + ZOrder 22 + Port "4" + IconDisplay "Port number" + } + Block { + BlockType Inport + Name "run_exp" + SID "1201::31" + Position [20, 246, 40, 264] + ZOrder 17 + Port "5" + IconDisplay "Port number" + } + Block { + BlockType Demux + Name " Demux " + SID "1201::40" + Ports [1, 1] + Position [270, 245, 320, 285] + ZOrder 25 + Outputs "1" + } + Block { + BlockType S-Function + Name " SFunction " + SID "1201::39" + Tag "Stateflow S-Function autotuner_tito_2012a 10" + Ports [5, 4] + Position [180, 100, 230, 220] + ZOrder 24 + FunctionName "sf_sfun" + PortCounts "[5 4]" + EnableBusSupport on + Port { + PortNumber 2 + Name "result" + RTWStorageClass "Auto" + DataLoggingNameMode "SignalName" + } + Port { + PortNumber 3 + Name "u" + RTWStorageClass "Auto" + DataLoggingNameMode "SignalName" + } + Port { + PortNumber 4 + Name "done" + RTWStorageClass "Auto" + DataLoggingNameMode "SignalName" + } + } + Block { + BlockType Terminator + Name " Terminator " + SID "1201::41" + Position [460, 256, 480, 274] + ZOrder 26 + } + Block { + BlockType Outport + Name "result" + SID "1201::38" + Position [460, 101, 480, 119] + ZOrder 23 + IconDisplay "Port number" + } + Block { + BlockType Outport + Name "u" + SID "1201::27" + Position [460, 136, 480, 154] + ZOrder 13 + Port "2" + IconDisplay "Port number" + } + Block { + BlockType Outport + Name "done" + SID "1201::32" + Position [460, 171, 480, 189] + ZOrder 18 + Port "3" + IconDisplay "Port number" + } + Line { + SrcBlock " SFunction " + SrcPort 1 + DstBlock " Demux " + DstPort 1 + } + Line { + SrcBlock " Demux " + SrcPort 1 + DstBlock " Terminator " + DstPort 1 + } + Line { + Name "done" + Labels [0, 0] + SrcBlock " SFunction " + SrcPort 4 + DstBlock "done" + DstPort 1 + } + Line { + Name "u" + Labels [0, 0] + SrcBlock " SFunction " + SrcPort 3 + DstBlock "u" + DstPort 1 + } + Line { + Name "result" + Labels [0, 0] + SrcBlock " SFunction " + SrcPort 2 + DstBlock "result" + DstPort 1 + } + Line { + SrcBlock "run_exp" + SrcPort 1 + DstBlock " SFunction " + DstPort 5 + } + Line { + SrcBlock "u_ref" + SrcPort 1 + DstBlock " SFunction " + DstPort 4 + } + Line { + SrcBlock "t" + SrcPort 1 + DstBlock " SFunction " + DstPort 3 + } + Line { + SrcBlock "e" + SrcPort 1 + DstBlock " SFunction " + DstPort 2 + } + Line { + SrcBlock "relay_par" + SrcPort 1 + DstBlock " SFunction " + DstPort 1 + } + } + } + Block { + BlockType Constant + Name "timeAfterExp" + SID "1202" + Position [545, 390, 575, 420] + ZOrder -4 + Value "params.timeAfterExp" + } + Block { + BlockType Outport + Name "u" + SID "1203" + Position [835, 188, 865, 202] + ZOrder 4 + IconDisplay "Port number" + } + Block { + BlockType Outport + Name "done" + SID "1204" + Position [830, 113, 860, 127] + ZOrder 4 + Port "2" + IconDisplay "Port number" + } + Block { + BlockType Outport + Name "result2" + SID "1205" + Position [730, 38, 760, 52] + ZOrder 121 + Port "3" + IconDisplay "Port number" + } + Line { + SrcBlock "Digital Clock" + SrcPort 1 + Points [30, 0] + Branch { + Points [0, 150] + DstBlock "Constraint" + DstPort 1 + } + Branch { + Points [205, 0] + Branch { + DstBlock "Compare\nTo Constant" + DstPort 1 + } + Branch { + Points [0, -124] + Branch { + Points [155, -1] + } + Branch { + DstBlock "relay_exp\n" + DstPort 3 + } + } + } + } + Line { + SrcBlock "Constant" + SrcPort 1 + Points [83, 0] + Branch { + Points [134, 0; 0, -70] + DstBlock "Switch" + DstPort 3 + } + Branch { + Points [0, -165] + DstBlock "relay_exp\n" + DstPort 4 + } + } + Line { + SrcBlock "Compare\nTo Constant" + SrcPort 1 + Points [60, 0; 0, -19] + Branch { + DstBlock "relay_exp\n" + DstPort 5 + } + Branch { + Points [250, 0] + DstBlock "Switch" + DstPort 2 + } + } + Line { + SrcBlock "timeAfterExp" + SrcPort 1 + Points [28, 0; 0, -10] + DstBlock "Constraint" + DstPort 3 + } + Line { + SrcBlock "relay_exp\n" + SrcPort 3 + Points [0, 0] + Branch { + Points [0, -15] + DstBlock "done" + DstPort 1 + } + Branch { + Points [0, 160] + Branch { + Points [0, 176; -551, 0; 0, -36] + DstBlock "AND" + DstPort 2 + } + Branch { + DstBlock "Scope" + DstPort 1 + } + } + } + Line { + SrcBlock "other_done" + SrcPort 1 + DstBlock "AND" + DstPort 1 + } + Line { + SrcBlock "AND" + SrcPort 1 + Points [110, 0; 0, -50] + DstBlock "Constraint" + DstPort 2 + } + Line { + SrcBlock "Constraint" + SrcPort 1 + DstBlock "Stop Simulation" + DstPort 1 + } + Line { + SrcBlock "relay_exp\n" + SrcPort 1 + DstBlock "result2" + DstPort 1 + } + Line { + SrcBlock "e" + SrcPort 1 + Points [147, 0; 0, -90] + DstBlock "relay_exp\n" + DstPort 2 + } + Line { + SrcBlock "relay_exp\n" + SrcPort 2 + Points [75, 0] + DstBlock "Switch" + DstPort 1 + } + Line { + SrcBlock "Relay_parameters" + SrcPort 1 + DstBlock "relay_exp\n" + DstPort 1 + } + Line { + SrcBlock "Switch" + SrcPort 1 + DstBlock "u" + DstPort 1 + } + } + } + Block { + BlockType SubSystem + Name "Logger" + SID "1206" + Ports [1] + Position [545, 141, 600, 179] + ZOrder 117 + MinAlgLoopOccurrences off + PropExecContextOutsideSubsystem off + RTWSystemCode "Auto" + FunctionWithSeparateData off + Opaque off + RequestExecContextInheritance off + MaskHideContents off + System { + Name "Logger" + Location [1911, 198, 2953, 1077] + Open off + ModelBrowserVisibility off + ModelBrowserWidth 200 + ScreenColor "white" + PaperOrientation "landscape" + PaperPositionMode "auto" + PaperType "A4" + PaperUnits "centimeters" + TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] + TiledPageScale 1 + ShowPageBoundaries off + ZoomFactor "100" + Block { + BlockType Inport + Name "result" + SID "1207" + Position [20, 43, 50, 57] + ZOrder 88 + IconDisplay "Port number" + SampleTime "simopt.h" + } + Block { + BlockType ToWorkspace + Name "Logger" + SID "1208" + Ports [1] + Position [105, 35, 165, 65] + ZOrder 87 + VariableName "result" + MaxDataPoints "1" + SampleTime "simopt.h" + SaveFormat "Structure With Time" + } + Line { + SrcBlock "result" + SrcPort 1 + DstBlock "Logger" + DstPort 1 + } + } + } + Block { + BlockType Mux + Name "Mux" + SID "1209" + Ports [2, 1] + Position [485, 141, 490, 179] + ZOrder 118 + ShowName off + Inputs "2" + DisplayOption "bar" + } + Block { + BlockType Outport + Name "u1" + SID "1210" + Position [405, 103, 435, 117] + ZOrder -2 + IconDisplay "Port number" + } + Block { + BlockType Outport + Name "u2" + SID "1211" + Position [405, 193, 435, 207] + ZOrder 4 + Port "2" + IconDisplay "Port number" + } + Line { + SrcBlock "Mux" + SrcPort 1 + DstBlock "Logger" + DstPort 1 + } + Line { + SrcBlock "Autotuner2" + SrcPort 3 + Points [100, 0; 0, -55] + DstBlock "Mux" + DstPort 2 + } + Line { + SrcBlock "Autotuner1" + SrcPort 3 + Points [73, 0; 0, 15] + DstBlock "Mux" + DstPort 1 + } + Line { + SrcBlock "e2" + SrcPort 1 + DstBlock "Autotuner2" + DstPort 1 + } + Line { + SrcBlock "e1" + SrcPort 1 + DstBlock "Autotuner1" + DstPort 1 + } + Line { + SrcBlock "Autotuner2" + SrcPort 1 + Points [0, 5] + DstBlock "u2" + DstPort 1 + } + Line { + SrcBlock "Autotuner1" + SrcPort 1 + Points [9, 0; 0, 5] + DstBlock "u1" + DstPort 1 + } + Line { + SrcBlock "Autotuner2" + SrcPort 2 + Points [5, 0; 0, -50; -135, 0] + DstBlock "Autotuner1" + DstPort 2 + } + Line { + SrcBlock "Autotuner1" + SrcPort 2 + Points [10, 0; 0, 60; -120, 0] + DstBlock "Autotuner2" + DstPort 2 + } + } + } + Block { + BlockType Scope + Name "u1" + SID "544" + Ports [1] + Position [695, 29, 725, 61] + ZOrder 147 + Floating off + Location [6, 359, 611, 539] + Open on + NumInputPorts "1" + List { + ListType AxesTitles + axes1 "%<SignalLabel>" + } + List { + ListType ScopeGraphics + FigureColor "[0.156862745098039 0.156862745098039 0.156862745098039]" + AxesColor "[0 0 0]" + AxesTickColor "[0.686274509803922 0.686274509803922 0.686274509803922]" + LineColors "[1 1 0;1 0 1;0 1 1;1 0 0;0 1 0;0 0 1]" + LineStyles "-|-|-|-|-|-" + LineWidths "[0.5 0.5 0.5 0.5 0.5 0.5]" + MarkerStyles "none|none|none|none|none|none" + } + ShowLegends off + YMin "0" + YMax "10" + SaveName "ScopeData1" + DataFormat "StructureWithTime" + LimitDataPoints off + } + Block { + BlockType Scope + Name "u2" + SID "1103" + Ports [1] + Position [715, 384, 745, 416] + ZOrder 147 + Floating off + Location [559, 332, 1164, 511] + Open on + NumInputPorts "1" + List { + ListType AxesTitles + axes1 "%<SignalLabel>" + } + List { + ListType ScopeGraphics + FigureColor "[0.156862745098039 0.156862745098039 0.156862745098039]" + AxesColor "[0 0 0]" + AxesTickColor "[0.686274509803922 0.686274509803922 0.686274509803922]" + LineColors "[1 1 0;1 0 1;0 1 1;1 0 0;0 1 0;0 0 1]" + LineStyles "-|-|-|-|-|-" + LineWidths "[0.5 0.5 0.5 0.5 0.5 0.5]" + MarkerStyles "none|none|none|none|none|none" + } + ShowLegends off + YMin "0" + YMax "10" + SaveName "ScopeData2" + DataFormat "StructureWithTime" + LimitDataPoints off + } + Block { + BlockType Scope + Name "y1" + SID "1033" + Ports [1] + Position [840, 174, 870, 206] + ZOrder 148 + Floating off + Location [6, 95, 594, 284] + Open off + NumInputPorts "1" + List { + ListType AxesTitles + axes1 "%<SignalLabel>" + } + List { + ListType ScopeGraphics + FigureColor "[0.156862745098039 0.156862745098039 0.156862745098039]" + AxesColor "[0 0 0]" + AxesTickColor "[0.686274509803922 0.686274509803922 0.686274509803922]" + LineColors "[1 1 0;1 0 1;0 1 1;1 0 0;0 1 0;0 0 1]" + LineStyles "-|-|-|-|-|-" + LineWidths "[0.5 0.5 0.5 0.5 0.5 0.5]" + MarkerStyles "none|none|none|none|none|none" + } + ShowLegends off + YMin "0" + YMax "10" + SaveName "ScopeData3" + DataFormat "StructureWithTime" + LimitDataPoints off + } + Block { + BlockType Scope + Name "y2" + SID "1034" + Ports [1] + Position [840, 304, 870, 336] + ZOrder 148 + Floating off + Location [558, 93, 1154, 313] + Open on + NumInputPorts "1" + ZoomMode "yonly" + List { + ListType AxesTitles + axes1 "%<SignalLabel>" + } + List { + ListType ScopeGraphics + FigureColor "[0.156862745098039 0.156862745098039 0.156862745098039]" + AxesColor "[0 0 0]" + AxesTickColor "[0.686274509803922 0.686274509803922 0.686274509803922]" + LineColors "[1 1 0;1 0 1;0 1 1;1 0 0;0 1 0;0 0 1]" + LineStyles "-|-|-|-|-|-" + LineWidths "[0.5 0.5 0.5 0.5 0.5 0.5]" + MarkerStyles "none|none|none|none|none|none" + } + ShowLegends off + YMin "0" + YMax "10" + SaveName "ScopeData5" + DataFormat "StructureWithTime" + LimitDataPoints off + } + Line { + SrcBlock "multi-NOMAD" + SrcPort 1 + Points [0, -10; 20, 0] + Branch { + Points [0, -40; 380, 0] + Branch { + Points [0, 15] + DstBlock "Logger" + DstPort 1 + } + Branch { + Points [0, -70] + DstBlock "u1" + DstPort 1 + } + } + Branch { + Points [30, 0; 0, -5] + DstBlock "WoodBerry" + DstPort 1 + } + } + Line { + SrcBlock "multi-NOMAD" + SrcPort 2 + Points [0, 15; 25, 0] + Branch { + Points [0, 40; 400, 0] + Branch { + Points [0, -20] + DstBlock "Logger" + DstPort 3 + } + Branch { + Points [0, 160] + DstBlock "u2" + DstPort 1 + } + } + Branch { + Points [65, 0] + DstBlock "WoodBerry" + DstPort 2 + } + } + Line { + SrcBlock "WoodBerry" + SrcPort 1 + Points [70, 0; 0, -10] + Branch { + Points [20, 0; 0, 35; 135, 0] + Branch { + DstBlock "Logger" + DstPort 2 + } + Branch { + Points [0, 15] + DstBlock "y1" + DstPort 1 + } + } + Branch { + Points [0, -50; -440, 0] + DstBlock "Sum" + DstPort 1 + } + } + Line { + SrcBlock "WoodBerry" + SrcPort 2 + Points [60, 0; 0, 80; 25, 0] + Branch { + Points [75, 0] + Branch { + DstBlock "Logger" + DstPort 4 + } + Branch { + Points [0, 55] + DstBlock "y2" + DstPort 1 + } + } + Branch { + Points [-5, 0; 0, 90; -445, 0; 0, -130] + DstBlock "Sum1" + DstPort 2 + } + } + Line { + SrcBlock "Step" + SrcPort 1 + Points [20, 0; 0, 45] + DstBlock "Sum" + DstPort 2 + } + Line { + SrcBlock "Step1" + SrcPort 1 + Points [30, 0] + DstBlock "Sum1" + DstPort 1 + } + Line { + SrcBlock "Sum" + SrcPort 1 + DstBlock "multi-NOMAD" + DstPort 1 + } + Line { + SrcBlock "Sum1" + SrcPort 1 + Points [25, 0] + DstBlock "multi-NOMAD" + DstPort 2 + } + } +} +# Finite State Machines +# +# Stateflow Version 7.6 (R2011b) dated Jan 25 2012, 13:50:40 +# +# + + +Stateflow { + machine { + id 1 + name "autotuner_tito_2012a" + created "01-Jul-2013 12:16:13" + isLibrary 0 + firstTarget 46 + sfVersion 76014001.00040001 + } + chart { + id 2 + name "multi-NOMAD/Autotuner1/Constraint" + windowPosition [331.86 295.2 211 434] + viewLimits [0 156.75 0 153.75] + screen [1 1 2944 1280 1.25] + treeNode [0 3 0 0] + firstTransition 5 + firstJunction 4 + viewObj 2 + machine 1 + ssIdHighWaterMark 9 + decomposition CLUSTER_CHART + type EML_CHART + firstData 6 + chartFileNumber 7 + disableImplicitCasting 1 + eml { + name "Constraint" + } + } + state { + id 3 + labelString "eML_blk_kernel()" + position [18 64.5 118 66] + fontSize 12 + chart 2 + treeNode [2 0 0 0] + superState SUBCHART + subviewer 2 + ssIdNumber 1 + type FUNC_STATE + decomposition CLUSTER_STATE + eml { + isEML 1 + script "%function stop = Constraint(tstop, time, done)\nfunction stop = Constraint(time, all_done, timeAf" + "terExp)\n%#codegen\npersistent tstopp first\nif isempty(tstopp)\n tstopp = 10000;\n first = true;\nend\nif" + " all_done == 1 && first \n tstopp = time;\n first = false;\nend\nif time > tstopp+timeAfterExp;\n stop " + "= 1;\nelse\n stop = 0;\nend" + editorLayout "100 M4x1[10 5 700 500]" + } + } + junction { + id 4 + position [23.5747 49.5747 7] + chart 2 + linkNode [2 0 0] + subviewer 2 + ssIdNumber 3 + type CONNECTIVE_JUNCTION + } + transition { + id 5 + labelString "{eML_blk_kernel();}" + labelPosition [32.125 19.875 102.544 14.964] + fontSize 12 + src { + intersection [0 0 1 0 23.5747 14.625 0 0] + } + dst { + id 4 + intersection [1 0 -1 0 23.5747 42.5747 0 0] + } + midPoint [23.5747 24.9468] + chart 2 + linkNode [2 0 0] + dataLimits [23.575 23.575 14.625 34.575] + subviewer 2 + drawStyle SMART + slide { + sticky BOTH_STICK + } + executionOrder 1 + ssIdNumber 2 + } + data { + id 6 + ssIdNumber 5 + name "stop" + linkNode [2 0 7] + scope OUTPUT_DATA + machine 1 + props { + array { + size "-1" + } + type { + method SF_INHERITED_TYPE + primitive SF_DOUBLE_TYPE + } + complexity SF_COMPLEX_INHERITED + frame SF_FRAME_NO + } + dataType "Inherit: Same as Simulink" + } + data { + id 7 + ssIdNumber 6 + name "time" + linkNode [2 6 8] + scope INPUT_DATA + machine 1 + props { + array { + size "-1" + } + type { + method SF_INHERITED_TYPE + primitive SF_DOUBLE_TYPE + isSigned 1 + wordLength "16" + } + complexity SF_COMPLEX_INHERITED + frame SF_FRAME_INHERITED + } + dataType "Inherit: Same as Simulink" + } + data { + id 8 + ssIdNumber 7 + name "all_done" + linkNode [2 7 9] + scope INPUT_DATA + machine 1 + props { + array { + size "-1" + } + type { + method SF_INHERITED_TYPE + primitive SF_DOUBLE_TYPE + isSigned 1 + wordLength "16" + } + complexity SF_COMPLEX_INHERITED + frame SF_FRAME_INHERITED + } + dataType "Inherit: Same as Simulink" + } + data { + id 9 + ssIdNumber 9 + name "timeAfterExp" + linkNode [2 8 0] + scope INPUT_DATA + machine 1 + props { + array { + size "-1" + } + type { + method SF_INHERITED_TYPE + primitive SF_DOUBLE_TYPE + isSigned 1 + wordLength "16" + } + complexity SF_COMPLEX_INHERITED + frame SF_FRAME_INHERITED + } + dataType "Inherit: Same as Simulink" + } + instance { + id 10 + name "multi-NOMAD/Autotuner1/Constraint" + machine 1 + chart 2 + } + chart { + id 11 + name "multi-NOMAD/Autotuner1/relay_exp\n" + windowPosition [359.686 -10 429 739.2] + viewLimits [0 319.2 0 430.6] + screen [1 1 2944 1280 1.25] + treeNode [0 12 0 0] + firstTransition 14 + firstJunction 13 + viewObj 11 + machine 1 + ssIdHighWaterMark 17 + decomposition CLUSTER_CHART + type EML_CHART + firstData 15 + chartFileNumber 8 + disableImplicitCasting 1 + eml { + name "relay_exp" + } + } + state { + id 12 + labelString "eML_blk_kernel()" + position [18 64.5 118 66] + fontSize 12 + chart 11 + treeNode [11 0 0 0] + superState SUBCHART + subviewer 11 + ssIdNumber 1 + type FUNC_STATE + decomposition CLUSTER_STATE + eml { + isEML 1 + script "function [result, u, done]= relay_exp(relay_par, e,t, u_ref, run_exp)\n\n\n%%%%%%%%%% Definitions" + " and default values %%%%%%%%%%%%%%\ny = -e;\n% Relay parameters, values from workspace.\npersistent d1 d2 u_on u" + "_off h\ngamma = relay_par(11); % index 2 is gamma, 11 is gamma2 \nt_sample = relay_par(3);\nbigYup = relay_par(6" + ");\nrelayMaxDev = relay_par(7);\ndef_h = relay_par(8);\nnoiseMeasureTime = relay_par(9);\nmaxSwitches = relay_pa" + "r(12);\nystep = relay_par(13);\nustep = relay_par(14);\n\npersistent yref uref\nif isempty(d2)\n h=def_h; % t" + "hese values will be re-assigned later and never used.\n d1 = gamma;\n d2 = 1;\n u_on = d1;\n u_off " + "= -d2;\n uref = 0;\n yref = 0;\nend\n\npersistent u_old resultvec\nif isempty(u_old)\n u_old = uref;\n " + " resultvec = zeros(23,1);\nend\n\npersistent sample\nif isempty(sample)\n sample = 0;\nend\n\npersistent st" + "artup Ksign\nif isempty(Ksign)\n Ksign = 1; % Is re-assigned during at the startup phase\nend\n\npersistent p" + "aram done_per\nif isempty(param)\n param = [1.1, 16, 0]; % Quadtank minfas (should be an input somehow if exi" + "sting PID parameters are used to bring it to its working point)\n done_per = 0;\nend\nPID_param = param;\ndon" + "e = done_per;\n\n% To handle switches\npersistent switching_times switch_index \nif isempty(switching_times)\n " + " switching_times = zeros(1,20); % Shouldn't need to be so large\n switch_index = 1;\nend\n\n%%%%%%%%% Startu" + "p params %%%%%%%%%%%\npersistent a b c tff exp_t yh yl measureNoise first\nif isempty(startup)\n tff = 5/t_s" + "ample; % According to Tore about 3-5s is appropriate for the startup growth \n b = 40;\n c = relayMaxDev/(" + "b-1);\n a = uref-c;\n measureNoise = 1;\n startup = 0;\n yh = 0;\n yl = 0;\n first = true;\nen" + "d\n%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n\nresult = resultvec;\nif run_exp == 0\n u = 0;\n PID_" + "param = param;\n return\nend\n\n%%%%%%%%%%%%% Program running %%%%%%%%%%%%%%%%%\nsample = sample+1;\n\n%%%%%%" + "%%% Startup %%%%%%%%%%%%\nif measureNoise == 1\n if first \n uref = u_ref;\n yref = y;\n " + " first = false;\n yh = yref;\n yl = yref;\n end\n u = uref;\n if sample < noiseMeasureTim" + "e/t_sample\n yh = max(yh,y);\n yl = min(yl,y);\n else\n noise = (yh-yl)/2;\n yref" + " = (yh+yl)/2;\n %yref = y; % Could test the latest value instead of average?\n resultvec(15) = yre" + "f;\n resultvec(16) = uref;\n h = max(2*noise, def_h);\n measureNoise = 0;\n startup " + "= 1;\n resultvec(23) = t;\n end\nelseif startup == 1\n exp_t = sample-noiseMeasureTime/t_sample;\n " + " a = uref-c;\n u = a+c*b^(exp_t/tff);\n if u > relayMaxDev+uref\n u = relayMaxDev+ure" + "f;\n end\n if exp_t > 1\n ydev = y-yref; \n if abs(ydev) > h % outside hyste" + "resis, stop startup and decide Ksign\n Ksign = ydev/abs(ydev);\n if bigYup == 1\n " + " d1 = min(relayMaxDev, gamma*abs(u-uref));\n d2 = d1/gamma;\n " + " else\n d2 = min(relayMaxDev, gamma*abs(u-uref));\n d1 = d2/gamma;\n " + " end\n startup = 0;\n elseif exp_t > tff\n u = uref+relayMaxD" + "ev;\n end\n end\nelseif run_exp == 1\n %%%%%% Update amplitudes %%%%%%%\n u_on = uref+Ks" + "ign*d1;\n u_off = uref-Ksign*d2;\n %%%%%% Calculate new u %%%%%%%%%\n u = rel_func(y,u_old,u_on, u_off," + "yref,h);\nelse \n u = 0; %Shouldn't be needed?\nend\n\n%%%%%%% At switching points %%%%%%%\nif sample>1 && (u" + "-uref)*(u_old-uref) < 0\n switching_times(switch_index) = t;\n if switch_index > 2\n tp = switching" + "_times(switch_index)-switching_times(switch_index-2);\n resultvec(19) = tp;\n end\n if switch_index" + " == 3 % Step in yref/uref after two switches\n yref = yref+ystep*h;\n uref = uref+(d1+d2)/2*Ksign*" + "ustep;\n end\n if switch_index > maxSwitches\n done_per = 1;\n resultvec(17) = t;\n end\n" + " switch_index = switch_index+1;\nend\n%%%% store data %%%%%%\nu_old = u;\nend\n\nfunction u = rel_func(y,uold" + ",uon,uoff,yref,h)\n if y <= yref-h\n u = uon;\n elseif y < yref+h && y > yref-h\n u = uold;\n else u = " + "uoff;\n end\nend\n\n\n\n\n\n\n\n" + editorLayout "100 M4x1[10 5 700 500]" + } + } + junction { + id 13 + position [23.5747 49.5747 7] + chart 11 + linkNode [11 0 0] + subviewer 11 + ssIdNumber 3 + type CONNECTIVE_JUNCTION + } + transition { + id 14 + labelString "{eML_blk_kernel();}" + labelPosition [32.125 19.875 100.8 18.448] + fontSize 12 + src { + intersection [0 0 1 0 23.5747 14.625 0 0] + } + dst { + id 13 + intersection [1 0 -1 0 23.5747 42.5747 0 0] + } + midPoint [23.5747 24.9468] + chart 11 + linkNode [11 0 0] + dataLimits [23.575 23.575 14.625 34.575] + subviewer 11 + drawStyle SMART + slide { + sticky BOTH_STICK + } + executionOrder 1 + ssIdNumber 2 + } + data { + id 15 + ssIdNumber 16 + name "result" + linkNode [11 0 16] + scope OUTPUT_DATA + machine 1 + props { + array { + size "-1" + } + type { + method SF_INHERITED_TYPE + primitive SF_DOUBLE_TYPE + isSigned 1 + wordLength "16" + } + complexity SF_COMPLEX_INHERITED + frame SF_FRAME_NO + } + dataType "Inherit: Same as Simulink" + } + data { + id 16 + ssIdNumber 8 + name "u" + linkNode [11 15 17] + scope OUTPUT_DATA + machine 1 + props { + array { + size "-1" + } + type { + method SF_INHERITED_TYPE + primitive SF_DOUBLE_TYPE + isSigned 1 + wordLength "16" + } + complexity SF_COMPLEX_INHERITED + frame SF_FRAME_NO + } + dataType "Inherit: Same as Simulink" + } + data { + id 17 + ssIdNumber 14 + name "relay_par" + linkNode [11 16 18] + scope INPUT_DATA + machine 1 + props { + array { + size "-1" + } + type { + method SF_INHERITED_TYPE + primitive SF_DOUBLE_TYPE + isSigned 1 + wordLength "16" + } + complexity SF_COMPLEX_INHERITED + frame SF_FRAME_INHERITED + } + dataType "Inherit: Same as Simulink" + } + data { + id 18 + ssIdNumber 5 + name "e" + linkNode [11 17 19] + scope INPUT_DATA + machine 1 + props { + array { + size "-1" + } + type { + method SF_INHERITED_TYPE + primitive SF_DOUBLE_TYPE + } + complexity SF_COMPLEX_INHERITED + frame SF_FRAME_NO + } + dataType "Inherit: Same as Simulink" + } + data { + id 19 + ssIdNumber 9 + name "t" + linkNode [11 18 20] + scope INPUT_DATA + machine 1 + props { + array { + size "-1" + } + type { + method SF_INHERITED_TYPE + primitive SF_DOUBLE_TYPE + isSigned 1 + wordLength "16" + } + complexity SF_COMPLEX_INHERITED + frame SF_FRAME_INHERITED + } + dataType "Inherit: Same as Simulink" + } + data { + id 20 + ssIdNumber 15 + name "u_ref" + linkNode [11 19 21] + scope INPUT_DATA + machine 1 + props { + array { + size "-1" + } + type { + method SF_INHERITED_TYPE + primitive SF_DOUBLE_TYPE + isSigned 1 + wordLength "16" + } + complexity SF_COMPLEX_INHERITED + frame SF_FRAME_INHERITED + } + dataType "Inherit: Same as Simulink" + } + data { + id 21 + ssIdNumber 11 + name "run_exp" + linkNode [11 20 22] + scope INPUT_DATA + machine 1 + props { + array { + size "-1" + } + type { + method SF_INHERITED_TYPE + primitive SF_DOUBLE_TYPE + isSigned 1 + wordLength "16" + } + complexity SF_COMPLEX_INHERITED + frame SF_FRAME_INHERITED + } + dataType "Inherit: Same as Simulink" + } + data { + id 22 + ssIdNumber 4 + name "done" + linkNode [11 21 0] + scope OUTPUT_DATA + machine 1 + props { + array { + size "-1" + } + type { + method SF_INHERITED_TYPE + primitive SF_DOUBLE_TYPE + } + complexity SF_COMPLEX_INHERITED + frame SF_FRAME_NO + } + dataType "Inherit: Same as Simulink" + } + instance { + id 23 + name "multi-NOMAD/Autotuner1/relay_exp\n" + machine 1 + chart 11 + } + chart { + id 24 + name "multi-NOMAD/Autotuner2/Constraint" + windowPosition [331.86 295.2 211 434] + viewLimits [0 156.75 0 153.75] + screen [1 1 2944 1280 1.25] + treeNode [0 25 0 0] + firstTransition 27 + firstJunction 26 + viewObj 24 + machine 1 + toolbarMode LIBRARY_TOOLBAR + ssIdHighWaterMark 9 + decomposition CLUSTER_CHART + type EML_CHART + firstData 28 + chartFileNumber 9 + disableImplicitCasting 1 + eml { + name "Constraint" + } + } + state { + id 25 + labelString "eML_blk_kernel()" + position [18 64.5 118 66] + fontSize 12 + chart 24 + treeNode [24 0 0 0] + superState SUBCHART + subviewer 24 + ssIdNumber 1 + type FUNC_STATE + decomposition CLUSTER_STATE + eml { + isEML 1 + script "%function stop = Constraint(tstop, time, done)\nfunction stop = Constraint(time, all_done, timeAf" + "terExp)\n%#codegen\npersistent tstopp first\nif isempty(tstopp)\n tstopp = 10000;\n first = true;\nend\nif" + " all_done == 1 && first \n tstopp = time;\n first = false;\nend\nif time > tstopp+timeAfterExp;\n stop " + "= 1;\nelse\n stop = 0;\nend" + editorLayout "100 M4x1[10 5 700 500]" + } + } + junction { + id 26 + position [23.5747 49.5747 7] + chart 24 + linkNode [24 0 0] + subviewer 24 + ssIdNumber 3 + type CONNECTIVE_JUNCTION + } + transition { + id 27 + labelString "{eML_blk_kernel();}" + labelPosition [32.125 19.875 102.544 14.964] + fontSize 12 + src { + intersection [0 0 1 0 23.5747 14.625 0 0] + } + dst { + id 26 + intersection [1 0 -1 0 23.5747 42.5747 0 0] + } + midPoint [23.5747 24.9468] + chart 24 + linkNode [24 0 0] + dataLimits [23.575 23.575 14.625 34.575] + subviewer 24 + drawStyle SMART + slide { + sticky BOTH_STICK + } + executionOrder 1 + ssIdNumber 2 + } + data { + id 28 + ssIdNumber 5 + name "stop" + linkNode [24 0 29] + scope OUTPUT_DATA + machine 1 + props { + array { + size "-1" + } + type { + method SF_INHERITED_TYPE + primitive SF_DOUBLE_TYPE + } + complexity SF_COMPLEX_INHERITED + frame SF_FRAME_NO + } + dataType "Inherit: Same as Simulink" + } + data { + id 29 + ssIdNumber 6 + name "time" + linkNode [24 28 30] + scope INPUT_DATA + machine 1 + props { + array { + size "-1" + } + type { + method SF_INHERITED_TYPE + primitive SF_DOUBLE_TYPE + isSigned 1 + wordLength "16" + } + complexity SF_COMPLEX_INHERITED + frame SF_FRAME_INHERITED + } + dataType "Inherit: Same as Simulink" + } + data { + id 30 + ssIdNumber 7 + name "all_done" + linkNode [24 29 31] + scope INPUT_DATA + machine 1 + props { + array { + size "-1" + } + type { + method SF_INHERITED_TYPE + primitive SF_DOUBLE_TYPE + isSigned 1 + wordLength "16" + } + complexity SF_COMPLEX_INHERITED + frame SF_FRAME_INHERITED + } + dataType "Inherit: Same as Simulink" + } + data { + id 31 + ssIdNumber 9 + name "timeAfterExp" + linkNode [24 30 0] + scope INPUT_DATA + machine 1 + props { + array { + size "-1" + } + type { + method SF_INHERITED_TYPE + primitive SF_DOUBLE_TYPE + isSigned 1 + wordLength "16" + } + complexity SF_COMPLEX_INHERITED + frame SF_FRAME_INHERITED + } + dataType "Inherit: Same as Simulink" + } + instance { + id 32 + name "multi-NOMAD/Autotuner2/Constraint" + machine 1 + chart 24 + } + chart { + id 33 + name "multi-NOMAD/Autotuner2/relay_exp\n" + windowPosition [359.686 -10 429 739.2] + viewLimits [0 319.2 0 430.6] + screen [1 1 2944 1280 1.25] + treeNode [0 34 0 0] + firstTransition 36 + firstJunction 35 + viewObj 33 + machine 1 + ssIdHighWaterMark 17 + decomposition CLUSTER_CHART + type EML_CHART + firstData 37 + chartFileNumber 10 + disableImplicitCasting 1 + eml { + name "relay_exp" + } + } + state { + id 34 + labelString "eML_blk_kernel()" + position [18 64.5 118 66] + fontSize 12 + chart 33 + treeNode [33 0 0 0] + superState SUBCHART + subviewer 33 + ssIdNumber 1 + type FUNC_STATE + decomposition CLUSTER_STATE + eml { + isEML 1 + script "function [result, u, done]= relay_exp(relay_par, e,t, u_ref, run_exp)\n\n\n%%%%%%%%%% Definitions" + " and default values %%%%%%%%%%%%%%\ny = -e;\n% Relay parameters, values from workspace.\npersistent d1 d2 u_on u" + "_off h\ngamma = relay_par(2); % index 2 is gamma, 11 is gamma2 \nt_sample = relay_par(3);\nbigYup = relay_par(6)" + ";\nrelayMaxDev = relay_par(7);\ndef_h = relay_par(8);\nnoiseMeasureTime = relay_par(9);\nmaxSwitches = relay_par" + "(12);\nystep = relay_par(13);\nustep = relay_par(14);\n\npersistent yref uref\nif isempty(d2)\n h=def_h; % th" + "ese values will be re-assigned later and never used. \n d1 = gamma;\n d2 = 1;\n u_on = d1;\n u_off " + "= -d2;\n uref = 0;\n yref = 0;\nend\n\npersistent u_old resultvec\nif isempty(u_old)\n u_old = uref;\n " + " resultvec = zeros(23,1);\nend\n\npersistent sample\nif isempty(sample)\n sample = 0;\nend\n\npersistent st" + "artup Ksign\nif isempty(Ksign)\n Ksign = 1; % Is re-assigned during at the startup phase\nend\n\npersistent " + "param done_per\nif isempty(param)\n param = [1.1, 16, 0]; % Quadtank minfas (should be an input somehow if ex" + "isting PID parameters are used to bring it to its working point)\n done_per = 0;\nend\nPID_param = param;\ndo" + "ne = done_per;\n\n% To handle switches\npersistent switching_times switch_index \nif isempty(switching_times)\n " + " switching_times = zeros(1,20);\n switch_index = 1;\nend\n\n%%%%%%%%% Startup params %%%%%%%%%%%\npersiste" + "nt a b c tff exp_t yh yl measureNoise first\nif isempty(startup)\n tff = 5/t_sample; % According to Tore abou" + "t 3-5s is appropriate for the startup growth \n b = 40;\n c = relayMaxDev/(b-1);\n a = uref-c;\n mea" + "sureNoise = 1;\n startup = 0;\n yh = 0;\n yl = 0;\n first = true;\nend\n%%%%%%%%%%%%%%%%%%%%%%%%%%%%" + "%%%%%%%%%%%%%%%%%%%\n\nresult = resultvec;\nif run_exp == 0\n u = 0;\n PID_param = param;\n return\nend" + "\n\n%%%%%%%%%%%%% Program running %%%%%%%%%%%%%%%%%\nsample = sample+1;\n\n%%%%%%%%% Startup %%%%%%%%%%%%\nif me" + "asureNoise == 1\n if first \n uref = u_ref;\n yref = y;\n first = false;\n yh = y" + "ref;\n yl = yref;\n end\n u = uref;\n if sample < noiseMeasureTime/t_sample\n yh = max(yh" + ",y);\n yl = min(yl,y);\n else\n noise = (yh-yl)/2;\n yref = (yh+yl)/2;\n %yref = " + "y; % Could test the latest value instead of average?\n resultvec(15) = yref;\n resultvec(16) = ure" + "f;\n h = max(2*noise, def_h);\n measureNoise = 0;\n startup = 1;\n resultvec(23) = t" + ";\n end\nelseif startup == 1\n exp_t = sample-noiseMeasureTime/t_sample;\n a = uref-c;\n u = a+c" + "*b^(exp_t/tff);\n if u > relayMaxDev+uref\n u = relayMaxDev+uref;\n end\n if exp" + "_t > 1\n ydev = y-yref; \n if abs(ydev) > h % outside hysteresis, stop startup and decide " + "Ksign\n Ksign = ydev/abs(ydev);\n if bigYup == 1\n d1 = min(rel" + "ayMaxDev, gamma*abs(u-uref));\n d2 = d1/gamma;\n else\n d2 " + "= min(relayMaxDev, gamma*abs(u-uref));\n d1 = d2/gamma;\n end\n " + " startup = 0;\n elseif exp_t > tff\n u = uref+relayMaxDev;\n end\n e" + "nd\nelseif run_exp == 1\n %%%%%% Update amplitudes %%%%%%%\n u_on = uref+Ksign*d1;\n u_off = uref-Ksign" + "*d2;\n %%%%%% Calculate new u %%%%%%%%%\n u = rel_func(y,u_old,u_on, u_off,yref,h);\nelse \n u = 0; % S" + "houldn't be needed?\nend\n\n%%%%%%% At switching points %%%%%%%\nif sample>1 && (u-uref)*(u_old-uref) < 0\n s" + "witching_times(switch_index) = t;\n if switch_index > 2\n tp = switching_times(switch_index)-switching" + "_times(switch_index-2);\n resultvec(19) = tp;\n end\n if switch_index == 3 % Step in yref/uref afte" + "r two switches\n yref = yref+ystep*h;\n uref = uref+(d1+d2)/2*Ksign*ustep;\n end\n if switch" + "_index > maxSwitches\n done_per = 1;\n resultvec(17) = t;\n end\n switch_index = switch_inde" + "x+1;\nend\n%%%% store data %%%%%%\nu_old = u;\nend\n\nfunction u = rel_func(y,uold,uon,uoff,yref,h)\n if y <= y" + "ref-h\n u = uon;\n elseif y < yref+h && y > yref-h\n u = uold;\n else u = uoff;\n end\nend\n\n\n\n\n\n\n" + "\n" + editorLayout "100 M4x1[10 5 700 500]" + } + } + junction { + id 35 + position [23.5747 49.5747 7] + chart 33 + linkNode [33 0 0] + subviewer 33 + ssIdNumber 3 + type CONNECTIVE_JUNCTION + } + transition { + id 36 + labelString "{eML_blk_kernel();}" + labelPosition [32.125 19.875 100.8 18.448] + fontSize 12 + src { + intersection [0 0 1 0 23.5747 14.625 0 0] + } + dst { + id 35 + intersection [1 0 -1 0 23.5747 42.5747 0 0] + } + midPoint [23.5747 24.9468] + chart 33 + linkNode [33 0 0] + dataLimits [23.575 23.575 14.625 34.575] + subviewer 33 + drawStyle SMART + slide { + sticky BOTH_STICK + } + executionOrder 1 + ssIdNumber 2 + } + data { + id 37 + ssIdNumber 16 + name "result" + linkNode [33 0 38] + scope OUTPUT_DATA + machine 1 + props { + array { + size "-1" + } + type { + method SF_INHERITED_TYPE + primitive SF_DOUBLE_TYPE + isSigned 1 + wordLength "16" + } + complexity SF_COMPLEX_INHERITED + frame SF_FRAME_NO + } + dataType "Inherit: Same as Simulink" + } + data { + id 38 + ssIdNumber 8 + name "u" + linkNode [33 37 39] + scope OUTPUT_DATA + machine 1 + props { + array { + size "-1" + } + type { + method SF_INHERITED_TYPE + primitive SF_DOUBLE_TYPE + isSigned 1 + wordLength "16" + } + complexity SF_COMPLEX_INHERITED + frame SF_FRAME_NO + } + dataType "Inherit: Same as Simulink" + } + data { + id 39 + ssIdNumber 14 + name "relay_par" + linkNode [33 38 40] + scope INPUT_DATA + machine 1 + props { + array { + size "-1" + } + type { + method SF_INHERITED_TYPE + primitive SF_DOUBLE_TYPE + isSigned 1 + wordLength "16" + } + complexity SF_COMPLEX_INHERITED + frame SF_FRAME_INHERITED + } + dataType "Inherit: Same as Simulink" + } + data { + id 40 + ssIdNumber 5 + name "e" + linkNode [33 39 41] + scope INPUT_DATA + machine 1 + props { + array { + size "-1" + } + type { + method SF_INHERITED_TYPE + primitive SF_DOUBLE_TYPE + } + complexity SF_COMPLEX_INHERITED + frame SF_FRAME_NO + } + dataType "Inherit: Same as Simulink" + } + data { + id 41 + ssIdNumber 9 + name "t" + linkNode [33 40 42] + scope INPUT_DATA + machine 1 + props { + array { + size "-1" + } + type { + method SF_INHERITED_TYPE + primitive SF_DOUBLE_TYPE + isSigned 1 + wordLength "16" + } + complexity SF_COMPLEX_INHERITED + frame SF_FRAME_INHERITED + } + dataType "Inherit: Same as Simulink" + } + data { + id 42 + ssIdNumber 15 + name "u_ref" + linkNode [33 41 43] + scope INPUT_DATA + machine 1 + props { + array { + size "-1" + } + type { + method SF_INHERITED_TYPE + primitive SF_DOUBLE_TYPE + isSigned 1 + wordLength "16" + } + complexity SF_COMPLEX_INHERITED + frame SF_FRAME_INHERITED + } + dataType "Inherit: Same as Simulink" + } + data { + id 43 + ssIdNumber 11 + name "run_exp" + linkNode [33 42 44] + scope INPUT_DATA + machine 1 + props { + array { + size "-1" + } + type { + method SF_INHERITED_TYPE + primitive SF_DOUBLE_TYPE + isSigned 1 + wordLength "16" + } + complexity SF_COMPLEX_INHERITED + frame SF_FRAME_INHERITED + } + dataType "Inherit: Same as Simulink" + } + data { + id 44 + ssIdNumber 4 + name "done" + linkNode [33 43 0] + scope OUTPUT_DATA + machine 1 + props { + array { + size "-1" + } + type { + method SF_INHERITED_TYPE + primitive SF_DOUBLE_TYPE + } + complexity SF_COMPLEX_INHERITED + frame SF_FRAME_NO + } + dataType "Inherit: Same as Simulink" + } + instance { + id 45 + name "multi-NOMAD/Autotuner2/relay_exp\n" + machine 1 + chart 33 + } + target { + id 46 + name "sfun" + description "Default Simulink S-Function Target." + machine 1 + linkNode [1 0 0] + } +} diff --git a/Autotuners/controlled_process_siso_2012a.mdl b/Autotuners/controlled_process_siso_2012a.mdl new file mode 100644 index 0000000000000000000000000000000000000000..68b938ebc068696f5edb7b09e96259dd944bf0bd --- /dev/null +++ b/Autotuners/controlled_process_siso_2012a.mdl @@ -0,0 +1,1084 @@ +Model { + Name "controlled_process_siso_2012a" + Version 7.9 + MdlSubVersion 0 + GraphicalInterface { + NumRootInports 0 + NumRootOutports 0 + ParameterArgumentNames "" + ComputedModelVersion "1.649" + NumModelReferences 0 + NumTestPointedSignals 0 + } + SavedCharacterEncoding "UTF-8" + SaveDefaultBlockParams on + ScopeRefreshTime 0.035000 + OverrideScopeRefreshTime off + DisableAllScopes off + DataTypeOverride "UseLocalSettings" + DataTypeOverrideAppliesTo "AllNumericTypes" + MinMaxOverflowLogging "UseLocalSettings" + MinMaxOverflowArchiveMode "Overwrite" + FPTRunName "Run 1" + MaxMDLFileLineLength 120 + Created "Sun Jun 12 02:17:00 2005" + Creator "josefinb" + UpdateHistory "UpdateHistoryNever" + ModifiedByFormat "%<Auto>" + LastModifiedBy "josefinb" + ModifiedDateFormat "%<Auto>" + LastModifiedDate "Fri Dec 08 12:47:22 2017" + RTWModifiedTimeStamp 434637984 + ModelVersionFormat "1.%<AutoIncrement:649>" + ConfigurationManager "none" + SampleTimeColors off + SampleTimeAnnotations off + LibraryLinkDisplay "none" + WideLines off + ShowLineDimensions on + ShowPortDataTypes off + ShowDesignRanges off + ShowLoopsOnError on + IgnoreBidirectionalLines off + ShowStorageClass off + ShowTestPointIcons on + ShowSignalResolutionIcons on + ShowViewerIcons on + SortedOrder off + ExecutionContextIcon on + ShowLinearizationAnnotations on + BlockNameDataTip off + BlockParametersDataTip on + BlockDescriptionStringDataTip off + ToolBar on + StatusBar on + BrowserShowLibraryLinks off + BrowserLookUnderMasks off + SimulationMode "normal" + LinearizationMsg "none" + Profile off + ParamWorkspaceSource "MATLABWorkspace" + AccelSystemTargetFile "accel.tlc" + AccelTemplateMakefile "accel_default_tmf" + AccelMakeCommand "make_rtw" + TryForcingSFcnDF off + RecordCoverage off + CovPath "/" + CovSaveName "covdata" + CovMetricSettings "dw" + CovNameIncrementing off + CovHtmlReporting on + CovForceBlockReductionOff on + covSaveCumulativeToWorkspaceVar on + CovSaveSingleToWorkspaceVar on + CovCumulativeVarName "covCumulativeData" + CovCumulativeReport off + CovReportOnPause on + CovModelRefEnable "Off" + CovExternalEMLEnable off + ExtModeBatchMode off + ExtModeEnableFloating on + ExtModeTrigType "manual" + ExtModeTrigMode "oneshot" + ExtModeTrigPort "1" + ExtModeTrigElement "any" + ExtModeTrigDuration 1000 + ExtModeTrigDurationFloating "auto" + ExtModeTrigHoldOff 0 + ExtModeTrigDelay 0 + ExtModeTrigDirection "rising" + ExtModeTrigLevel 0 + ExtModeArchiveMode "off" + ExtModeAutoIncOneShot off + ExtModeIncDirWhenArm off + ExtModeAddSuffixToVar off + ExtModeWriteAllDataToWs off + ExtModeArmWhenConnect off + ExtModeSkipDownloadWhenConnect off + ExtModeLogAll on + ExtModeAutoUpdateStatusClock on + BufferReuse on + ShowModelReferenceBlockVersion off + ShowModelReferenceBlockIO off + Array { + Type "Handle" + Dimension 1 + Simulink.ConfigSet { + $ObjectID 1 + Version "1.12.0" + Array { + Type "Handle" + Dimension 8 + Simulink.SolverCC { + $ObjectID 2 + Version "1.12.0" + StartTime "0.0" + StopTime "simopt.Tf" + AbsTol "auto" + FixedStep "simopt.h" + InitialStep "auto" + MaxNumMinSteps "-1" + MaxOrder 5 + ZcThreshold "auto" + ConsecutiveZCsStepRelTol "10*128*eps" + MaxConsecutiveZCs "1000" + ExtrapolationOrder 4 + NumberNewtonIterations 1 + MaxStep "auto" + MinStep "auto" + MaxConsecutiveMinStep "1" + RelTol "1e-3" + SolverMode "Auto" + EnableConcurrentExecution off + ConcurrentTasks off + Solver "ode3" + SolverName "ode3" + SolverJacobianMethodControl "auto" + ShapePreserveControl "DisableAll" + ZeroCrossControl "UseLocalSettings" + ZeroCrossAlgorithm "Nonadaptive" + AlgebraicLoopSolver "TrustRegion" + SolverResetMethod "Fast" + PositivePriorityOrder off + AutoInsertRateTranBlk off + SampleTimeConstraint "Unconstrained" + InsertRTBMode "Whenever possible" + } + Simulink.DataIOCC { + $ObjectID 3 + Version "1.12.0" + Decimation "1" + ExternalInput "[t, u]" + FinalStateName "xf" + InitialState "x0" + LimitDataPoints off + MaxDataPoints "1000" + LoadExternalInput off + LoadInitialState off + SaveFinalState off + SaveCompleteFinalSimState on + SaveFormat "Array" + SignalLoggingSaveFormat "ModelDataLogs" + SaveOutput on + SaveState off + SignalLogging on + DSMLogging on + InspectSignalLogs off + SaveTime on + ReturnWorkspaceOutputs off + StateSaveName "xout" + TimeSaveName "tout" + OutputSaveName "yout" + SignalLoggingName "logsout" + DSMLoggingName "dsmout" + OutputOption "RefineOutputTimes" + OutputTimes "[]" + ReturnWorkspaceOutputsName "out" + Refine "1" + } + Simulink.OptimizationCC { + $ObjectID 4 + Version "1.12.0" + BlockReduction off + BooleanDataType off + ConditionallyExecuteInputs on + InlineParams off + UseIntDivNetSlope off + UseFloatMulNetSlope off + UseSpecifiedMinMax off + InlineInvariantSignals off + OptimizeBlockIOStorage on + BufferReuse on + EnhancedBackFolding off + StrengthReduction off + ExpressionFolding on + BooleansAsBitfields off + BitfieldContainerType "uint_T" + EnableMemcpy on + MemcpyThreshold 64 + PassReuseOutputArgsAs "Structure reference" + ExpressionDepthLimit 2147483647 + FoldNonRolledExpr on + LocalBlockOutputs on + RollThreshold 5 + SystemCodeInlineAuto off + StateBitsets off + DataBitsets off + UseTempVars off + ZeroExternalMemoryAtStartup on + ZeroInternalMemoryAtStartup on + InitFltsAndDblsToZero on + NoFixptDivByZeroProtection off + EfficientFloat2IntCast off + EfficientMapNaN2IntZero on + OptimizeModelRefInitCode off + LifeSpan "inf" + MaxStackSize "Inherit from target" + BufferReusableBoundary on + SimCompilerOptimization "Off" + AccelVerboseBuild off + ParallelExecutionInRapidAccelerator on + } + Simulink.DebuggingCC { + $ObjectID 5 + Version "1.12.0" + RTPrefix "error" + ConsistencyChecking "none" + ArrayBoundsChecking "none" + SignalInfNanChecking "none" + SignalRangeChecking "none" + ReadBeforeWriteMsg "UseLocalSettings" + WriteAfterWriteMsg "UseLocalSettings" + WriteAfterReadMsg "UseLocalSettings" + AlgebraicLoopMsg "warning" + ArtificialAlgebraicLoopMsg "warning" + SaveWithDisabledLinksMsg "warning" + SaveWithParameterizedLinksMsg "none" + CheckSSInitialOutputMsg on + UnderspecifiedInitializationDetection "Classic" + MergeDetectMultiDrivingBlocksExec "none" + CheckExecutionContextPreStartOutputMsg off + CheckExecutionContextRuntimeOutputMsg off + SignalResolutionControl "TryResolveAllWithWarning" + BlockPriorityViolationMsg "warning" + MinStepSizeMsg "warning" + TimeAdjustmentMsg "none" + MaxConsecutiveZCsMsg "error" + MaskedZcDiagnostic "warning" + IgnoredZcDiagnostic "warning" + SolverPrmCheckMsg "none" + InheritedTsInSrcMsg "warning" + DiscreteInheritContinuousMsg "warning" + MultiTaskDSMMsg "warning" + MultiTaskCondExecSysMsg "none" + MultiTaskRateTransMsg "error" + SingleTaskRateTransMsg "none" + TasksWithSamePriorityMsg "warning" + SigSpecEnsureSampleTimeMsg "warning" + CheckMatrixSingularityMsg "none" + IntegerOverflowMsg "warning" + Int32ToFloatConvMsg "warning" + ParameterDowncastMsg "error" + ParameterOverflowMsg "error" + ParameterUnderflowMsg "none" + ParameterPrecisionLossMsg "warning" + ParameterTunabilityLossMsg "warning" + FixptConstUnderflowMsg "none" + FixptConstOverflowMsg "none" + FixptConstPrecisionLossMsg "none" + UnderSpecifiedDataTypeMsg "none" + UnnecessaryDatatypeConvMsg "none" + VectorMatrixConversionMsg "none" + InvalidFcnCallConnMsg "error" + FcnCallInpInsideContextMsg "Use local settings" + SignalLabelMismatchMsg "none" + UnconnectedInputMsg "warning" + UnconnectedOutputMsg "warning" + UnconnectedLineMsg "warning" + SFcnCompatibilityMsg "none" + FrameProcessingCompatibilityMsg "error" + UniqueDataStoreMsg "none" + BusObjectLabelMismatch "warning" + RootOutportRequireBusObject "warning" + AssertControl "UseLocalSettings" + EnableOverflowDetection off + ModelReferenceIOMsg "none" + ModelReferenceMultiInstanceNormalModeStructChecksumCheck "error" + ModelReferenceVersionMismatchMessage "none" + ModelReferenceIOMismatchMessage "none" + ModelReferenceCSMismatchMessage "none" + UnknownTsInhSupMsg "warning" + ModelReferenceDataLoggingMessage "warning" + ModelReferenceSymbolNameMessage "warning" + ModelReferenceExtraNoncontSigs "error" + StateNameClashWarn "warning" + SimStateInterfaceChecksumMismatchMsg "warning" + SimStateOlderReleaseMsg "error" + InitInArrayFormatMsg "warning" + StrictBusMsg "ErrorLevel1" + BusNameAdapt "WarnAndRepair" + NonBusSignalsTreatedAsBus "none" + LoggingUnavailableSignals "error" + BlockIODiagnostic "none" + SFUnusedDataAndEventsDiag "warning" + SFUnexpectedBacktrackingDiag "warning" + SFInvalidInputDataAccessInChartInitDiag "warning" + SFNoUnconditionalDefaultTransitionDiag "warning" + SFTransitionOutsideNaturalParentDiag "warning" + SFUnconditionalTransitionShadowingDiag "warning" + } + Simulink.HardwareCC { + $ObjectID 6 + Version "1.12.0" + ProdBitPerChar 8 + ProdBitPerShort 16 + ProdBitPerInt 32 + ProdBitPerLong 32 + ProdBitPerFloat 32 + ProdBitPerDouble 64 + ProdBitPerPointer 32 + ProdLargestAtomicInteger "Char" + ProdLargestAtomicFloat "None" + ProdIntDivRoundTo "Undefined" + ProdEndianess "Unspecified" + ProdWordSize 32 + ProdShiftRightIntArith on + ProdHWDeviceType "32-bit Generic" + TargetBitPerChar 8 + TargetBitPerShort 16 + TargetBitPerInt 32 + TargetBitPerLong 32 + TargetBitPerFloat 32 + TargetBitPerDouble 64 + TargetBitPerPointer 32 + TargetLargestAtomicInteger "Char" + TargetLargestAtomicFloat "None" + TargetShiftRightIntArith on + TargetIntDivRoundTo "Undefined" + TargetEndianess "Unspecified" + TargetWordSize 32 + TargetTypeEmulationWarnSuppressLevel 0 + TargetPreprocMaxBitsSint 32 + TargetPreprocMaxBitsUint 32 + TargetHWDeviceType "Specified" + TargetUnknown on + ProdEqTarget on + } + Simulink.ModelReferenceCC { + $ObjectID 7 + Version "1.12.0" + UpdateModelReferenceTargets "IfOutOfDateOrStructuralChange" + CheckModelReferenceTargetMessage "error" + EnableParallelModelReferenceBuilds off + ParallelModelReferenceErrorOnInvalidPool on + ParallelModelReferenceMATLABWorkerInit "None" + ModelReferenceNumInstancesAllowed "Multi" + PropagateVarSize "Infer from blocks in model" + ModelReferencePassRootInputsByReference on + ModelReferenceMinAlgLoopOccurrences off + PropagateSignalLabelsOutOfModel off + SupportModelReferenceSimTargetCustomCode off + } + Simulink.SFSimCC { + $ObjectID 8 + Version "1.12.0" + SFSimEnableDebug on + SFSimOverflowDetection on + SFSimEcho on + SimBlas on + SimCtrlC on + SimExtrinsic on + SimIntegrity on + SimUseLocalCustomCode off + SimParseCustomCode on + SimBuildMode "sf_incremental_build" + } + Simulink.RTWCC { + $BackupClass "Simulink.RTWCC" + $ObjectID 9 + Version "1.12.0" + SystemTargetFile "grt.tlc" + GenCodeOnly off + MakeCommand "make_rtw" + GenerateMakefile on + TemplateMakefile "grt_default_tmf" + GenerateReport off + SaveLog off + RTWVerbose on + RetainRTWFile off + ProfileTLC off + TLCDebug off + TLCCoverage off + TLCAssert off + ProcessScriptMode "Default" + ConfigurationMode "Optimized" + ConfigAtBuild off + RTWUseLocalCustomCode off + RTWUseSimCustomCode off + IncludeHyperlinkInReport off + LaunchReport off + TargetLang "C" + IncludeBusHierarchyInRTWFileBlockHierarchyMap off + IncludeERTFirstTime off + GenerateTraceInfo off + GenerateTraceReport off + GenerateTraceReportSl off + GenerateTraceReportSf off + GenerateTraceReportEml off + GenerateCodeInfo off + GenerateWebview off + GenerateCodeMetricsReport off + GenerateCodeReplacementReport off + RTWCompilerOptimization "Off" + CheckMdlBeforeBuild "Off" + CustomRebuildMode "OnUpdate" + Array { + Type "Handle" + Dimension 2 + Simulink.CodeAppCC { + $ObjectID 10 + Version "1.12.0" + ForceParamTrailComments off + GenerateComments on + IgnoreCustomStorageClasses on + IgnoreTestpoints off + IncHierarchyInIds off + MaxIdLength 31 + PreserveName off + PreserveNameWithParent off + ShowEliminatedStatement off + IncAutoGenComments off + SimulinkDataObjDesc off + SFDataObjDesc off + MATLABFcnDesc off + IncDataTypeInIds off + MangleLength 1 + CustomSymbolStrGlobalVar "$R$N$M" + CustomSymbolStrType "$N$R$M_T" + CustomSymbolStrField "$N$M" + CustomSymbolStrFcn "$R$N$M$F" + CustomSymbolStrFcnArg "rt$I$N$M" + CustomSymbolStrBlkIO "rtb_$N$M" + CustomSymbolStrTmpVar "$N$M" + CustomSymbolStrMacro "$R$N$M" + DefineNamingRule "None" + ParamNamingRule "None" + SignalNamingRule "None" + InsertBlockDesc off + InsertPolySpaceComments off + SimulinkBlockComments on + MATLABSourceComments off + EnableCustomComments off + InlinedPrmAccess "Literals" + ReqsInCode off + UseSimReservedNames off + } + Simulink.GRTTargetCC { + $BackupClass "Simulink.TargetCC" + $ObjectID 11 + Version "1.12.0" + Array { + Type "Cell" + Dimension 2 + Cell "MultiInstanceERTCode" + Cell "CombineOutputUpdateFcns" + PropName "DisabledProps" + } + TargetFcnLib "ansi_tfl_tmw.mat" + TargetLibSuffix "" + TargetPreCompLibLocation "" + CodeReplacementLibrary "C89/C90 (ANSI)" + UtilityFuncGeneration "Auto" + ERTMultiwordTypeDef "System defined" + CodeExecutionProfiling off + ERTMultiwordLength 256 + MultiwordLength 2048 + GenerateFullHeader on + GenerateSampleERTMain off + GenerateTestInterfaces off + IsPILTarget off + ModelReferenceCompliant off + ParMdlRefBuildCompliant on + CompOptLevelCompliant on + ConcurrentExecutionCompliant on + IncludeMdlTerminateFcn on + GeneratePreprocessorConditionals "Disable all" + CombineOutputUpdateFcns off + CombineSignalStateStructs off + SuppressErrorStatus off + ERTFirstTimeCompliant off + IncludeFileDelimiter "Auto" + ERTCustomFileBanners off + SupportAbsoluteTime on + LogVarNameModifier "rt_" + MatFileLogging off + MultiInstanceERTCode off + SupportNonFinite on + SupportComplex on + PurelyIntegerCode off + SupportContinuousTime on + SupportNonInlinedSFcns on + SupportVariableSizeSignals off + EnableShiftOperators on + ParenthesesLevel "Nominal" + PortableWordSizes off + ModelStepFunctionPrototypeControlCompliant off + CPPClassGenCompliant off + AutosarCompliant off + GRTInterface on + UseMalloc off + ExtMode off + ExtModeStaticAlloc off + ExtModeTesting off + ExtModeStaticAllocSize 1000000 + ExtModeTransport 0 + ExtModeMexFile "ext_comm" + ExtModeIntrfLevel "Level1" + RTWCAPISignals off + RTWCAPIParams off + RTWCAPIStates off + RTWCAPIRootIO off + GenerateASAP2 off + } + PropName "Components" + } + } + PropName "Components" + } + Name "Configuration" + CurrentDlgPage "Solver" + ConfigPrmDlgPosition [ 295, 27, 1148, 709 ] + } + PropName "ConfigurationSets" + } + Simulink.ConfigSet { + $PropName "ActiveConfigurationSet" + $ObjectID 1 + } + ExplicitPartitioning off + BlockDefaults { + ForegroundColor "black" + BackgroundColor "white" + DropShadow off + NamePlacement "normal" + FontName "Helvetica" + FontSize 10 + FontWeight "normal" + FontAngle "normal" + ShowName on + BlockRotation 0 + BlockMirror off + } + AnnotationDefaults { + HorizontalAlignment "center" + VerticalAlignment "middle" + ForegroundColor "black" + BackgroundColor "white" + DropShadow off + FontName "Helvetica" + FontSize 10 + FontWeight "normal" + FontAngle "normal" + UseDisplayTextAsClickCallback off + } + LineDefaults { + FontName "Helvetica" + FontSize 9 + FontWeight "normal" + FontAngle "normal" + } + BlockParameterDefaults { + Block { + BlockType Inport + Port "1" + OutputFunctionCall off + OutMin "[]" + OutMax "[]" + OutDataTypeStr "Inherit: auto" + LockScale off + BusOutputAsStruct off + PortDimensions "-1" + VarSizeSig "Inherit" + SampleTime "-1" + SignalType "auto" + SamplingMode "auto" + LatchByDelayingOutsideSignal off + LatchInputForFeedbackSignals off + Interpolate on + } + Block { + BlockType Mux + Inputs "4" + DisplayOption "none" + UseBusObject off + BusObject "BusObject" + NonVirtualBus off + } + Block { + BlockType Outport + Port "1" + OutMin "[]" + OutMax "[]" + OutDataTypeStr "Inherit: auto" + LockScale off + BusOutputAsStruct off + PortDimensions "-1" + VarSizeSig "Inherit" + SampleTime "-1" + SignalType "auto" + SamplingMode "auto" + SourceOfInitialOutputValue "Dialog" + OutputWhenDisabled "held" + InitialOutput "[]" + } + Block { + BlockType Scope + ModelBased off + TickLabels "OneTimeTick" + ZoomMode "on" + Grid "on" + TimeRange "auto" + YMin "-5" + YMax "5" + SaveToWorkspace off + SaveName "ScopeData" + DataFormat "Array" + LimitDataPoints on + MaxDataPoints "5000" + Decimation "1" + SampleInput off + SampleTime "-1" + } + Block { + BlockType Step + Time "1" + Before "0" + After "1" + SampleTime "-1" + VectorParams1D on + ZeroCross on + } + Block { + BlockType SubSystem + ShowPortLabels "FromPortIcon" + Permissions "ReadWrite" + PermitHierarchicalResolution "All" + TreatAsAtomicUnit off + CheckFcnCallInpInsideContextMsg off + SystemSampleTime "-1" + RTWFcnNameOpts "Auto" + RTWFileNameOpts "Auto" + RTWMemSecFuncInitTerm "Inherit from model" + RTWMemSecFuncExecute "Inherit from model" + RTWMemSecDataConstants "Inherit from model" + RTWMemSecDataInternal "Inherit from model" + RTWMemSecDataParameters "Inherit from model" + SimViewingDevice off + DataTypeOverride "UseLocalSettings" + DataTypeOverrideAppliesTo "AllNumericTypes" + MinMaxOverflowLogging "UseLocalSettings" + SFBlockType "NONE" + Variant off + GeneratePreprocessorConditionals off + } + Block { + BlockType Sum + IconShape "rectangular" + Inputs "++" + CollapseMode "All dimensions" + CollapseDim "1" + InputSameDT on + AccumDataTypeStr "Inherit: Inherit via internal rule" + OutMin "[]" + OutMax "[]" + OutDataTypeStr "Inherit: Same as first input" + LockScale off + RndMeth "Floor" + SaturateOnIntegerOverflow on + SampleTime "-1" + } + Block { + BlockType ToWorkspace + VariableName "simulink_output" + MaxDataPoints "1000" + Decimation "1" + SampleTime "0" + SaveFormat "Array" + FixptAsFi off + NumInputs "1" + } + Block { + BlockType TransferFcn + Numerator "[1]" + Denominator "[1 2 1]" + AbsoluteTolerance "auto" + ContinuousStateAttributes "''" + Realization "auto" + } + Block { + BlockType TransportDelay + DelayTime "1" + InitialOutput "0" + BufferSize "1024" + FixedBuffer off + TransDelayFeedthrough off + PadeOrder "0" + } + } + System { + Name "controlled_process_siso_2012a" + Location [116, 283, 1138, 718] + Open on + ModelBrowserVisibility off + ModelBrowserWidth 200 + ScreenColor "white" + PaperOrientation "landscape" + PaperPositionMode "auto" + PaperType "usletter" + PaperUnits "inches" + TiledPaperMargins [0.500000, 0.500000, 0.500000, 0.500000] + TiledPageScale 1 + ShowPageBoundaries off + ZoomFactor "100" + ReportName "simulink-default.rpt" + SIDHighWatermark "1095" + Block { + BlockType Scope + Name "Control" + SID "544" + Ports [1] + Position [725, 29, 755, 61] + ZOrder 147 + Floating off + Location [6, 494, 874, 894] + Open on + NumInputPorts "1" + List { + ListType AxesTitles + axes1 "%<SignalLabel>" + } + List { + ListType ScopeGraphics + FigureColor "[0.156862745098039 0.156862745098039 0.156862745098039]" + AxesColor "[0 0 0]" + AxesTickColor "[0.686274509803922 0.686274509803922 0.686274509803922]" + LineColors "[1 1 0;1 0 1;0 1 1;1 0 0;0 1 0;0 0 1]" + LineStyles "-|-|-|-|-|-" + LineWidths "[0.5 0.5 0.5 0.5 0.5 0.5]" + MarkerStyles "none|none|none|none|none|none" + } + ShowLegends off + YMin "0" + SaveName "ScopeData1" + DataFormat "StructureWithTime" + LimitDataPoints off + } + Block { + BlockType SubSystem + Name "Logger" + SID "76" + Ports [2] + Position [730, 90, 755, 210] + ZOrder 91 + MinAlgLoopOccurrences off + PropExecContextOutsideSubsystem off + RTWSystemCode "Auto" + FunctionWithSeparateData off + Opaque off + RequestExecContextInheritance off + MaskHideContents off + System { + Name "Logger" + Location [199, -27, 1241, 852] + Open off + ModelBrowserVisibility off + ModelBrowserWidth 200 + ScreenColor "white" + PaperOrientation "landscape" + PaperPositionMode "auto" + PaperType "usletter" + PaperUnits "inches" + TiledPaperMargins [0.500000, 0.500000, 0.500000, 0.500000] + TiledPageScale 1 + ShowPageBoundaries off + ZoomFactor "100" + Block { + BlockType Inport + Name "u1" + SID "77" + Position [20, 23, 50, 37] + ZOrder 88 + IconDisplay "Port number" + SampleTime "simopt.h" + } + Block { + BlockType Inport + Name "y1" + SID "79" + Position [20, 58, 50, 72] + ZOrder 90 + Port "2" + IconDisplay "Port number" + SampleTime "simopt.h" + } + Block { + BlockType ToWorkspace + Name "Logger" + SID "69" + Ports [1] + Position [140, 75, 200, 105] + ZOrder 87 + VariableName "simout" + MaxDataPoints "inf" + SampleTime "simopt.h" + SaveFormat "Structure With Time" + } + Block { + BlockType Mux + Name "Mux" + SID "68" + Ports [2, 1] + Position [75, 12, 80, 168] + ZOrder 86 + ShowName off + Inputs "2" + DisplayOption "bar" + } + Line { + SrcBlock "Mux" + SrcPort 1 + DstBlock "Logger" + DstPort 1 + } + Line { + SrcBlock "u1" + SrcPort 1 + Points [5, 0] + DstBlock "Mux" + DstPort 1 + } + Line { + SrcBlock "y1" + SrcPort 1 + Points [3, 0; 0, 65] + DstBlock "Mux" + DstPort 2 + } + } + } + Block { + BlockType Scope + Name "Output" + SID "1033" + Ports [1] + Position [725, 244, 755, 276] + ZOrder 148 + Floating off + Location [1, 93, 868, 483] + Open on + NumInputPorts "1" + List { + ListType AxesTitles + axes1 "%<SignalLabel>" + } + List { + ListType ScopeGraphics + FigureColor "[0.156862745098039 0.156862745098039 0.156862745098039]" + AxesColor "[0 0 0]" + AxesTickColor "[0.686274509803922 0.686274509803922 0.686274509803922]" + LineColors "[1 1 0;1 0 1;0 1 1;1 0 0;0 1 0;0 0 1]" + LineStyles "-|-|-|-|-|-" + LineWidths "[0.5 0.5 0.5 0.5 0.5 0.5]" + MarkerStyles "none|none|none|none|none|none" + } + ShowLegends off + YMin "0" + YMax "10" + SaveName "ScopeData3" + DataFormat "StructureWithTime" + LimitDataPoints off + } + Block { + BlockType Reference + Name "PID Controller\nwith filter" + SID "1084" + Ports [1, 1] + Position [130, 127, 225, 163] + ZOrder -1 + LibraryVersion "1.108" + SourceBlock "cstblocks/LTI System" + SourceType "LTI Block" + sys "FC" + IC "[]" + } + Block { + BlockType SubSystem + Name "SOTD_example" + SID "1091" + Ports [1, 1] + Position [350, 116, 430, 194] + ZOrder 141 + BackgroundColor "gray" + MinAlgLoopOccurrences off + PropExecContextOutsideSubsystem off + RTWSystemCode "Auto" + FunctionWithSeparateData off + Opaque off + RequestExecContextInheritance off + MaskHideContents off + System { + Name "SOTD_example" + Location [702, 184, 1771, 1063] + Open off + ModelBrowserVisibility off + ModelBrowserWidth 200 + ScreenColor "white" + PaperOrientation "landscape" + PaperPositionMode "auto" + PaperType "A4" + PaperUnits "centimeters" + TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] + TiledPageScale 1 + ShowPageBoundaries off + ZoomFactor "125" + Block { + BlockType Inport + Name "u" + SID "1092" + Position [20, 73, 50, 87] + ZOrder 106 + IconDisplay "Port number" + SampleTime "simopt.h" + } + Block { + BlockType TransferFcn + Name "Transfer Fcn" + SID "1093" + Position [175, 62, 235, 98] + ZOrder 110 + Denominator "[1 4 6 4 1]" + } + Block { + BlockType Outport + Name "y" + SID "1094" + Position [310, 73, 340, 87] + ZOrder 105 + IconDisplay "Port number" + SampleTime "simopt.h" + } + Line { + SrcBlock "u" + SrcPort 1 + DstBlock "Transfer Fcn" + DstPort 1 + } + Line { + SrcBlock "Transfer Fcn" + SrcPort 1 + DstBlock "y" + DstPort 1 + } + } + } + Block { + BlockType Step + Name "Step" + SID "4" + Position [15, 130, 45, 160] + ZOrder -4 + Time "100" + Before "2" + After "4" + SampleTime "simopt.h" + } + Block { + BlockType Sum + Name "Sum" + SID "5" + Ports [2, 1] + Position [80, 130, 110, 160] + ZOrder -5 + ShowName off + IconShape "round" + Inputs "|+-" + } + Block { + BlockType TransportDelay + Name "Transport\nDelay" + SID "1085" + Ports [1, 1] + Position [285, 140, 315, 170] + ZOrder -10 + DelayTime "0" + } + Line { + SrcBlock "Step" + SrcPort 1 + DstBlock "Sum" + DstPort 1 + } + Line { + SrcBlock "PID Controller\nwith filter" + SrcPort 1 + Points [20, 0] + Branch { + Points [-2, -35; 2, 0] + Branch { + Points [0, -65] + DstBlock "Control" + DstPort 1 + } + Branch { + Points [465, 0] + DstBlock "Logger" + DstPort 1 + } + } + Branch { + Points [0, 10] + DstBlock "Transport\nDelay" + DstPort 1 + } + } + Line { + SrcBlock "Sum" + SrcPort 1 + DstBlock "PID Controller\nwith filter" + DstPort 1 + } + Line { + SrcBlock "SOTD_example" + SrcPort 1 + Points [50, 0; 0, 20; 95, 0] + Branch { + Points [115, 0] + Branch { + Points [20, 0] + DstBlock "Logger" + DstPort 2 + } + Branch { + Points [0, 85] + DstBlock "Output" + DstPort 1 + } + } + Branch { + Points [0, 55; -485, 0] + DstBlock "Sum" + DstPort 2 + } + } + Line { + SrcBlock "Transport\nDelay" + SrcPort 1 + DstBlock "SOTD_example" + DstPort 1 + } + } +} +# Finite State Machines +# +# Stateflow Version 7.6 (R2011b) dated Jan 25 2012, 13:50:40 +# +# + + +Stateflow { + machine { + id 1 + name "controlled_process_siso_2012a" + created "01-Jul-2013 12:16:13" + isLibrary 0 + firstTarget 2 + sfVersion 76014001.00040001 + } + target { + id 2 + name "sfun" + description "Default Simulink S-Function Target." + machine 1 + linkNode [1 0 0] + } +} diff --git a/Autotuners/tmpdata/controllers.mat b/Autotuners/tmpdata/controllers.mat new file mode 100644 index 0000000000000000000000000000000000000000..f40fe5981ba9e7db97805c03ce5594e9949dd0e1 Binary files /dev/null and b/Autotuners/tmpdata/controllers.mat differ diff --git a/Autotuners/tmpdata/id_models.mat b/Autotuners/tmpdata/id_models.mat new file mode 100644 index 0000000000000000000000000000000000000000..bd8f3986d14928760bd8ced8d5e3ce77e0f8188f Binary files /dev/null and b/Autotuners/tmpdata/id_models.mat differ diff --git a/Autotuners/tmpdata/params.mat b/Autotuners/tmpdata/params.mat new file mode 100644 index 0000000000000000000000000000000000000000..9e718ea7e6f51bd0687dcd7598f4708c8b71e883 Binary files /dev/null and b/Autotuners/tmpdata/params.mat differ diff --git a/Autotuners/tmpdata/sim_data.mat b/Autotuners/tmpdata/sim_data.mat new file mode 100644 index 0000000000000000000000000000000000000000..b2e96c50ff2c5372e5f4ebb77a6b660c99670abc Binary files /dev/null and b/Autotuners/tmpdata/sim_data.mat differ diff --git a/README.md b/README.md new file mode 100644 index 0000000000000000000000000000000000000000..6255b6cb1dd7c99c705268a9259289f5b03dcd15 --- /dev/null +++ b/README.md @@ -0,0 +1,12 @@ + +Matlab code and Simulink blocks for the Tau-tuner, NOMAD and Multi-NOMAD autotuner described further in the PhD Thesis "Automatic Controller Tuning using Relay-based Model Identification" by Josefin Berner 2017. + +All the used simulink blocks are in the AT-library folder. Apart from the three Autotuner versions the library also contains simulink blocks for a simple second order simulation example as well as a block for the two-input two-output model Wood-Berry distillation column. + +To run the experiments open the setup_script.m and choose the version you want to run. Remember to put in the wanted autotuner block and process model in the simulink file autotuner_siso_2012a.mdl if you are running a SISO experiment. + +If the NOMAD or multi-NOMAD is used it will be using cvx, so make sure it is setup in your matlab session by writing > setup_cvx followed by > cvx_setup before starting your experiment. + +All the needed parameters are set in the script setParams.m. Look it through to see if the values on times, nominal control signals etc. are appropriate for your experiments. + +The files are compatible with Matlab2012a. If you want to use another matlab version they may need to be converted somehow. diff --git a/Scripts/SISO/Joe.m b/Scripts/SISO/Joe.m new file mode 100644 index 0000000000000000000000000000000000000000..8c838e53529abbb82a460d591b0f96b59957221d --- /dev/null +++ b/Scripts/SISO/Joe.m @@ -0,0 +1,71 @@ +function [J,J1,J2,ym,ym_p]=Joe(p,n,h,u,y) +% Evaluates output error cost (J), its sensitivity Jacobian (Jp) and +% (approximate) Hessian (Jpp) based on the model structure (m<=n): +% +% b1*s^(m-1) + b2*s^(m-2) + ... + bm +% ---------------------------------- * e^(-L*s). +% s^n + a1*s^(n-1) + ... + an +% +% p - parameter row vector [b a L v x0] +% n - system order +% h - sampling period +% u - process input (contribution from relay) +% y - plant output (measurement sequence) + +% handle arguments +m=numel(p)-2*n-2; +a=p(m+1:m+n); +b=[zeros(1,n-m) p(1:m)]; +L=p(m+n+1); +v=p(m+n+2); +%v = 0*v; % if not active +x0=p(m+n+3:end).'; +%x0=0*x0; % if not active + +% augmented system for y and sensitivities wrt b a L +A=[-a;eye(n-1,n)]; +A=blkdiag(A,A); +A(n+1,1:n)=b; +B=[1;zeros(2*n-1,1)]; +C=[b;zeros(m,n-m) eye(m)]; +C=blkdiag(C,-eye(n)); +[q,r]=deconv(-[b 0],[1 a]); +C=[C; r(2:end) zeros(1,n)]; +D=[zeros(m+n+1,1);q]; +H=c2d(ss(A,B,C,D),h,'zoh'); + +% sampled model matrices +E=H.a(1:n,1:n); +F=H.b(1:n); + +% % add disturbance and delay to input +%u=u+v; +k=round(L/h); +u=[zeros(k,1);u(1:end-k)]; +u = u+v; %Hmm v ska väl inte vara delayed? så u = u+v borde ligga här efter nollorna? + +% ym and sensitivites wrt b a L +yH=lsim(H,u,[],[x0;zeros(n,1)]); +ym=yH(:,1); +ym=ym-b*x0; % borde inte även b*simopt.xv tas bort här om det ska vara identiskt med simuleringen? +ym_b=yH(:,2:2+m-1); +ym_b=ym_b-repmat(x0(end-m+1:end).',numel(ym),1); % Okej är för att grad b ju även har x0-termer +ym_aL=yH(:,2+m:end); + +% % sensitivity wrt v +G=ss(E,F,b,0,h); +ym_v=lsim(G,0*u+1,[],x0*0); +ym_v = 0*ym_v; % if not active + +% sensitivity wrt x0 +G0=ss(E.',F*0,eye(n),-b.',h); +ym_x0=lsim(G0,0*u+1,[],b.'); +%ym_x0 = 0*ym_x0; % If not active + +% compute Jacobian and Hessian +ym_p=[ym_b ym_aL ym_v ym_x0]; +%ym_p=[ym_b ym_aL ym_x0]; +e=ym-y; +J=h/2*e'*e; +J1=h*(e'*ym_p).'; +J2=h*ym_p'*ym_p; diff --git a/Scripts/SISO/circplot.m b/Scripts/SISO/circplot.m new file mode 100644 index 0000000000000000000000000000000000000000..e0a42cc12d87f4fab1ae715b4e54573a3dc154c0 --- /dev/null +++ b/Scripts/SISO/circplot.m @@ -0,0 +1,4 @@ +function circplot(c, r, color) +% Plots circles with centres in c = [x, y] and radii r +w = linspace(0,2*pi,100); +plot(c(1) +r*cos(w), c(2) + r*sin(w),color) \ No newline at end of file diff --git a/Scripts/SISO/cvxpid.m b/Scripts/SISO/cvxpid.m new file mode 100644 index 0000000000000000000000000000000000000000..547bb2556620f765c8cb0aab09ebb047cb10ecc4 --- /dev/null +++ b/Scripts/SISO/cvxpid.m @@ -0,0 +1,73 @@ +function p=cvxpid(P0,r,w,Ms,Mt,p) +% [kp,ki,kd]=cvxpid(P0,r,w,Ms,Mt,F) +% minimizes load step IE <=> maximizes ki for +% +% C(s)=kp+ki/s+kd +% +% p - parameter vector p=[kp ki kd] +% w - frequency grid +% P0 - frequency response of nominal plant over w +% r - uncertainty radii over w +% Ms - upper bound of sensitivity. Scalar or frequency-wise over w +% Mt - upper bound of complementary sensitivity. Defined as Ms +% +% All vectors are columns, unless otherwise stated. + +% setup +cvx_clear; +verbose=true; + +% constraint represented as circles with centra and radii: +cs=-1; % Ms center +rs=1./Ms; % Ms radius +ct=-Mt.^2./(Mt.^2-1); % Mt center +rt=Mt./(Mt.^2-1); % Mt radius + +% frequency responses and removal of unwanted control law terms +C1=[1+0*w 1./(1i*w) 1i*w]; +C=C1*p; + +% print on screen +if verbose + formatSpec=... + '|%2u| %2.2f | %1.1f | %1.4f | %2.0f |\n'; + fprintf('\n|it| Ms | kp | ki | kd |\n') + fprintf('|--|----------|---------|--------|-------|\n') +end + +% optimization +prev_obj=-inf; +for n=1:10 + L_=P0.*C; + cvx_begin quiet + variable p(3) + maximize (p(2)) % maximize ki + subject to + C=C1*p; + L=P0.*C; + + if Ms<inf + real(conj((L_-cs)./abs(L_-cs)).*(L-cs))>=rs+r.*abs(C); % Ms + end + if Mt<inf + real(conj((L_-ct)./abs(L_-ct)).*(L-ct))>=rt+r.*abs(C); % Mt + end + cvx_end + + if ~strcmp(cvx_status,'Solved') + error(['PID design failed. Cvx returned status: ' cvx_status]) + end + + % print iteration result + if verbose + Msn=max(abs(1./((1+L)-r.*abs(C)))); + fprintf(formatSpec,n,Msn,p(1),p(2),p(3)) + end + + % Stopping criterion + if abs(p(2)-prev_obj)<1e-3*prev_obj + break; + end + prev_obj=p(2); +end +p=p(:); \ No newline at end of file diff --git a/Scripts/SISO/getPhat.m b/Scripts/SISO/getPhat.m new file mode 100644 index 0000000000000000000000000000000000000000..891b6e33e51e5067a8dda24722a744caffc23b89 --- /dev/null +++ b/Scripts/SISO/getPhat.m @@ -0,0 +1,192 @@ +% Yields models from asymmetric relay experiment. +% All signals a sampled at a period h, passed as argument. +function [models,idTime,simdata]=getPhat(params, simopt, simdata, result) +%load('params.mat','params') +h = params.h; + +%% experiment + +% main experiment +% [u,y,t]=runSim(simopt,params); +% % filtered input + +% simdata.u = u; +% simdata.y = y; +% simdata.t = t; +first_index = find(simdata.t > params.expStartTime, 1); +u = simdata.u(first_index:end)-result(2); +t = simdata.t(first_index:end); +y = simdata.y(first_index:end)-result(1); +uf=lsim(simopt.F,u,t); +%% identification +tic + +% find switch instances +sw_ind = find(diff(u)); +st=t(sw_ind); % switch times +dt=diff(st(end-2:end)); % switch durations +gamma = params.asym; +rho_est=max(0,min(gamma,max(dt)/min(dt))); % to ensure the equation's working +tau_est = (gamma-rho_est)/((gamma-1)*(0.35*rho_est+0.65)); +kp_est = sum(y(sw_ind(end-2):end))/sum(u(sw_ind(end-2):end)); +Lmax=min(dt); + + +% FOTD: b/(s+a)*exp(-s*L) +rpts = 40; % Number of random points for initialization used 30 +L0 = Lmax*rand(rpts,1); +amean=tau_est./(L0*(1-tau_est)); +a0 = amean+0.1*amean.*randn(rpts,1); +%bmean= kp_est*amean; %since kp seems a bit unreliable atm +%b0=kp_est*a0; +b0 = amean+0.1.*amean.*randn(rpts,1); +starts = [b0';a0';L0']; + +FOTD=getModel(0,0,0,0,0); + +J = FOTD.J; +for idx = 1:rpts + m = getModel(b0(idx),a0(idx),L0(idx),0,0); + if m.J < FOTD.J + idx + starts(:,idx) + FOTD = m; + end +end + +% SOTD: b1/(s^2+a1*s+a2)*exp(-s*L) +Tar = 1/FOTD.a+FOTD.L; +tau = FOTD.L/Tar; + +a=(exp(1)-1)/(1-tau)/Tar; +L=max(Tar-2/a,0); +L=min(L,Lmax); +if FOTD.a>0 + b=FOTD.b*a^2/FOTD.a; + x1=[0 FOTD.b/b*FOTD.x0]; % FIXME: initialize based on FOTD.x0? + x2 = [0 0]; +else + b=0; + x1 = [0 FOTD.x0]; + x2 = [0 0]; +end +a=[2*a a^2]; +v=FOTD.v; +%sotdstart = [b a L] + +try + SOTD1=getModel(b,a,L,v,x1); + SOTD2=getModel(b,a,L,v,x2); + % added as a test + SOTD3=getModel(0,[0,0],0,v,x2); + % end of test + if SOTD1.J < SOTD2.J + SOTD = SOTD1; + else + SOTD = SOTD2; + end +% Testing! + if SOTD3.J < SOTD.J + zero_best = 1 + SOTD = SOTD3; + end +% End testing +catch + SOTD.J=inf; + warning('no SOTD') + FOTD.a + FOTD.b + FOTD.P + pause +end + +idTime=toc; + +% find best model (Akaike: log(cost)+ 2*p/N) or (BIC: log(cost)+log(N)*p/N) +N = length(u); +[~,type]=min([log(FOTD.J)+2*3/N log(SOTD.J)+2*4/N]); %Akaike +%[~,type]=min([log(FOTD.J)+log(N)*3/N log(SOTD.J)+log(N)*4/N]); %BIC +models.type=type(1); +switch models.type + case 1 + best=FOTD; + case 2 + best=SOTD; +end +% organize output +models.FOTD=FOTD; +models.SOTD=SOTD; +models.best=best; + +% plot +draw=true; +if draw + % time plot + figure(1) + stairs(t,uf,'color',.6*[1 1 1],'linewidth',2) + hold on + stairs(t,y,'color',[.6 1 .6],'linewidth',2) + stairs(t,best.ym,'b','linewidth',2) + stairs(t,FOTD.ym,'r','linewidth',1) + ylims=1.2*[min(uf) max(uf)]; + xlim([0 t(end)]) + ylim(ylims) + leg=legend('$u$: relay output','$y$: measurement',... + '$y_m$: best model output', '$y_m$: fotd output'); + set(leg,'Location','northoutside','Interpreter','latex','FontSize',12) + hold off + drawnow +end + +% nested function calling the optimization routine(s) + function model=getModel(b0,a0,L0,v0,x0) + n=numel(a0); + m=numel(b0); + p0=[b0 a0 L0 v0 x0]; % initial parameter row vector + lb=[-inf(1,m) zeros(1,n) 0 -inf(1,n+1)]; % lower bound on p + ub=[inf(1,n+m) Lmax inf(1,n+1)]; % upper bound on p + % First run, trust-region algorithm + opts=optimset('Algorithm','trust-region-reflective',... + 'GradObj','on','Hessian','user-supplied','Display','off'); + [p,J,~,~,~,Jp,Jpp]=fmincon(@(p)Joe(p,n,h,uf,y),p0,[],[],[],[],... + lb,ub,[],opts); + % model output + [~,~,~,ym]=Joe(p,n,h,uf,y); + model.ym=ym; + % Second run, sqp algorithm + opts=optimset('Algorithm','sqp',... + 'GradObj','on','Display','off'); + [p2,J2,~,~,~,Jp,Jpp]=fmincon(@(p)Joe(p,n,h,uf,y),p0,[],[],[],[],... + lb,ub,[],opts); + if J2 < J + % model output + p = p2; + [~,~,~,ym]=Joe(p,n,h,uf,y); + model.ym=ym; + end + % identified parameters + model.b=p(1:m); + model.a=p(m+1:m+n); + model.L=p(m+n+1); + model.v=p(m+n+2); + model.x0=p(m+n+3:end); + + % construct model corresponding to x0 + A=[-model.a;eye(n-1,n)]; + B=[1;zeros(n-1,1)]; + C=[zeros(1,n-m) model.b]; + D=0; + model.P0=ss(A,B,C,D); + + % transfer function model + model.P=tf(model.P0); + model.P.inputdelay=model.L; + + % optimization related + model.J=J; + model.Jp=Jp; + model.Jp; + model.Jpp=Jpp; + model.samples=numel(u); % Covariance matrix: 2*J/numel(u)*inv(Jpp) + end +end \ No newline at end of file diff --git a/Scripts/TITO/Joe2_etfa.m b/Scripts/TITO/Joe2_etfa.m new file mode 100644 index 0000000000000000000000000000000000000000..a99cbe075270870582154938f853e169d043760b --- /dev/null +++ b/Scripts/TITO/Joe2_etfa.m @@ -0,0 +1,40 @@ +function [J,J1,J2,ym,ym1,ym2,ym_p]=Joe2_etfa(p,n1,n2,h,u1,u2,y,Lfix) +% Evaluates output error cost (J), its sensitivity Jacobian (Jp) and +% (approximate) Hessian (Jpp) based on the model structure (m<=n): +% +% b11*s^(m-1) + b12*s^(m-2) + ... + b1m +% ---------------------------------- * e^(-L1*s) +% s^n + a11*s^(n-1) + ... + a1n +% +% + +% +% b21*s^(m-1) + b22*s^(m-2) + ... + b2m +% ---------------------------------- * e^(-L2*s) +% s^n + a21*s^(n-1) + ... + a2n +% +% p - parameter row vector [p1 p2] = [b1 a1 L1 x0_1 b2 a2 L2 x0_2] +% n - system order +% h - sampling period +% u1 - input to process parametrized by p1 +% u2 - input to process parametrized by p2 + +% parameter vectors of individual processes +if 2*n1+2*n2+4 == numel(p) +else + warning('Wrong dimensions in p-vector') +end +p1 = p(1:2*n1+2); +p2 = p(2*n1+3:end); +% p1=p(1:numel(p)/2); +% p2=p(numel(p)/2+1:end); + +% compute ym and ym_p +[~,~,~,ym1,ym1_p]=Joe_etfa(p1,n1,h,u1,0,Lfix); % Behöver inte y +[~,~,~,ym2,ym2_p]=Joe_etfa(p2,n2,h,u2,0,Lfix); +ym=ym1+ym2; + +ym_p=[ym1_p ym2_p]; +e=ym-y; +J=h/2*e'*e; +J1=h*(e'*ym_p).'; +J2=h*ym_p'*ym_p; \ No newline at end of file diff --git a/Scripts/TITO/Joe_etfa.m b/Scripts/TITO/Joe_etfa.m new file mode 100644 index 0000000000000000000000000000000000000000..3af7ec8015563a752aa8d0390eb3c69b25619e17 --- /dev/null +++ b/Scripts/TITO/Joe_etfa.m @@ -0,0 +1,89 @@ +function [J,J1,J2,ym,ym_p]=Joe_etfa(p,n,h,u,y,Lfix) +% Evaluates output error cost (J), its sensitivity Jacobian (Jp) and +% (approximate) Hessian (Jpp) based on the model structure (m<=n): +% +% b1*s^(m-1) + b2*s^(m-2) + ... + bm +% ---------------------------------- * e^(-L*s). +% s^n + a1*s^(n-1) + ... + an +% +% p - parameter row vector [b a L x0] +% n - system order +% h - sampling period +% u - process input (contribution from relay) +% y - plant output (measurement sequence) + +% handle arguments +m=numel(p)-2*n-1; +a=p(m+1:m+n); +b=[zeros(1,n-m) p(1:m)]; +L=p(m+n+1); +v=0; % Don't use it anymore! +x0=p(m+n+2:end).'; +%x0=0*x0; % if not active + +% augmented system for y and sensitivities wrt b a L +A=[-a;eye(n-1,n)]; +A=blkdiag(A,A); +A(n+1,1:n)=b; +B=[1;zeros(2*n-1,1)]; +C=[b;zeros(m,n-m) eye(m)]; +C=blkdiag(C,-eye(n)); +[q,r]=deconv(-[b 0],[1 a]); +C=[C; r(2:end) zeros(1,n)]; +D=[zeros(m+n+1,1);q]; +H=c2d(ss(A,B,C,D),h,'zoh'); + +% sampled model matrices +E=H.a(1:n,1:n); +F=H.b(1:n); + +% % add disturbance and delay to input +%u=u+v; +k=round(L/h); +if k > length(u) + k + length(u) + warning('something fishy') +end +try + u=[zeros(k,1);u(1:end-k)]; +catch + k + size(u) + %u +end +%u = u+v; %Hmm v ska väl inte vara delayed? så u = u+v borde ligga här efter nollorna? + +% ym and sensitivites wrt b a L +yH=lsim(H,u,[],[x0;zeros(n,1)]); +ym=yH(:,1); +ym=ym-b*x0; % borde inte även b*simopt.xv tas bort här om det ska vara identiskt med simuleringen? +ym_b=yH(:,2:2+m-1); +ym_b=ym_b-repmat(x0(end-m+1:end).',numel(ym),1); % Okej är för att grad b ju även har x0-termer +%ym_aL=yH(:,2+m:end); +if Lfix == 1 + ym_aL=[yH(:,2+m:end-1),zeros(size(ym))]; +else + ym_aL=yH(:,2+m:end); +end + + +% % sensitivity wrt v +G=ss(E,F,b,0,h); +ym_v=lsim(G,0*u+1,[],x0*0); +ym_v = 0*ym_v; % if not active + +% sensitivity wrt x0 +G0=ss(E.',F*0,eye(n),-b.',h); +ym_x0=lsim(G0,0*u+1,[],b.'); +%ym_x0 = 0*ym_x0; % If not active + +% compute Jacobian and Hessian +ym_p=[ym_b ym_aL ym_x0]; + + + +e=ym-y; +J=h/2*e'*e; +J1=h*(e'*ym_p).'; +J2=h*ym_p'*ym_p; diff --git a/Scripts/TITO/PIDdesign.m b/Scripts/TITO/PIDdesign.m new file mode 100644 index 0000000000000000000000000000000000000000..e62710601c786c0e15b894b99b485b8520dbd1e3 --- /dev/null +++ b/Scripts/TITO/PIDdesign.m @@ -0,0 +1,59 @@ +function [Kp, Ki, Kd, tau] = PIDdesign(P) + +%% Controller Design + +% Design of MIMO-PID controller for the minimum-phase quadtank. + +% Check if CVX is installed +if ~exist('cvx_version') + error('Error: CVX is not installed.') +end + +% Check if Control System toolbox is installed. +if ~license('test','control_toolbox') + warning('Warning: Control System Toolbox is not installed.') +end + +N = 300; % Nbr of frequency points +omega = logspace(-3,3,N); % Frequency sampling points + +% tau = 0.1; %0.3 % Derivative filter time-constant +kk = 5; % Factor times bandwidth for filter time constant breakpoint + +for ii = 1:2 + for jj = 1:2 + [~,~,~,Wpm(ii,jj)] = margin(P(ii,jj)); % Finding cross-over freqs + end +end +tau = 1/(kk*max(max(Wpm))); % Filter time constant +epsilon = 1e-2; % Initial controller parameter + +s = tf('s'); +F = 1/(1+s*tau+(s*tau)^2/2); + +%%%%%%%%%%%%%%% Temporary plot %%%%%%%%%%%%%%%% +%figure(15);set(gcf,'position',[1250 650 550 440]) +%opts = bodeoptions('cstprefs'); +%opts.YLim = {[0.01,10];[-360,15];[0.01,10];[-360,15]}; +%bodeplot(P,'k',F,'r',opts);hold on +P = P*F; % Filtered version of the plant +%bodeplot(P,'b-.',opts); hold off +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Process definition: +[Pfreq,~] = freqresp(P,omega); % Restructure to cell format +for ind = 1:length(omega) + P_cell{ind}=(Pfreq(:,:,ind)); +end +P0 = dcgain(P) + +% Robustness constraints +Smax = 1.4; +Tmax = 1.4; +Qmax = 30; % Not used anymore + + +% Run optimization +max_iter = 25; + +[Kp, Ki, Kd] = mimopiddesign(P_cell, P0, omega, Smax, Tmax, Qmax, epsilon, tau, max_iter); +end \ No newline at end of file diff --git a/Scripts/TITO/WoodBerry.mat b/Scripts/TITO/WoodBerry.mat new file mode 100644 index 0000000000000000000000000000000000000000..415ad6f560074c0924a7414baecdad7cd1165530 Binary files /dev/null and b/Scripts/TITO/WoodBerry.mat differ diff --git a/Scripts/TITO/design_controllers.m b/Scripts/TITO/design_controllers.m new file mode 100644 index 0000000000000000000000000000000000000000..6e3ab2453569ed67f69a71cb1885ecba320c5bb5 --- /dev/null +++ b/Scripts/TITO/design_controllers.m @@ -0,0 +1,15 @@ +clear all; +load tmpdata/id_models.mat +%load Gtrue.mat + +s = tf('s'); +% % [C.Kp, C.Ki, C.Kd, C.tau] = PIDdesign(Gtrue); +%F = 1/(1+s*C.tau+(s*C.tau)^2/2); +%C.tf =F*(C.Kp + 1/s*C.Ki+ s*C.Kd); + +[C_hat.Kp, C_hat.Ki, C_hat.Kd, C_hat.tau] = PIDdesign(Ghat); +F_hat = 1/(1+s*C_hat.tau+(s*C_hat.tau)^2/2); +C_hat.tf = F_hat*(C_hat.Kp + 1/s*C_hat.Ki+ s*C_hat.Kd); + +%save('tmpdata/controllers.mat','C','C_hat') +save('tmpdata/controllers.mat','C_hat') \ No newline at end of file diff --git a/Scripts/TITO/getModels.m b/Scripts/TITO/getModels.m new file mode 100644 index 0000000000000000000000000000000000000000..9e1e726ecd3eb2e11f96da0a98dd7e39cb8a2f22 --- /dev/null +++ b/Scripts/TITO/getModels.m @@ -0,0 +1,10 @@ +clear all +close all +clc +addpath ../identification +addpath ../experiment + +%% experiment and identification +%models = getPhat('tune_model.mdl'); +%models = getPhat('tune_quadtank.mdl'); +models = getPhat('tune_ystep.mdl'); \ No newline at end of file diff --git a/Scripts/TITO/identify_etfa.m b/Scripts/TITO/identify_etfa.m new file mode 100644 index 0000000000000000000000000000000000000000..fba95342cd06c1b1dff49487052b620ae29b53b9 --- /dev/null +++ b/Scripts/TITO/identify_etfa.m @@ -0,0 +1,183 @@ +%% identification + + function finalModel = identify_etfa (t,u1,u2,y,Lmax) +tic + % FOTD: b/(s+a)*exp(-s*L) + gpoints = 5; % Had 50 + t_sample=t(end)-t(end-1); + Lvec = rand(2,gpoints)*Lmax; + Lfix = 0; % Brukade vara 1 men tror inte jag vill ha dem fixa längre? + + %%%%%% Finding decent FOTD models from random points %%%%%%% + best1 = getModel(0,0,0,u1,y,Lfix); + best2 = getModel(0,0,0,u2,y,Lfix); + for idx = 1:gpoints + FOTD1 = getModel(0,0,Lvec(1,idx),u1,y, 1); % trying Lfix on these + FOTD2 = getModel(0,0,Lvec(2,idx),u2,y, 1); + if FOTD1.J < best1.J + best1 = FOTD1; + end + if FOTD2.J < best2.J + best2 = FOTD2; + end + end + FOTD.best1 = best1; + FOTD.best2 = best2; + + % Looking to see if SOTD models are better + [b1,a1,L1,x01] = SOTD_start(best1.p(1),best1.p(2),best1.p(3),best1.p(4),Lmax); + SOTD1 = getModel(b1,a1,L1,u1,y,Lfix); + if log(SOTD1.J) + 2*4/length(u1) < log(best1.J)+2*3/length(u1) % Akaike IC + best1 = SOTD1 + end + [b1,a1,L1,x01] = SOTD_start(best2.p(1),best2.p(2),best2.p(3),best2.p(4),Lmax); + SOTD2 = getModel(b1,a1,L1,u2,y,Lfix); + if log(SOTD2.J)+2*4/length(u2) < log(best2.J)+2*3/length(u2) % Akaike IC + best2 = SOTD2 + end + + % And the alternative FOTD models from the leftovers. + best1_alt = getModel(0,0,0,u1,y-best2.ym,Lfix); + best2_alt = getModel(0,0,0,u2,y-best1.ym,Lfix); + for idx = 1:gpoints + FOTD1_alt = getModel(0,0,Lvec(1,idx),u1,y-best2.ym,1); % Lfix on these + FOTD2_alt = getModel(0,0,Lvec(2,idx),u2,y-best1.ym,1); + if FOTD1_alt.J < best1_alt.J + best1_alt = FOTD1_alt; + end + if FOTD2_alt.J < best2_alt.J + best2_alt = FOTD2_alt; + end + end + FOTD.alt_best1 = best1_alt; + FOTD.alt_best2 = best2_alt; + % SOTD for alternative + [b1,a1,L1,x01] = SOTD_start(best1_alt.p(1),best1_alt.p(2),best1_alt.p(3),best1_alt.p(4),Lmax); + SOTD1_alt = getModel(b1,a1,L1,u1,y-best2.ym,Lfix); + if log(SOTD1_alt.J)+2*4/length(u1) < log(best1_alt.J)+2*3/length(u1) % Akaike IC + best1_alt = SOTD1_alt + end + [b1,a1,L1,x01] = SOTD_start(best2_alt.p(1),best2_alt.p(2),best2_alt.p(3),best2_alt.p(4),Lmax); + SOTD2_alt = getModel(b1,a1,L1,u2,y-best1.ym,Lfix); + if log(SOTD2_alt.J)+2*4/length(u1) < log(best2_alt.J)+2*3/length(u2) % Akaike IC + best2_alt = SOTD2_alt + end + + %%%%%%%%%% Start combining the models %%%%%%%%%%%%%% + % First try with only using the best and no random points. + % Use the same model orders as the best models have + m1 = best1; + m2 = best2_alt; + m3 = best1_alt; + m4 = best2; + m5 = FOTD.best1; + m6 = FOTD.best2; + m7 = FOTD.alt_best1; + m8 = FOTD.alt_best2; + %%%%%%%%%%%% Från gamla sättet %%%%%%%%%%%%%% + model_1 = getModel2(m1.p(1), m1.p(2:1+m1.n), m1.p(m1.n+2),0,0,0,u1,u2,y,Lfix); %best + FOTD + model_2 = getModel2(0,0,0,m4.p(1),m4.p(2:1+m4.n),m4.p(m4.n+2),u1,u2,y,Lfix); %FOTD + best + model_3 = getModel2(m1.p(1)/2, m1.p(2:1+m1.n), m1.p(m1.n+2),m4.p(1)/2,m4.p(2:1+m4.n),m4.p(m4.n+2),u1,u2,y,Lfix); + model_4 = getModel2(m1.p(1), m1.p(2:1+m1.n), m1.p(m1.n+2),m2.p(1),m2.p(2:m2.n+1),m2.p(m2.n+2),u1,u2,y,Lfix); + model_5 = getModel2(m3.p(1), m3.p(2:m3.n+1), m3.p(m3.n+2),m4.p(1),m4.p(2:m4.n+1),m4.p(m4.n+2),u1,u2,y,Lfix); + % FOTD only versions + model_6 = getModel2(m5.p(1), m5.p(2:1+m5.n), m5.p(m5.n+2),0,0,0,u1,u2,y,Lfix); + model_7 = getModel2(0,0,0,m6.p(1),m6.p(2:1+m6.n),m6.p(m6.n+2),u1,u2,y,Lfix); + model_8 = getModel2(m5.p(1)/2, m5.p(2:1+m5.n), m5.p(m5.n+2),m6.p(1)/2,m6.p(2:1+m6.n),m6.p(m6.n+2),u1,u2,y,Lfix); + model_9 = getModel2(m5.p(1), m5.p(2:1+m5.n), m5.p(m5.n+2),m8.p(1),m8.p(2:m8.n+1),m8.p(m8.n+2),u1,u2,y,Lfix); + model_10 = getModel2(m7.p(1), m7.p(2:m7.n+1), m7.p(m7.n+2),m6.p(1),m6.p(2:m6.n+1),m6.p(m6.n+2),u1,u2,y,Lfix); + % Get the one with smallest AIC cost. + models = [model_1,model_2,model_3,model_4, model_5, model_6, model_7, model_8, model_9, model_10]; + for ind = 1:length(models) + mm = models(ind); + AIC(ind) = log(mm.J)+2*(mm.n1+2+mm.n2+2)/length(mm.ym); + end + [~,ind] = min(AIC); + best_model_index = ind + finalModel.best = models(ind) + %%%%%%%%%%%%% + + toc + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5 + function [b1,a1,L1,x01] = SOTD_start(b,a,L,x0,Lmax) + Tar = 1/a+L; + tau = L/Tar; + a1=(exp(1)-1)/(1-tau)/Tar; + L1=max(Tar-2/a1,0); + L1=min(L1,Lmax); + + if a>0 + b1=b*a1^2/a; + x01=[0 b/b1*x0]; % FIXME: initialize based on FOTD.x0? + else + b1=0; + x01 = [0 x0]; + end + a1=[2*a1 a1^2]; + end + + + + function model = getModel(b,a,L,u,y, Lfix) + n=numel(a); + m=numel(b); + p0=[b a L zeros(1,n)]; % initial parameter row vector + lb = [-inf(1,m) -inf(1,n) 0 -inf(1,n)]; % Removed lower bounds on a. + ub=[inf(1,n+m) Lmax inf(1,n)]; % upper bound on p + opts=optimset('Algorithm','trust-region-reflective',... + 'GradObj','on','Hessian','user-supplied','Display','off'); + [p,J,~,~,~,Jp,Jpp]=fmincon(@(p)Joe_etfa(p,n,t_sample,u,y,Lfix),p0,[],[],[],[],... + lb,ub,[],opts); + + % model output + [J,~,~,ym,~]=Joe_etfa(p,n,t_sample,u,y, Lfix); %Bytt ut h mot t_sample + model.J = J; + model.ym=ym; + model.p = p; + model.n = n; + end + + % no longer assumes order of process models is the same + function model = getModel2(b1,a1,L1,b2,a2,L2,u1,u2,y,Lfix) + n1=numel(a1); + n2=numel(a2); + m_1=numel(b1); + m_2=numel(b2); + p1 = [b1 a1 L1 zeros(1,n1)]; + p2 = [b2 a2 L2 zeros(1,n2)]; + p0=[p1 p2]; % initial parameter row vector + lb=[-inf(1,m_1) zeros(1,n1) 0 -inf(1,n1) -inf(1,m_2) zeros(1,n2) 0 -inf(1,n2)]; + ub=[inf(1,n1+m_1) Lmax inf(1,n1) inf(1,n2+m_2) Lmax inf(1,n2)]; % upper bound on p + opts=optimset('Algorithm','trust-region-reflective',... + 'GradObj','on','Hessian','user-supplied','Display','off'); + [p,J,~,~,~,Jp,Jpp]=fmincon(@(p)Joe2_etfa(p,n1,n2,t_sample,u1,u2,y,Lfix),p0,[],[],[],[],... + lb,ub,[],opts); + % Second run, sqp algorithm + opts=optimset('Algorithm','sqp',... + 'GradObj','on','Display','off'); + [p_2,J2,~,~,~,Jp,Jpp]=fmincon(@(p)Joe2_etfa(p,n1,n2,t_sample,u1,u2,y,Lfix),p0,[],[],[],[],... + lb,ub,[],opts); + if J2 < J + p = p_2; + end + + % model output + [J,~,~,ym,~,~,~]=Joe2_etfa(p,n1,n2,t_sample,u1,u2,y,Lfix); + model.ym=ym; + model.p = p; + model.p1 = p(1:2*n1+m_1+1); + model.p2 = p(2*n1+m_1+2:end); + model.J = J; + model.n1 = n1; + model.n2 = n2; + model.b1 = model.p1(1); + model.b2 = model.p2(1); + model.a1 = model.p1(2:n1+1); + model.a2 = model.p2(2:n2+1); + model.L1 = model.p1(n1+2); + model.L2 = model.p2(n2+2); + end + + + end \ No newline at end of file diff --git a/Scripts/TITO/identify_models.m b/Scripts/TITO/identify_models.m new file mode 100644 index 0000000000000000000000000000000000000000..a69af473486dcf337e088981c7a523199a1de804 --- /dev/null +++ b/Scripts/TITO/identify_models.m @@ -0,0 +1,21 @@ +%clear all +%load tmpdata/sim_data.mat + +% Testar med tp/2 som Lmax... +Lmax = max(result1(19),result2(19))/2; +finalModel1 = identify_etfa(simdata.t_exp, simdata.u1_exp,simdata.u2_exp, simdata.y1_exp,Lmax); +new_model = 'yes' +finalModel2 = identify_etfa(simdata.t_exp,simdata.u1_exp, simdata.u2_exp,simdata.y2_exp,Lmax); + +m1 = finalModel1.best; +m2 = finalModel2.best; + +G11hat = tf(m1.b1,[1,m1.a1]); G11hat.InputDelay = m1.L1; +G12hat = tf(m1.b2,[1,m1.a2]); G12hat.InputDelay = m1.L2; +G21hat = tf(m2.b1,[1,m2.a1]); G21hat.InputDelay = m2.L1; +G22hat = tf(m2.b2,[1,m2.a2]); G22hat.InputDelay = m2.L2; +Ghat = [G11hat G12hat; G21hat G22hat] + + +save('tmpdata/id_models.mat','Ghat','finalModel1','finalModel2') +save('tmpdata/sim_data.mat','simdata') diff --git a/Scripts/TITO/mimopiddesign.m b/Scripts/TITO/mimopiddesign.m new file mode 100644 index 0000000000000000000000000000000000000000..e685cf0da04829243a14ab0d8a027459bb724a31 --- /dev/null +++ b/Scripts/TITO/mimopiddesign.m @@ -0,0 +1,96 @@ +function [Kp, Ki, Kd] = mimopiddesign(P, P0, omega, Smax, Tmax, Qmax, epsilon, tau, max_iter) +% MIMO PID Tuning via Iterated LMI Restriction +% +% [Kp,Ki,Kd] = mimopiddesign(P,P0,omega,Smax,Tmax,Qmax,epsilon,tau,max_iter,verbose) +% +% Computes a multiple-input multple-output (MIMO) PID controller on the form +% +% PID(s) = Kp + 1/s*Ki + s/(1+tau*s)*Kd +% +% for the plant described its frequency response P and DC-gain P0. The +% controller will guaranetee that the maximum singular values of the +% closed-loop transfer functions S, T, Q and R are less than or equal to +% the specified maximal values given by Smax, Tmax, Qmax and Rmax. +% +% P - cell array with frequency response. +% P0 - dc gain of the plant. +% Smax - constraint on the maximum singular value of S = inv(I + P*C). +% Tmax - constraint on the maximum singular value of T = P*C*S. +% Qmax - constraint on the maximum singular value of Q = C*S. +% epsilon - initial controller integral-gain constant +% tau - derivative filter time constant. +% max_iter - maximum number of optimization iterations. + +cvx_quiet(true); + +N = length(omega); % Nbr of frequency points +[p, m] = size(P0); % Nbr of system inputs and outputs + +I = eye(p); + +% Controller: +s = 1i*omega; +Cprop = ones(1,N); % Proportional part +Cint = 1./s; % Integral part +%Cder = s./(1 + tau*s); % Derivative part +Cder = s; % Derivative part without filter + +% Initialization of controller variables +Kp = zeros(m, p); +Ki = epsilon*pinv(P0); +Kd = zeros(m, p); + +% Initialization of C and Z +for k = 1:N + C{k}= Cprop(k)*Kp + Cint(k)*Ki + Cder(k)*Kd; % PID-controller + Z{k} = I + P{k}*C{k}; +end + +% Printing: +formatSpec = '|%2u| %2.3f | %2.3f | %2.3f | %2.2e |\n'; +fprintf('\n|it| ||S|| | ||T|| | ||Q|| | obj. |\n') +fprintf('|--|---------|---------|---------|------------|\n') + +% Optimization routine +prev_obj = 0; % Initialize prev_obj +for iter = 1:max_iter + Ztilde = Z; + Ztilde0 = P0*Ki; + %% Create and solve the convex problem: + cvx_begin SDP + variables s Kp(m,p) Ki(m,p) Kd(m,p); + maximize( s ) + subject to + % Constraint associated with objective function: + Z0 = P0*Ki; + Z0'*Ztilde0 + Ztilde0'*Z0 - Ztilde0'*Ztilde0 >= s*I; + % Robustness contraints: + for k = 1:N + C{k} = Cprop(k)*Kp + Cint(k)*Ki + Cder(k)*Kd; + Z{k} = I + P{k}*C{k}; + % Constraints on S: + Z{k}'*Ztilde{k} + Ztilde{k}'*Z{k} - Ztilde{k}'*Ztilde{k} >= 1/Smax^2*I; + % Constraint on T: + [Z{k}'*Ztilde{k} + Ztilde{k}'*Z{k} - Ztilde{k}'*Ztilde{k} 1/Tmax*(P{k}*C{k})' + 1/Tmax*(P{k}*C{k}) I] >= 0; + % Constraint on Q: +% [Z{k}'*Ztilde{k} + Ztilde{k}'*Z{k} - Ztilde{k}'*Ztilde{k} 1/Qmax*C{k}' +% 1/Qmax*C{k} I] >= 0; + end + cvx_end + + for k = 1:N % Calculate the singular values + sing_S(k) = norm(I/Z{k}); + sing_T(k) = norm((P{k}*C{k})/Z{k}); + sing_Q(k) = norm(C{k}/Z{k}); + end + % Print result: + fprintf(formatSpec, iter, max(sing_S), max(sing_T), max(sing_Q), sqrt(s)) % Print result + % Stopping criterion + if (sqrt(s)-prev_obj) < 1e-3*prev_obj + break; + end + prev_obj = sqrt(s); +end + +end \ No newline at end of file diff --git a/Scripts/TITO/plot_controller_performance.m b/Scripts/TITO/plot_controller_performance.m new file mode 100644 index 0000000000000000000000000000000000000000..824d2d883457f0a68312f83c3ebbfff54994b960 --- /dev/null +++ b/Scripts/TITO/plot_controller_performance.m @@ -0,0 +1,54 @@ +clear all +%load figs/qt_sim_results/all_run_quadtank +load Gtrue +P = Gtrue; +load tmpdata/controllers.mat +C = C.tf; +C_hat = C_hat.tf; + +% set point changes +figure(10); set(gcf,'position',[50 650 550 440]) +step(inv(eye(2)+P*C)*P*C,'k') +hold on +step(inv(eye(2)+P*C_hat)*P*C_hat,'r') +hold off +title('T') + +% % set point changes +% figure(16); set(gcf,'position',[50 650 550 440]) +% step(inv(eye(2)+C*P)*C*P,'k') +% hold on +% step(inv(eye(2)+C_hat*P)*C_hat*P,'r') +% hold off +% title('T*') + +% load disturbances +figure(11); set(gcf,'position',[650 650 550 440]) +step(inv(eye(2)+P*C)*P,'k') +hold on +step(inv(eye(2)+P*C_hat)*P,'r') +hold off +title('SP') + +% noise response +figure(12); set(gcf,'position',[50 80 550 440]) +step(inv(eye(2)+P*C),'k') +hold on +step(inv(eye(2)+P*C_hat),'r') +hold off +title('S') + +% +figure(13); set(gcf,'position',[650 80 550 440]) +step(inv(eye(2)+P*C)*C,'k') +hold on +step(inv(eye(2)+P*C_hat)*C_hat,'r') +hold off +title('SC') + + +figure(14); set(gcf,'position',[1250 80 550 440]) +bode(C,'k') +hold on +bode(C_hat,'r') +hold off \ No newline at end of file diff --git a/Scripts/TITO/plot_models.m b/Scripts/TITO/plot_models.m new file mode 100644 index 0000000000000000000000000000000000000000..9774ab3ab2c4c9b9273dabf5ae5d7b4af8fdbded --- /dev/null +++ b/Scripts/TITO/plot_models.m @@ -0,0 +1,45 @@ +clear all; +load tmpdata/sim_data.mat +load tmpdata/id_models.mat +%load Gtrue +if exist('Gtrue','var') == 0 + Gtrue = tf(0); +end + +t = simdata.t_exp; +u1 = simdata.u1_exp; +u2 = simdata.u2_exp; +y1 = simdata.y1_exp; +y2 = simdata.y2_exp; + +%Removing points and plotting +[tr11,ur1] = removePoints(t,u1); +[tr21,yr1] = removePoints(t,y1); +[tr31,ym1] = removePoints(t,finalModel1.best.ym); + +[tr12,ur2] = removePoints(t,u2); +[tr22,yr2] = removePoints(t,y2); +[tr32,ym2] = removePoints(t,finalModel2.best.ym); + +figure(1); +subplot(211) +plot(tr11,ur1,'b') +hold on +plot(tr21,yr1,'r') +plot(tr31,ym1,'k','LineWidth',1) % normalized to y0 +hold off +legend('u_1','y_1','y_{m1}') + +subplot(212) +plot(tr12,ur2,'b') +hold on +plot(tr22,yr2,'r') +plot(tr32,ym2,'k','LineWidth',1) %normalized to y0 +hold off +legend('u_2','y_2','y_{m2}') + +figure(2) +bodeplot(Ghat,'r',Gtrue,'k'); set(gcf,'position',[1250 80 550 440]) +opts = bodeoptions('cstprefs'); +opts.YLim = {[0.01,25];[-270,15];[0.01,25];[-270,15]}; +bodeplot(Ghat,'r',Gtrue,'k',opts) diff --git a/Scripts/TITO/removePoints.m b/Scripts/TITO/removePoints.m new file mode 100644 index 0000000000000000000000000000000000000000..70f531a401b30abc61c2f5c483d02200e251bbc7 --- /dev/null +++ b/Scripts/TITO/removePoints.m @@ -0,0 +1,46 @@ +function [xvec,yvec] = removePoints(xvec,yvec,str) +% Removing all equal y-points except for the endpoints. Optional 3rd argument to display +% the results by 'check plot', 'check nbr' or 'check all'. +showPlot = 0; +showNbr = 0; +if nargin > 2 + if strcmp(str,'check plot') + showPlot = 1; + hej = 27 + elseif strcmp(str,'check all') + showPlot = 1; + showNbr = 1; + elseif strcmp(str,'check nbr') + showNbr = 1; + else + warning(strcat('argument "',str,'" not known')) + end +end +if length(xvec) ~= length(yvec) + error('Vectors must have the same length!') +end +x = xvec; y = yvec; +XpointsToRemove = []; + +y1 = yvec(1:end-2); +y2 = yvec(2:end-1); +y3 = yvec(3:end); +YpointsToRemove1 = find(y1-y2==0)+1; +YpointsToRemove2 = find(y2-y3==0)+1; +YpointsToRemove = intersect(YpointsToRemove1,YpointsToRemove2); + +pointsToRemove = union(XpointsToRemove,YpointsToRemove); +xvec(pointsToRemove) = []; +yvec(pointsToRemove) = []; +if showNbr == 1 + nbrOfRemoved = length(pointsToRemove) +end +if showPlot == 1 + figure() + plot(x,y) + hold on + plot(xvec,yvec,'r') + hold off + legend('original','reduced') +end +end \ No newline at end of file diff --git a/Scripts/TITO/simulate_experiment.m b/Scripts/TITO/simulate_experiment.m new file mode 100644 index 0000000000000000000000000000000000000000..342d5e44238eb0dcfca9872b1b41e1dc2fa5c28c --- /dev/null +++ b/Scripts/TITO/simulate_experiment.m @@ -0,0 +1,35 @@ +%clear all +%[simdata.u1,simdata.y1,simdata.t, simdata.u2, simdata.y2, result]=runSim(simopt,params); + +% make current workspace available to the simulator +options = simset('SrcWorkspace','current'); +warning('off','Simulink:blocks:TDelayDirectThroughAutoSet') +sim('autotuner_tito_2012a',[],options) +warning('on','Simulink:blocks:TDelayDirectThroughAutoSet') + +% extract signals +simdata.t=simout.time; +data=simout.signals.values; +simdata.u1=data(:,1); +simdata.y1=data(:,2); +simdata.u2=data(:,3); +simdata.y2=data(:,4); +result = result.signals.values; + + +%load sim_params.mat + +result1 = result(1:23); +result2 = result(24:end); + +% To not do the estimation on the noise measuring interval +t_exp_start = result2(23); +exp_start = find(simdata.t > t_exp_start); % Temporary, should be larger than uref or something +exp_stop = find(simdata.t > max(result1(17),result2(17))); +simdata.t_exp = simdata.t(exp_start:exp_stop); +simdata.u1_exp = simdata.u1(exp_start:exp_stop)-result1(16); % removes setpoint offsets +simdata.u2_exp = simdata.u2(exp_start:exp_stop)-result2(16); +simdata.y1_exp = simdata.y1(exp_start:exp_stop)-result1(15); +simdata.y2_exp = simdata.y2(exp_start:exp_stop)-result2(15); + +save('tmpdata/sim_data.mat','simdata','result1','result2','params') diff --git a/Scripts/TITO/slprj/_jitprj/jitEngineAccessInfo.mat b/Scripts/TITO/slprj/_jitprj/jitEngineAccessInfo.mat new file mode 100644 index 0000000000000000000000000000000000000000..6c8f6d7c3e5add31ea4ff9dae8883984a44403c0 Binary files /dev/null and b/Scripts/TITO/slprj/_jitprj/jitEngineAccessInfo.mat differ diff --git a/Scripts/TITO/slprj/_jitprj/s4TPKMZGJBJjvMSDAQZgq3.l b/Scripts/TITO/slprj/_jitprj/s4TPKMZGJBJjvMSDAQZgq3.l new file mode 100644 index 0000000000000000000000000000000000000000..939030f725e991159ab2b87fae4fdfd4e2e99d6d Binary files /dev/null and b/Scripts/TITO/slprj/_jitprj/s4TPKMZGJBJjvMSDAQZgq3.l differ diff --git a/Scripts/TITO/slprj/_jitprj/s4TPKMZGJBJjvMSDAQZgq3.mat b/Scripts/TITO/slprj/_jitprj/s4TPKMZGJBJjvMSDAQZgq3.mat new file mode 100644 index 0000000000000000000000000000000000000000..e153de4ff03dc1e2bb30bf0227a1743edfd915b6 Binary files /dev/null and b/Scripts/TITO/slprj/_jitprj/s4TPKMZGJBJjvMSDAQZgq3.mat differ diff --git a/Scripts/TITO/slprj/_jitprj/sV7JtXXAAkmojCrcBZyKmYF.l b/Scripts/TITO/slprj/_jitprj/sV7JtXXAAkmojCrcBZyKmYF.l new file mode 100644 index 0000000000000000000000000000000000000000..e6c587827b7ecab68a305a34838b5e35eb2d01f6 Binary files /dev/null and b/Scripts/TITO/slprj/_jitprj/sV7JtXXAAkmojCrcBZyKmYF.l differ diff --git a/Scripts/TITO/slprj/_jitprj/sV7JtXXAAkmojCrcBZyKmYF.mat b/Scripts/TITO/slprj/_jitprj/sV7JtXXAAkmojCrcBZyKmYF.mat new file mode 100644 index 0000000000000000000000000000000000000000..0bb38a04dae1b6abbeb166ff0025ce7c98ceee69 Binary files /dev/null and b/Scripts/TITO/slprj/_jitprj/sV7JtXXAAkmojCrcBZyKmYF.mat differ diff --git a/Scripts/TITO/slprj/_jitprj/sa2KJ1Bzvvs58Tl03TCNUCD.l b/Scripts/TITO/slprj/_jitprj/sa2KJ1Bzvvs58Tl03TCNUCD.l new file mode 100644 index 0000000000000000000000000000000000000000..bff749d5e58c598ff6ec94b45378848ac6d6fb27 Binary files /dev/null and b/Scripts/TITO/slprj/_jitprj/sa2KJ1Bzvvs58Tl03TCNUCD.l differ diff --git a/Scripts/TITO/slprj/_jitprj/sa2KJ1Bzvvs58Tl03TCNUCD.mat b/Scripts/TITO/slprj/_jitprj/sa2KJ1Bzvvs58Tl03TCNUCD.mat new file mode 100644 index 0000000000000000000000000000000000000000..96b9869eeece486319de894ea58580e269604070 Binary files /dev/null and b/Scripts/TITO/slprj/_jitprj/sa2KJ1Bzvvs58Tl03TCNUCD.mat differ diff --git a/Scripts/TITO/slprj/_jitprj/sevXm465YiM9JGSlvS9cCzG.l b/Scripts/TITO/slprj/_jitprj/sevXm465YiM9JGSlvS9cCzG.l new file mode 100644 index 0000000000000000000000000000000000000000..968077463770481eb58a2bb89341416cdc1ee1bb Binary files /dev/null and b/Scripts/TITO/slprj/_jitprj/sevXm465YiM9JGSlvS9cCzG.l differ diff --git a/Scripts/TITO/slprj/_jitprj/sevXm465YiM9JGSlvS9cCzG.mat b/Scripts/TITO/slprj/_jitprj/sevXm465YiM9JGSlvS9cCzG.mat new file mode 100644 index 0000000000000000000000000000000000000000..7b0b8940adcc5a09ca233994e44f08e631c147ef Binary files /dev/null and b/Scripts/TITO/slprj/_jitprj/sevXm465YiM9JGSlvS9cCzG.mat differ diff --git a/Scripts/TITO/slprj/_jitprj/soEusDdNagrgREA5x2e3LWH.l b/Scripts/TITO/slprj/_jitprj/soEusDdNagrgREA5x2e3LWH.l new file mode 100644 index 0000000000000000000000000000000000000000..dc89cbfd549dfba84493ae65e9dd330ea274f847 Binary files /dev/null and b/Scripts/TITO/slprj/_jitprj/soEusDdNagrgREA5x2e3LWH.l differ diff --git a/Scripts/TITO/slprj/_jitprj/soEusDdNagrgREA5x2e3LWH.mat b/Scripts/TITO/slprj/_jitprj/soEusDdNagrgREA5x2e3LWH.mat new file mode 100644 index 0000000000000000000000000000000000000000..4eb212cf441d0b7bd3770532f10df6575c9381a3 Binary files /dev/null and b/Scripts/TITO/slprj/_jitprj/soEusDdNagrgREA5x2e3LWH.mat differ diff --git a/Scripts/TITO/slprj/_jitprj/suK5R10u93TdYmCcHziypSH.l b/Scripts/TITO/slprj/_jitprj/suK5R10u93TdYmCcHziypSH.l new file mode 100644 index 0000000000000000000000000000000000000000..99e33fa48d9db6afb91b190fd9658e99873d5184 Binary files /dev/null and b/Scripts/TITO/slprj/_jitprj/suK5R10u93TdYmCcHziypSH.l differ diff --git a/Scripts/TITO/slprj/_jitprj/suK5R10u93TdYmCcHziypSH.mat b/Scripts/TITO/slprj/_jitprj/suK5R10u93TdYmCcHziypSH.mat new file mode 100644 index 0000000000000000000000000000000000000000..c69d43afef6152bf24130952700ff6b55f8a9592 Binary files /dev/null and b/Scripts/TITO/slprj/_jitprj/suK5R10u93TdYmCcHziypSH.mat differ diff --git a/Scripts/TITO/slprj/_sfprj/EMLReport/emlReportAccessInfo.mat b/Scripts/TITO/slprj/_sfprj/EMLReport/emlReportAccessInfo.mat new file mode 100644 index 0000000000000000000000000000000000000000..3b8f3cda45db66a695851468d40ffeefd0e40bf5 Binary files /dev/null and b/Scripts/TITO/slprj/_sfprj/EMLReport/emlReportAccessInfo.mat differ diff --git a/Scripts/TITO/slprj/_sfprj/EMLReport/s4TPKMZGJBJjvMSDAQZgq3.mat b/Scripts/TITO/slprj/_sfprj/EMLReport/s4TPKMZGJBJjvMSDAQZgq3.mat new file mode 100644 index 0000000000000000000000000000000000000000..b72015d70c30f598ca9b7ef8735d43d3680c0211 Binary files /dev/null and b/Scripts/TITO/slprj/_sfprj/EMLReport/s4TPKMZGJBJjvMSDAQZgq3.mat differ diff --git a/Scripts/TITO/slprj/_sfprj/EMLReport/sV7JtXXAAkmojCrcBZyKmYF.mat b/Scripts/TITO/slprj/_sfprj/EMLReport/sV7JtXXAAkmojCrcBZyKmYF.mat new file mode 100644 index 0000000000000000000000000000000000000000..d51b9ef42aad995ad0eb404f3a3fd867fd04c32e Binary files /dev/null and b/Scripts/TITO/slprj/_sfprj/EMLReport/sV7JtXXAAkmojCrcBZyKmYF.mat differ diff --git a/Scripts/TITO/slprj/_sfprj/EMLReport/sa2KJ1Bzvvs58Tl03TCNUCD.mat b/Scripts/TITO/slprj/_sfprj/EMLReport/sa2KJ1Bzvvs58Tl03TCNUCD.mat new file mode 100644 index 0000000000000000000000000000000000000000..587c33439cdb4d5f79662e4a3ec02a97699516ee Binary files /dev/null and b/Scripts/TITO/slprj/_sfprj/EMLReport/sa2KJ1Bzvvs58Tl03TCNUCD.mat differ diff --git a/Scripts/TITO/slprj/_sfprj/EMLReport/sevXm465YiM9JGSlvS9cCzG.mat b/Scripts/TITO/slprj/_sfprj/EMLReport/sevXm465YiM9JGSlvS9cCzG.mat new file mode 100644 index 0000000000000000000000000000000000000000..47a75e9848556a927fdd887dfbb5730a5c0d8f5b Binary files /dev/null and b/Scripts/TITO/slprj/_sfprj/EMLReport/sevXm465YiM9JGSlvS9cCzG.mat differ diff --git a/Scripts/TITO/slprj/_sfprj/EMLReport/soEusDdNagrgREA5x2e3LWH.mat b/Scripts/TITO/slprj/_sfprj/EMLReport/soEusDdNagrgREA5x2e3LWH.mat new file mode 100644 index 0000000000000000000000000000000000000000..6da02adc138d36aad12a5febbda59d66e152795b Binary files /dev/null and b/Scripts/TITO/slprj/_sfprj/EMLReport/soEusDdNagrgREA5x2e3LWH.mat differ diff --git a/Scripts/TITO/slprj/_sfprj/EMLReport/suK5R10u93TdYmCcHziypSH.mat b/Scripts/TITO/slprj/_sfprj/EMLReport/suK5R10u93TdYmCcHziypSH.mat new file mode 100644 index 0000000000000000000000000000000000000000..69e3e2325d25879b96e7fb6ec5134f5453ff000c Binary files /dev/null and b/Scripts/TITO/slprj/_sfprj/EMLReport/suK5R10u93TdYmCcHziypSH.mat differ diff --git a/Scripts/TITO/slprj/_sfprj/precompile/6Emunsz5YNDRdVmq1H6fXH.mat b/Scripts/TITO/slprj/_sfprj/precompile/6Emunsz5YNDRdVmq1H6fXH.mat new file mode 100644 index 0000000000000000000000000000000000000000..2cf6d20ed712a2231ed8b6e8f63c1a87cde79430 Binary files /dev/null and b/Scripts/TITO/slprj/_sfprj/precompile/6Emunsz5YNDRdVmq1H6fXH.mat differ diff --git a/Scripts/TITO/slprj/_sfprj/precompile/9SgEBU6JuTI6TTrpwZs4UD.mat b/Scripts/TITO/slprj/_sfprj/precompile/9SgEBU6JuTI6TTrpwZs4UD.mat new file mode 100644 index 0000000000000000000000000000000000000000..77ba7182714a0901ea71aa433e5acfbbad584e70 Binary files /dev/null and b/Scripts/TITO/slprj/_sfprj/precompile/9SgEBU6JuTI6TTrpwZs4UD.mat differ diff --git a/Scripts/TITO/slprj/_sfprj/precompile/OgIt9dy3ooEHaZyOkRH6lG.mat b/Scripts/TITO/slprj/_sfprj/precompile/OgIt9dy3ooEHaZyOkRH6lG.mat new file mode 100644 index 0000000000000000000000000000000000000000..282fe61cecd3e6d8d5b7fd0c7cc400a63ca70e46 Binary files /dev/null and b/Scripts/TITO/slprj/_sfprj/precompile/OgIt9dy3ooEHaZyOkRH6lG.mat differ diff --git a/Scripts/TITO/slprj/_sfprj/precompile/WCTfm0CpFQC7pzgWXQcOaH.mat b/Scripts/TITO/slprj/_sfprj/precompile/WCTfm0CpFQC7pzgWXQcOaH.mat new file mode 100644 index 0000000000000000000000000000000000000000..78136eab1684399e8676633369d7870de8a48e74 Binary files /dev/null and b/Scripts/TITO/slprj/_sfprj/precompile/WCTfm0CpFQC7pzgWXQcOaH.mat differ diff --git a/Scripts/TITO/slprj/_sfprj/precompile/XiHzsCwxsOLhgd8qpUQsgD.mat b/Scripts/TITO/slprj/_sfprj/precompile/XiHzsCwxsOLhgd8qpUQsgD.mat new file mode 100644 index 0000000000000000000000000000000000000000..aada67913df6e27cfaf3d2b31e7b189111af1110 Binary files /dev/null and b/Scripts/TITO/slprj/_sfprj/precompile/XiHzsCwxsOLhgd8qpUQsgD.mat differ diff --git a/Scripts/TITO/slprj/_sfprj/precompile/Z3dDfRQGZL0eLezEdmkeEB.mat b/Scripts/TITO/slprj/_sfprj/precompile/Z3dDfRQGZL0eLezEdmkeEB.mat new file mode 100644 index 0000000000000000000000000000000000000000..78136eab1684399e8676633369d7870de8a48e74 Binary files /dev/null and b/Scripts/TITO/slprj/_sfprj/precompile/Z3dDfRQGZL0eLezEdmkeEB.mat differ diff --git a/Scripts/TITO/slprj/_sfprj/precompile/autoInferAccessInfo.mat b/Scripts/TITO/slprj/_sfprj/precompile/autoInferAccessInfo.mat new file mode 100644 index 0000000000000000000000000000000000000000..08859d89efc1ae0d06ed4d429f4898a799221394 Binary files /dev/null and b/Scripts/TITO/slprj/_sfprj/precompile/autoInferAccessInfo.mat differ diff --git a/Scripts/TITO/slprj/_sfprj/precompile/b3LVVx0jhUFurnMusrmojF.mat b/Scripts/TITO/slprj/_sfprj/precompile/b3LVVx0jhUFurnMusrmojF.mat new file mode 100644 index 0000000000000000000000000000000000000000..d26ca3fe351c46f459a1c134d6c3501bb4e2f351 Binary files /dev/null and b/Scripts/TITO/slprj/_sfprj/precompile/b3LVVx0jhUFurnMusrmojF.mat differ diff --git a/Scripts/TITO/slprj/_sfprj/precompile/dKdZhBjnKJM4z5rwxGBe2.mat b/Scripts/TITO/slprj/_sfprj/precompile/dKdZhBjnKJM4z5rwxGBe2.mat new file mode 100644 index 0000000000000000000000000000000000000000..2cf6d20ed712a2231ed8b6e8f63c1a87cde79430 Binary files /dev/null and b/Scripts/TITO/slprj/_sfprj/precompile/dKdZhBjnKJM4z5rwxGBe2.mat differ diff --git a/Scripts/TITO/slprj/_sfprj/precompile/hwl4PmuUX3gZz8bH7IlEZF.mat b/Scripts/TITO/slprj/_sfprj/precompile/hwl4PmuUX3gZz8bH7IlEZF.mat new file mode 100644 index 0000000000000000000000000000000000000000..d26ca3fe351c46f459a1c134d6c3501bb4e2f351 Binary files /dev/null and b/Scripts/TITO/slprj/_sfprj/precompile/hwl4PmuUX3gZz8bH7IlEZF.mat differ diff --git a/Scripts/TITO/slprj/_sfprj/precompile/jneVrbzAMmvP15fz4bDxbG.mat b/Scripts/TITO/slprj/_sfprj/precompile/jneVrbzAMmvP15fz4bDxbG.mat new file mode 100644 index 0000000000000000000000000000000000000000..663180d098a9e8e6b84cfd34e3de9f96587abe0b Binary files /dev/null and b/Scripts/TITO/slprj/_sfprj/precompile/jneVrbzAMmvP15fz4bDxbG.mat differ diff --git a/Scripts/TITO/slprj/_sfprj/precompile/pkRtqON6yybhdoEGGZ6Vg.mat b/Scripts/TITO/slprj/_sfprj/precompile/pkRtqON6yybhdoEGGZ6Vg.mat new file mode 100644 index 0000000000000000000000000000000000000000..a49266a80adc165eeebfcff08c731a2978f834dd Binary files /dev/null and b/Scripts/TITO/slprj/_sfprj/precompile/pkRtqON6yybhdoEGGZ6Vg.mat differ diff --git a/Scripts/TITO/slprj/_sfprj/precompile/sikmhRvssQ8hSs7VfHYsUC.mat b/Scripts/TITO/slprj/_sfprj/precompile/sikmhRvssQ8hSs7VfHYsUC.mat new file mode 100644 index 0000000000000000000000000000000000000000..77ba7182714a0901ea71aa433e5acfbbad584e70 Binary files /dev/null and b/Scripts/TITO/slprj/_sfprj/precompile/sikmhRvssQ8hSs7VfHYsUC.mat differ diff --git a/Scripts/TITO/slprj/_sfprj/tune_ystep_wb/_self/sfun/info/binfo.mat b/Scripts/TITO/slprj/_sfprj/tune_ystep_wb/_self/sfun/info/binfo.mat new file mode 100644 index 0000000000000000000000000000000000000000..9b9f78ba83c76c0a99ffdf004840c8d435750f82 Binary files /dev/null and b/Scripts/TITO/slprj/_sfprj/tune_ystep_wb/_self/sfun/info/binfo.mat differ