From 41984cd492010ff76ce66ff7bcd6a95f72e705ae Mon Sep 17 00:00:00 2001 From: Matteo Morelli Date: Fri, 21 Aug 2015 16:51:35 +0200 Subject: [PATCH] Fixing the function-call dependency issues described at https://github.com/m-morelli/tres_bundle/issues/2, with no algebraic loops between Kernel and Tasks. Results checked for simple examples. More examples to be made compliant to the new implementation and checked. --- simulink/blockset/tres_simulink_blockset.slx | Bin 18018 -> 19250 bytes simulink/build_tres_simulink.m | 4 +- simulink/demos/dummy/tres_dummy.mdl | 2336 ++++++++++++----- simulink/demos/dummy/tres_dummy_launcher.m | 6 +- .../demos/quadrotor/quadrotor_bn_launcher.m | 12 +- .../sl_quadcopter_tres_poster_df.slx | Bin 0 -> 41916 bytes .../tres_test_distributedfuncts.slx | Bin 0 -> 25602 bytes .../tres_test_distributedfuncts_df.slx | Bin 0 -> 24864 bytes .../tres_test_distributedfuncts_launcher.m | 13 + simulink/src/common/tres_enabler_df.cpp | 109 + simulink/src/node/tres_kernel.cpp | 36 +- simulink/src/node/tres_task_df.cpp | 198 ++ 12 files changed, 2053 insertions(+), 661 deletions(-) create mode 100644 simulink/demos/quadrotor/sl_quadcopter_tres_poster_df.slx create mode 100644 simulink/demos/test_distributedfuncts/tres_test_distributedfuncts.slx create mode 100644 simulink/demos/test_distributedfuncts/tres_test_distributedfuncts_df.slx create mode 100644 simulink/demos/test_distributedfuncts/tres_test_distributedfuncts_launcher.m create mode 100644 simulink/src/common/tres_enabler_df.cpp create mode 100644 simulink/src/node/tres_task_df.cpp diff --git a/simulink/blockset/tres_simulink_blockset.slx b/simulink/blockset/tres_simulink_blockset.slx index a61dca0b9fd9638e88653b0d467ee9a89f17fca5..5e06268918aa2263508ece200014be7b0758e693 100644 GIT binary patch delta 18149 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 QO-PeJMjZx&NdN!<0J^M1X#fBK delta 16917 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" - LastModifiedBy "matteo" + LastModifiedBy "MM244911" ModifiedDateFormat "%" - LastModifiedDate "Thu Feb 12 05:03:10 2015" - RTWModifiedTimeStamp 345616459 - ModelVersionFormat "1.%" + LastModifiedDate "Fri Aug 21 14:44:24 2015" + RTWModifiedTimeStamp 362067058 + ModelVersionFormat "1.%" ConfigurationManager "none" SampleTimeColors off SampleTimeAnnotations off @@ -811,6 +811,19 @@ Model { BlockType DigitalClock SampleTime "1" } + Block { + BlockType EnablePort + StatesWhenEnabling "held" + PropagateVarSize "Only when enabling" + ShowOutputPort off + ZeroCross on + PortDimensions "1" + SampleTime "-1" + OutMin "[]" + OutMax "[]" + OutDataTypeStr "double" + Interpolate on + } Block { BlockType From GotoTag "A" @@ -949,9 +962,6 @@ Model { SaturateOnIntegerOverflow on SampleTime "-1" } - Block { - BlockType Terminator - } Block { BlockType TriggerPort TriggerType "rising" @@ -972,7 +982,7 @@ Model { } System { Name "tres_dummy" - Location [238, 52, 1174, 768] + Location [73, 157, 1061, 994] Open on ModelBrowserVisibility off ModelBrowserWidth 200 @@ -986,19 +996,15 @@ Model { ShowPageBoundaries off ZoomFactor "100" ReportName "simulink-default.rpt" - SIDHighWatermark "150" + SIDHighWatermark "266" Block { BlockType Demux Name "Demux" - SID "31" - Ports [1, 2] - Position [376, 55, 414, 60] - ZOrder -7 - BlockRotation 270 - BlockMirror on - NamePlacement "alternate" + SID "151" + Ports [1, 4] + Position [425, 68, 430, 137] + ZOrder 5 ShowName off - Outputs "2" DisplayOption "bar" } Block { @@ -1006,11 +1012,8 @@ Model { Name "Demux1" SID "34" Ports [1, 2] - Position [586, 55, 624, 60] - ZOrder -7 - BlockRotation 270 - BlockMirror on - NamePlacement "alternate" + Position [205, 101, 210, 139] + ZOrder 12 ShowName off Outputs "2" DisplayOption "bar" @@ -1018,26 +1021,10 @@ Model { Block { BlockType Demux Name "Demux2" - SID "89" - Ports [1, 4] - Position [99, 255, 261, 260] - ZOrder -7 - BlockRotation 270 - BlockMirror on - NamePlacement "alternate" - ShowName off - DisplayOption "bar" - } - Block { - BlockType Demux - Name "Demux3" - SID "107" + SID "159" Ports [1, 6] - Position [194, 430, 436, 435] - ZOrder -7 - BlockRotation 270 - BlockMirror on - NamePlacement "alternate" + Position [660, 49, 665, 156] + ZOrder 21 ShowName off Outputs "6" DisplayOption "bar" @@ -1046,41 +1033,40 @@ Model { BlockType From Name "From" SID "33" - Position [384, 15, 406, 40] + Position [339, 50, 361, 75] ZOrder -9 BlockRotation 270 BlockMirror on NamePlacement "alternate" ShowName off + GotoTag "A1" } Block { BlockType From Name "From1" SID "35" - Position [594, 15, 616, 40] + Position [579, 50, 601, 75] ZOrder -9 BlockRotation 270 BlockMirror on NamePlacement "alternate" ShowName off + GotoTag "A2" } Block { BlockType From Name "From10" - SID "108" - Position [304, 380, 326, 405] - ZOrder -9 - BlockRotation 270 - BlockMirror on - NamePlacement "alternate" + SID "266" + Position [25, 263, 65, 287] + ZOrder 41 ShowName off - GotoTag "S2" + GotoTag "S1_1" } Block { BlockType From Name "From11" SID "109" - Position [615, 354, 640, 376] + Position [640, 354, 665, 376] ZOrder -9 ShowName off GotoTag "H1" @@ -1089,7 +1075,7 @@ Model { BlockType From Name "From12" SID "110" - Position [615, 379, 640, 401] + Position [640, 379, 665, 401] ZOrder -9 ShowName off GotoTag "H2" @@ -1098,16 +1084,88 @@ Model { BlockType From Name "From13" SID "145" - Position [615, 404, 640, 426] + Position [640, 404, 665, 426] ZOrder -9 ShowName off GotoTag "H3" } + Block { + BlockType From + Name "From2" + SID "263" + Position [110, 263, 150, 287] + ZOrder 38 + ShowName off + GotoTag "F1_1" + } + Block { + BlockType From + Name "From20" + SID "166" + Position [105, 448, 145, 472] + ZOrder 22 + ShowName off + GotoTag "F1_2" + } + Block { + BlockType From + Name "From21" + SID "167" + Position [205, 448, 245, 472] + ZOrder 23 + ShowName off + GotoTag "S2_2" + } + Block { + BlockType From + Name "From22" + SID "168" + Position [300, 448, 340, 472] + ZOrder 24 + ShowName off + GotoTag "F2_2" + } + Block { + BlockType From + Name "From23" + SID "169" + Position [20, 448, 60, 472] + ZOrder 25 + ShowName off + GotoTag "S1_2" + } + Block { + BlockType From + Name "From24" + SID "170" + Position [390, 448, 430, 472] + ZOrder 26 + ShowName off + GotoTag "S3_2" + } + Block { + BlockType From + Name "From25" + SID "171" + Position [485, 448, 525, 472] + ZOrder 27 + ShowName off + GotoTag "F3_2" + } + Block { + BlockType From + Name "From3" + SID "264" + Position [210, 263, 250, 287] + ZOrder 39 + ShowName off + GotoTag "S2_1" + } Block { BlockType From Name "From4" SID "38" - Position [50, 79, 75, 101] + Position [30, 89, 55, 111] ZOrder -9 ShowName off GotoTag "T" @@ -1116,7 +1174,7 @@ Model { BlockType From Name "From5" SID "39" - Position [715, 19, 740, 41] + Position [785, 89, 810, 111] ZOrder -9 ShowName off GotoTag "T1" @@ -1125,7 +1183,7 @@ Model { BlockType From Name "From6" SID "40" - Position [715, 39, 740, 61] + Position [785, 109, 810, 131] ZOrder -9 ShowName off GotoTag "T2" @@ -1133,20 +1191,17 @@ Model { Block { BlockType From Name "From7" - SID "90" - Position [169, 205, 191, 230] - ZOrder -9 - BlockRotation 270 - BlockMirror on - NamePlacement "alternate" + SID "265" + Position [305, 263, 345, 287] + ZOrder 40 ShowName off - GotoTag "S1" + GotoTag "F2_1" } Block { BlockType From Name "From8" SID "103" - Position [615, 304, 640, 326] + Position [640, 304, 665, 326] ZOrder -9 ShowName off GotoTag "G1" @@ -1155,25 +1210,16 @@ Model { BlockType From Name "From9" SID "104" - Position [615, 324, 640, 346] + Position [640, 324, 665, 346] ZOrder -9 ShowName off GotoTag "G2" } - Block { - BlockType Goto - Name "Goto1" - SID "42" - Position [695, 93, 725, 117] - ZOrder -10 - ShowName off - GotoTag "S2" - } Block { BlockType Goto Name "Goto10" SID "111" - Position [225, 568, 255, 592] + Position [250, 568, 280, 592] ZOrder -10 ShowName off GotoTag "H1" @@ -1182,7 +1228,7 @@ Model { BlockType Goto Name "Goto11" SID "112" - Position [385, 568, 415, 592] + Position [410, 568, 440, 592] ZOrder -10 ShowName off GotoTag "H2" @@ -1191,33 +1237,124 @@ Model { BlockType Goto Name "Goto12" SID "144" - Position [565, 498, 595, 522] + Position [590, 498, 620, 522] ZOrder -10 ShowName off GotoTag "H3" } + Block { + BlockType Goto + Name "Goto13" + SID "152" + Position [450, 102, 505, 118] + ZOrder 1 + ShowName off + GotoTag "S2_1" + } + Block { + BlockType Goto + Name "Goto14" + SID "153" + Position [450, 117, 505, 133] + ZOrder 2 + ShowName off + GotoTag "F2_1" + } + Block { + BlockType Goto + Name "Goto15" + SID "157" + Position [225, 118, 255, 142] + ZOrder 13 + ShowName off + GotoTag "A2" + } + Block { + BlockType Goto + Name "Goto16" + SID "160" + Position [685, 87, 740, 103] + ZOrder 15 + ShowName off + GotoTag "S2_2" + } Block { BlockType Goto Name "Goto2" SID "43" - Position [790, 28, 820, 52] + Position [860, 98, 890, 122] ZOrder -10 ShowName off GotoTag "T" } + Block { + BlockType Goto + Name "Goto20" + SID "161" + Position [685, 102, 740, 118] + ZOrder 16 + ShowName off + GotoTag "F2_2" + } + Block { + BlockType Goto + Name "Goto21" + SID "162" + Position [685, 72, 740, 88] + ZOrder 17 + ShowName off + GotoTag "F1_2" + } + Block { + BlockType Goto + Name "Goto22" + SID "163" + Position [685, 57, 740, 73] + ZOrder 18 + ShowName off + GotoTag "S1_2" + } + Block { + BlockType Goto + Name "Goto23" + SID "164" + Position [685, 117, 740, 133] + ZOrder 19 + ShowName off + GotoTag "S3_2" + } + Block { + BlockType Goto + Name "Goto24" + SID "165" + Position [685, 132, 740, 148] + ZOrder 20 + ShowName off + GotoTag "F3_2" + } Block { BlockType Goto Name "Goto3" SID "44" - Position [235, 98, 265, 122] + Position [225, 98, 255, 122] ZOrder -10 ShowName off + GotoTag "A1" + } + Block { + BlockType Goto + Name "Goto4" + SID "154" + Position [450, 87, 505, 103] + ZOrder 3 + ShowName off + GotoTag "F1_1" } Block { BlockType Goto Name "Goto5" SID "51" - Position [695, 118, 725, 142] + Position [660, 153, 690, 177] ZOrder -10 ShowName off GotoTag "T2" @@ -1226,7 +1363,7 @@ Model { BlockType Goto Name "Goto6" SID "101" - Position [220, 373, 250, 397] + Position [245, 373, 275, 397] ZOrder -10 ShowName off GotoTag "G1" @@ -1234,17 +1371,17 @@ Model { Block { BlockType Goto Name "Goto7" - SID "54" - Position [465, 93, 495, 117] - ZOrder -10 + SID "155" + Position [450, 72, 505, 88] + ZOrder 4 ShowName off - GotoTag "S1" + GotoTag "S1_1" } Block { BlockType Goto Name "Goto8" SID "55" - Position [465, 118, 495, 142] + Position [430, 138, 460, 162] ZOrder -10 ShowName off GotoTag "T1" @@ -1253,7 +1390,7 @@ Model { BlockType Goto Name "Goto9" SID "102" - Position [385, 313, 415, 337] + Position [410, 313, 440, 337] ZOrder -10 ShowName off GotoTag "G2" @@ -1262,7 +1399,7 @@ Model { BlockType Ground Name "Ground" SID "150" - Position [50, 115, 70, 135] + Position [30, 125, 50, 145] ZOrder -12 ShowName off } @@ -1271,9 +1408,9 @@ Model { Name "Kernel" SID "149" Ports [2, 1] - Position [100, 74, 210, 141] + Position [75, 84, 185, 151] ZOrder -5 - LibraryVersion "1.45" + LibraryVersion "1.66" SourceBlock "tres_simulink_blockset/Kernel" SourceType "" taskset_descr_name "task_set_descr" @@ -1286,57 +1423,148 @@ Model { Block { BlockType SubSystem Name "Latch1_1" - SID "73" - Ports [1, 1, 0, 1] - Position [105, 304, 170, 346] - ZOrder -14 + SID "185" + Ports [1, 1, 1] + Position [130, 304, 195, 346] + ZOrder 30 TreatAsAtomicUnit on RequestExecContextInheritance off System { Name "Latch1_1" - Location [398, 280, 944, 815] + Location [73, 101, 1061, 938] 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] + PaperType "A4" + PaperUnits "centimeters" + TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "In1" - SID "74" - Position [110, 103, 140, 117] + SID "186" + Position [220, 253, 250, 267] ZOrder -1 IconDisplay "Port number" } Block { - BlockType TriggerPort - Name "function" - SID "75" - Ports [] - Position [210, 15, 230, 35] - ZOrder -2 - TriggerType "function-call" - StatesWhenEnabling "held" + BlockType EnablePort + Name "Enable" + SID "189" + Ports [0, 1] + Position [210, 105, 230, 125] + ZOrder 10 + ShowOutputPort on + } + Block { + BlockType Reference + Name "Enable2Fcall" + SID "190" + Ports [1, 1] + Position [260, 82, 330, 148] + ZOrder 11 + LibraryVersion "1.66" + SourceBlock "tres_simulink_blockset/Enable2Fcall" + SourceType "" + } + Block { + BlockType SubSystem + Name "Latch1_1" + SID "73" + Ports [1, 1, 0, 1] + Position [320, 239, 385, 281] + ZOrder 12 + TreatAsAtomicUnit on + RequestExecContextInheritance off + System { + Name "Latch1_1" + Location [398, 280, 944, 815] + 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 "In1" + SID "74" + Position [110, 103, 140, 117] + ZOrder -1 + IconDisplay "Port number" + } + Block { + BlockType TriggerPort + Name "function" + SID "75" + Ports [] + Position [210, 15, 230, 35] + ZOrder -2 + TriggerType "function-call" + StatesWhenEnabling "held" + } + Block { + BlockType Outport + Name "Out1" + SID "76" + Position [360, 103, 390, 117] + ZOrder -3 + IconDisplay "Port number" + } + Line { + ZOrder 1 + SrcBlock "In1" + SrcPort 1 + DstBlock "Out1" + DstPort 1 + } + } } Block { BlockType Outport Name "Out1" - SID "76" - Position [360, 103, 390, 117] + SID "188" + Position [470, 253, 500, 267] ZOrder -3 IconDisplay "Port number" } Line { - ZOrder 1 + ZOrder 4 + SrcBlock "Enable2Fcall" + SrcPort 1 + Points [15, 0] + DstBlock "Latch1_1" + DstPort trigger + } + Line { + ZOrder 3 + SrcBlock "Enable" + SrcPort 1 + DstBlock "Enable2Fcall" + DstPort 1 + } + Line { + ZOrder 5 SrcBlock "In1" SrcPort 1 + DstBlock "Latch1_1" + DstPort 1 + } + Line { + ZOrder 6 + SrcBlock "Latch1_1" + SrcPort 1 DstBlock "Out1" DstPort 1 } @@ -1345,57 +1573,148 @@ Model { Block { BlockType SubSystem Name "Latch1_2" - SID "113" - Ports [1, 1, 0, 1] - Position [105, 489, 170, 531] - ZOrder -14 + SID "212" + Ports [1, 1, 1] + Position [130, 489, 195, 531] + ZOrder 33 TreatAsAtomicUnit on RequestExecContextInheritance off System { Name "Latch1_2" - Location [398, 280, 944, 815] + Location [73, 101, 1061, 938] 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] + PaperType "A4" + PaperUnits "centimeters" + TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "In1" - SID "114" - Position [110, 103, 140, 117] + SID "213" + Position [220, 253, 250, 267] ZOrder -1 IconDisplay "Port number" } Block { - BlockType TriggerPort - Name "function" - SID "115" - Ports [] - Position [210, 15, 230, 35] - ZOrder -2 - TriggerType "function-call" - StatesWhenEnabling "held" + BlockType EnablePort + Name "Enable" + SID "214" + Ports [0, 1] + Position [210, 105, 230, 125] + ZOrder 10 + ShowOutputPort on + } + Block { + BlockType Reference + Name "Enable2Fcall" + SID "215" + Ports [1, 1] + Position [260, 82, 330, 148] + ZOrder 11 + LibraryVersion "1.66" + SourceBlock "tres_simulink_blockset/Enable2Fcall" + SourceType "" + } + Block { + BlockType SubSystem + Name "Latch1_2" + SID "113" + Ports [1, 1, 0, 1] + Position [320, 239, 385, 281] + ZOrder 13 + TreatAsAtomicUnit on + RequestExecContextInheritance off + System { + Name "Latch1_2" + Location [398, 280, 944, 815] + 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 "In1" + SID "114" + Position [110, 103, 140, 117] + ZOrder -1 + IconDisplay "Port number" + } + Block { + BlockType TriggerPort + Name "function" + SID "115" + Ports [] + Position [210, 15, 230, 35] + ZOrder -2 + TriggerType "function-call" + StatesWhenEnabling "held" + } + Block { + BlockType Outport + Name "Out1" + SID "116" + Position [360, 103, 390, 117] + ZOrder -3 + IconDisplay "Port number" + } + Line { + ZOrder 1 + SrcBlock "In1" + SrcPort 1 + DstBlock "Out1" + DstPort 1 + } + } } Block { BlockType Outport Name "Out1" - SID "116" - Position [360, 103, 390, 117] + SID "220" + Position [470, 253, 500, 267] ZOrder -3 IconDisplay "Port number" } Line { - ZOrder 1 + ZOrder 6 + SrcBlock "Enable2Fcall" + SrcPort 1 + Points [15, 0] + DstBlock "Latch1_2" + DstPort trigger + } + Line { + ZOrder 2 + SrcBlock "Enable" + SrcPort 1 + DstBlock "Enable2Fcall" + DstPort 1 + } + Line { + ZOrder 5 SrcBlock "In1" SrcPort 1 + DstBlock "Latch1_2" + DstPort 1 + } + Line { + ZOrder 7 + SrcBlock "Latch1_2" + SrcPort 1 DstBlock "Out1" DstPort 1 } @@ -1404,57 +1723,148 @@ Model { Block { BlockType SubSystem Name "Latch2_1" - SID "84" - Ports [1, 1, 0, 1] - Position [295, 304, 360, 346] - ZOrder -14 + SID "200" + Ports [1, 1, 1] + Position [320, 304, 385, 346] + ZOrder 32 TreatAsAtomicUnit on RequestExecContextInheritance off System { Name "Latch2_1" - Location [398, 280, 944, 815] + Location [73, 101, 1061, 938] 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] + PaperType "A4" + PaperUnits "centimeters" + TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "In1" - SID "85" - Position [110, 103, 140, 117] + SID "201" + Position [220, 253, 250, 267] ZOrder -1 IconDisplay "Port number" } Block { - BlockType TriggerPort - Name "function" - SID "86" - Ports [] - Position [210, 15, 230, 35] - ZOrder -2 - TriggerType "function-call" - StatesWhenEnabling "held" + BlockType EnablePort + Name "Enable" + SID "202" + Ports [0, 1] + Position [210, 105, 230, 125] + ZOrder 10 + ShowOutputPort on + } + Block { + BlockType Reference + Name "Enable2Fcall" + SID "203" + Ports [1, 1] + Position [260, 82, 330, 148] + ZOrder 11 + LibraryVersion "1.66" + SourceBlock "tres_simulink_blockset/Enable2Fcall" + SourceType "" + } + Block { + BlockType SubSystem + Name "Latch2_1" + SID "84" + Ports [1, 1, 0, 1] + Position [320, 239, 385, 281] + ZOrder 14 + TreatAsAtomicUnit on + RequestExecContextInheritance off + System { + Name "Latch2_1" + Location [398, 280, 944, 815] + 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 "In1" + SID "85" + Position [110, 103, 140, 117] + ZOrder -1 + IconDisplay "Port number" + } + Block { + BlockType TriggerPort + Name "function" + SID "86" + Ports [] + Position [210, 15, 230, 35] + ZOrder -2 + TriggerType "function-call" + StatesWhenEnabling "held" + } + Block { + BlockType Outport + Name "Out1" + SID "87" + Position [360, 103, 390, 117] + ZOrder -3 + IconDisplay "Port number" + } + Line { + ZOrder 1 + SrcBlock "In1" + SrcPort 1 + DstBlock "Out1" + DstPort 1 + } + } } Block { BlockType Outport Name "Out1" - SID "87" - Position [360, 103, 390, 117] + SID "211" + Position [470, 253, 500, 267] ZOrder -3 IconDisplay "Port number" } Line { - ZOrder 1 + ZOrder 6 + SrcBlock "Enable2Fcall" + SrcPort 1 + Points [15, 0] + DstBlock "Latch2_1" + DstPort trigger + } + Line { + ZOrder 2 + SrcBlock "Enable" + SrcPort 1 + DstBlock "Enable2Fcall" + DstPort 1 + } + Line { + ZOrder 7 SrcBlock "In1" SrcPort 1 + DstBlock "Latch2_1" + DstPort 1 + } + Line { + ZOrder 5 + SrcBlock "Latch2_1" + SrcPort 1 DstBlock "Out1" DstPort 1 } @@ -1463,57 +1873,148 @@ Model { Block { BlockType SubSystem Name "Latch2_2" - SID "117" - Ports [1, 1, 0, 1] - Position [295, 489, 360, 531] - ZOrder -14 + SID "230" + Ports [1, 1, 1] + Position [315, 489, 380, 531] + ZOrder 35 TreatAsAtomicUnit on RequestExecContextInheritance off System { Name "Latch2_2" - Location [398, 280, 944, 815] + Location [73, 101, 1061, 938] 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] + PaperType "A4" + PaperUnits "centimeters" + TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "In1" - SID "118" - Position [110, 103, 140, 117] + SID "231" + Position [220, 253, 250, 267] ZOrder -1 IconDisplay "Port number" } Block { - BlockType TriggerPort - Name "function" - SID "119" - Ports [] - Position [210, 15, 230, 35] - ZOrder -2 - TriggerType "function-call" - StatesWhenEnabling "held" + BlockType EnablePort + Name "Enable" + SID "232" + Ports [0, 1] + Position [210, 105, 230, 125] + ZOrder 10 + ShowOutputPort on + } + Block { + BlockType Reference + Name "Enable2Fcall" + SID "233" + Ports [1, 1] + Position [260, 82, 330, 148] + ZOrder 11 + LibraryVersion "1.66" + SourceBlock "tres_simulink_blockset/Enable2Fcall" + SourceType "" + } + Block { + BlockType SubSystem + Name "Latch2_2" + SID "117" + Ports [1, 1, 0, 1] + Position [320, 239, 385, 281] + ZOrder 15 + TreatAsAtomicUnit on + RequestExecContextInheritance off + System { + Name "Latch2_2" + Location [398, 280, 944, 815] + 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 "In1" + SID "118" + Position [110, 103, 140, 117] + ZOrder -1 + IconDisplay "Port number" + } + Block { + BlockType TriggerPort + Name "function" + SID "119" + Ports [] + Position [210, 15, 230, 35] + ZOrder -2 + TriggerType "function-call" + StatesWhenEnabling "held" + } + Block { + BlockType Outport + Name "Out1" + SID "120" + Position [360, 103, 390, 117] + ZOrder -3 + IconDisplay "Port number" + } + Line { + ZOrder 1 + SrcBlock "In1" + SrcPort 1 + DstBlock "Out1" + DstPort 1 + } + } } Block { BlockType Outport Name "Out1" - SID "120" - Position [360, 103, 390, 117] + SID "241" + Position [470, 253, 500, 267] ZOrder -3 IconDisplay "Port number" } Line { - ZOrder 1 + ZOrder 6 + SrcBlock "Enable2Fcall" + SrcPort 1 + Points [15, 0] + DstBlock "Latch2_2" + DstPort trigger + } + Line { + ZOrder 2 + SrcBlock "Enable" + SrcPort 1 + DstBlock "Enable2Fcall" + DstPort 1 + } + Line { + ZOrder 5 SrcBlock "In1" SrcPort 1 + DstBlock "Latch2_2" + DstPort 1 + } + Line { + ZOrder 7 + SrcBlock "Latch2_2" + SrcPort 1 DstBlock "Out1" DstPort 1 } @@ -1522,57 +2023,148 @@ Model { Block { BlockType SubSystem Name "Latch3_2" - SID "133" - Ports [1, 1, 0, 1] - Position [480, 489, 545, 531] - ZOrder -14 + SID "251" + Ports [1, 1, 1] + Position [505, 489, 570, 531] + ZOrder 37 TreatAsAtomicUnit on RequestExecContextInheritance off System { Name "Latch3_2" - Location [398, 280, 944, 815] + Location [73, 101, 1061, 938] 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] + PaperType "A4" + PaperUnits "centimeters" + TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "In1" - SID "134" - Position [110, 103, 140, 117] + SID "252" + Position [220, 253, 250, 267] ZOrder -1 IconDisplay "Port number" } Block { - BlockType TriggerPort - Name "function" - SID "135" - Ports [] - Position [210, 15, 230, 35] - ZOrder -2 - TriggerType "function-call" - StatesWhenEnabling "held" + BlockType EnablePort + Name "Enable" + SID "253" + Ports [0, 1] + Position [210, 105, 230, 125] + ZOrder 10 + ShowOutputPort on + } + Block { + BlockType Reference + Name "Enable2Fcall" + SID "254" + Ports [1, 1] + Position [260, 82, 330, 148] + ZOrder 11 + LibraryVersion "1.66" + SourceBlock "tres_simulink_blockset/Enable2Fcall" + SourceType "" + } + Block { + BlockType SubSystem + Name "Latch3_2" + SID "133" + Ports [1, 1, 0, 1] + Position [320, 239, 385, 281] + ZOrder 17 + TreatAsAtomicUnit on + RequestExecContextInheritance off + System { + Name "Latch3_2" + Location [73, 101, 1061, 938] + 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 "In1" + SID "134" + Position [110, 103, 140, 117] + ZOrder -1 + IconDisplay "Port number" + } + Block { + BlockType TriggerPort + Name "function" + SID "135" + Ports [] + Position [210, 15, 230, 35] + ZOrder -2 + TriggerType "function-call" + StatesWhenEnabling "held" + } + Block { + BlockType Outport + Name "Out1" + SID "136" + Position [360, 103, 390, 117] + ZOrder -3 + IconDisplay "Port number" + } + Line { + ZOrder 1 + SrcBlock "In1" + SrcPort 1 + DstBlock "Out1" + DstPort 1 + } + } } Block { BlockType Outport Name "Out1" - SID "136" - Position [360, 103, 390, 117] + SID "262" + Position [470, 253, 500, 267] ZOrder -3 IconDisplay "Port number" } Line { - ZOrder 1 + ZOrder 6 + SrcBlock "Enable2Fcall" + SrcPort 1 + Points [15, 0] + DstBlock "Latch3_2" + DstPort trigger + } + Line { + ZOrder 2 + SrcBlock "Enable" + SrcPort 1 + DstBlock "Enable2Fcall" + DstPort 1 + } + Line { + ZOrder 7 SrcBlock "In1" SrcPort 1 + DstBlock "Latch3_2" + DstPort 1 + } + Line { + ZOrder 5 + SrcBlock "Latch3_2" + SrcPort 1 DstBlock "Out1" DstPort 1 } @@ -1583,7 +2175,7 @@ Model { Name "Mux" SID "32" Ports [2, 1] - Position [760, 21, 765, 59] + Position [830, 91, 835, 129] ZOrder -16 ShowName off Inputs "2" @@ -1594,7 +2186,7 @@ Model { Name "Mux1" SID "106" Ports [2, 1] - Position [660, 306, 665, 344] + Position [685, 306, 690, 344] ZOrder -16 ShowName off Inputs "2" @@ -1605,7 +2197,7 @@ Model { Name "Mux2" SID "121" Ports [3, 1] - Position [660, 351, 665, 429] + Position [685, 351, 690, 429] ZOrder -16 ShowName off Inputs "3" @@ -1616,13 +2208,13 @@ Model { Name "Scope" SID "88" Ports [2] - Position [760, 291, 875, 424] + Position [785, 291, 900, 424] ZOrder -3 Floating off - Location [236, 99, 1068, 639] - Open on + Location [103, 196, 935, 736] + Open off NumInputPorts "2" - ZoomMode "yonly" + ZoomMode "xonly" List { ListType AxesTitles axes1 "%" @@ -1647,231 +2239,474 @@ Model { Block { BlockType SubSystem Name "Seg1_1" - SID "69" - Ports [0, 1, 0, 1] - Position [15, 304, 80, 346] - ZOrder -14 + SID "172" + Ports [0, 1, 1] + Position [40, 304, 105, 346] + ZOrder 28 TreatAsAtomicUnit on RequestExecContextInheritance off System { Name "Seg1_1" - Location [33, 251, 579, 786] + Location [73, 101, 1061, 938] 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] + PaperType "A4" + PaperUnits "centimeters" + TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { - BlockType TriggerPort - Name "function" - SID "71" - Ports [] - Position [210, 15, 230, 35] + BlockType EnablePort + Name "Enable" + SID "174" + Ports [0, 1] + Position [195, 100, 215, 120] ZOrder -2 - TriggerType "function-call" - StatesWhenEnabling "held" + ShowOutputPort on } Block { - BlockType DigitalClock - Name "Digital Clock" - SID "96" - Position [130, 98, 195, 122] - ZOrder -8 - SampleTime "-1" + BlockType Reference + Name "Enable2Fcall" + SID "176" + Ports [1, 1] + Position [245, 77, 315, 143] + ZOrder 9 + LibraryVersion "1.66" + SourceBlock "tres_simulink_blockset/Enable2Fcall" + SourceType "" } Block { - BlockType Outport + BlockType SubSystem + Name "Seg1_1" + SID "69" + Ports [0, 1, 0, 1] + Position [305, 179, 370, 221] + ZOrder 10 + TreatAsAtomicUnit on + RequestExecContextInheritance off + System { + Name "Seg1_1" + Location [73, 101, 1061, 938] + 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 TriggerPort + Name "function" + SID "71" + Ports [] + Position [210, 15, 230, 35] + ZOrder -2 + TriggerType "function-call" + StatesWhenEnabling "held" + } + Block { + BlockType DigitalClock + Name "Digital Clock" + SID "96" + Position [130, 98, 195, 122] + ZOrder -8 + SampleTime "-1" + } + Block { + BlockType Outport + Name "Out1" + SID "72" + Position [245, 103, 275, 117] + ZOrder -3 + IconDisplay "Port number" + } + Line { + ZOrder 1 + SrcBlock "Digital Clock" + SrcPort 1 + DstBlock "Out1" + DstPort 1 + } + } + } + Block { + BlockType Outport Name "Out1" - SID "72" - Position [245, 103, 275, 117] + SID "175" + Position [405, 193, 435, 207] ZOrder -3 IconDisplay "Port number" } Line { - ZOrder 1 - SrcBlock "Digital Clock" + ZOrder 2 + SrcBlock "Enable2Fcall" + SrcPort 1 + Points [15, 0] + DstBlock "Seg1_1" + DstPort trigger + } + Line { + ZOrder 3 + SrcBlock "Seg1_1" SrcPort 1 DstBlock "Out1" DstPort 1 } + Line { + ZOrder 4 + SrcBlock "Enable" + SrcPort 1 + DstBlock "Enable2Fcall" + DstPort 1 + } } } Block { BlockType SubSystem Name "Seg1_2" - SID "122" - Ports [0, 1, 0, 1] - Position [15, 489, 80, 531] - ZOrder -14 + SID "177" + Ports [0, 1, 1] + Position [40, 489, 105, 531] + ZOrder 29 TreatAsAtomicUnit on RequestExecContextInheritance off System { Name "Seg1_2" - Location [33, 251, 579, 786] + Location [73, 101, 1061, 938] 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] + PaperType "A4" + PaperUnits "centimeters" + TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { - BlockType TriggerPort - Name "function" - SID "123" - Ports [] - Position [210, 15, 230, 35] + BlockType EnablePort + Name "Enable" + SID "178" + Ports [0, 1] + Position [195, 100, 215, 120] ZOrder -2 - TriggerType "function-call" - StatesWhenEnabling "held" + ShowOutputPort on } Block { - BlockType DigitalClock - Name "Digital Clock" - SID "124" - Position [130, 98, 195, 122] - ZOrder -8 - SampleTime "-1" + BlockType Reference + Name "Enable2Fcall" + SID "179" + Ports [1, 1] + Position [245, 77, 315, 143] + ZOrder 9 + LibraryVersion "1.66" + SourceBlock "tres_simulink_blockset/Enable2Fcall" + SourceType "" + } + Block { + BlockType SubSystem + Name "Seg1_2" + SID "122" + Ports [0, 1, 0, 1] + Position [305, 179, 370, 221] + ZOrder 11 + TreatAsAtomicUnit on + RequestExecContextInheritance off + System { + Name "Seg1_2" + Location [33, 251, 579, 786] + 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 TriggerPort + Name "function" + SID "123" + Ports [] + Position [210, 15, 230, 35] + ZOrder -2 + TriggerType "function-call" + StatesWhenEnabling "held" + } + Block { + BlockType DigitalClock + Name "Digital Clock" + SID "124" + Position [130, 98, 195, 122] + ZOrder -8 + SampleTime "-1" + } + Block { + BlockType Outport + Name "Out1" + SID "125" + Position [245, 103, 275, 117] + ZOrder -3 + IconDisplay "Port number" + } + Line { + ZOrder 1 + SrcBlock "Digital Clock" + SrcPort 1 + DstBlock "Out1" + DstPort 1 + } + } } Block { BlockType Outport Name "Out1" - SID "125" - Position [245, 103, 275, 117] + SID "184" + Position [405, 193, 435, 207] ZOrder -3 IconDisplay "Port number" } Line { - ZOrder 1 - SrcBlock "Digital Clock" + ZOrder 4 + SrcBlock "Enable2Fcall" + SrcPort 1 + Points [15, 0] + DstBlock "Seg1_2" + DstPort trigger + } + Line { + ZOrder 3 + SrcBlock "Seg1_2" SrcPort 1 DstBlock "Out1" DstPort 1 } + Line { + ZOrder 5 + SrcBlock "Enable" + SrcPort 1 + DstBlock "Enable2Fcall" + DstPort 1 + } } } Block { BlockType SubSystem Name "Seg2_1" - SID "77" - Ports [1, 1, 0, 1] - Position [200, 304, 265, 346] - ZOrder -14 + SID "191" + Ports [1, 1, 1] + Position [230, 304, 295, 346] + ZOrder 31 TreatAsAtomicUnit on RequestExecContextInheritance off System { Name "Seg2_1" - Location [53, 302, 599, 837] + Location [73, 101, 1061, 938] 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] + PaperType "A4" + PaperUnits "centimeters" + TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "In1" - SID "78" - Position [110, 103, 140, 117] + SID "192" + Position [220, 253, 250, 267] ZOrder -1 IconDisplay "Port number" } Block { - BlockType TriggerPort - Name "function" - SID "79" - Ports [] - Position [210, 15, 230, 35] - ZOrder -2 - TriggerType "function-call" - StatesWhenEnabling "held" + BlockType EnablePort + Name "Enable" + SID "193" + Ports [0, 1] + Position [210, 105, 230, 125] + ZOrder 10 + ShowOutputPort on } Block { - BlockType DigitalClock - Name "Digital Clock" - SID "97" - Position [165, 143, 230, 167] - ZOrder -8 - SampleTime "-1" + BlockType Reference + Name "Enable2Fcall" + SID "194" + Ports [1, 1] + Position [260, 82, 330, 148] + ZOrder 11 + LibraryVersion "1.66" + SourceBlock "tres_simulink_blockset/Enable2Fcall" + SourceType "" } Block { - BlockType Gain - Name "Gain" - SID "99" - Position [175, 95, 205, 125] - ZOrder -8 - Gain "0" - ParamDataTypeStr "Inherit: Inherit via internal rule" - OutDataTypeStr "Inherit: Inherit via internal rule" - SaturateOnIntegerOverflow off - } - Block { - BlockType Sum - Name "Sum" - SID "82" - Ports [2, 1] - Position [250, 100, 270, 120] - ZOrder -18 - ShowName off - IconShape "round" - Inputs "|++" - InputSameDT off - OutDataTypeStr "Inherit: Inherit via internal rule" - SaturateOnIntegerOverflow off + BlockType SubSystem + Name "Seg2_1" + SID "77" + Ports [1, 1, 0, 1] + Position [320, 239, 385, 281] + ZOrder 13 + TreatAsAtomicUnit on + RequestExecContextInheritance off + System { + Name "Seg2_1" + Location [53, 302, 599, 837] + 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 "In1" + SID "78" + Position [110, 103, 140, 117] + ZOrder -1 + IconDisplay "Port number" + } + Block { + BlockType TriggerPort + Name "function" + SID "79" + Ports [] + Position [210, 15, 230, 35] + ZOrder -2 + TriggerType "function-call" + StatesWhenEnabling "held" + } + Block { + BlockType DigitalClock + Name "Digital Clock" + SID "97" + Position [165, 143, 230, 167] + ZOrder -8 + SampleTime "-1" + } + Block { + BlockType Gain + Name "Gain" + SID "99" + Position [175, 95, 205, 125] + ZOrder -8 + Gain "0" + ParamDataTypeStr "Inherit: Inherit via internal rule" + OutDataTypeStr "Inherit: Inherit via internal rule" + SaturateOnIntegerOverflow off + } + Block { + BlockType Sum + Name "Sum" + SID "82" + Ports [2, 1] + Position [250, 100, 270, 120] + ZOrder -18 + ShowName off + IconShape "round" + Inputs "|++" + InputSameDT off + OutDataTypeStr "Inherit: Inherit via internal rule" + SaturateOnIntegerOverflow off + } + Block { + BlockType Outport + Name "Out1" + SID "80" + Position [360, 103, 390, 117] + ZOrder -3 + IconDisplay "Port number" + } + Line { + ZOrder 1 + SrcBlock "Sum" + SrcPort 1 + DstBlock "Out1" + DstPort 1 + } + Line { + ZOrder 2 + SrcBlock "Digital Clock" + SrcPort 1 + Points [25, 0] + DstBlock "Sum" + DstPort 2 + } + Line { + ZOrder 3 + SrcBlock "In1" + SrcPort 1 + DstBlock "Gain" + DstPort 1 + } + Line { + ZOrder 4 + SrcBlock "Gain" + SrcPort 1 + DstBlock "Sum" + DstPort 1 + } + } } Block { BlockType Outport Name "Out1" - SID "80" - Position [360, 103, 390, 117] + SID "199" + Position [470, 253, 500, 267] ZOrder -3 IconDisplay "Port number" } Line { - ZOrder 1 - SrcBlock "Sum" + ZOrder 5 + SrcBlock "Enable2Fcall" SrcPort 1 - DstBlock "Out1" - DstPort 1 + Points [15, 0] + DstBlock "Seg2_1" + DstPort trigger } Line { ZOrder 2 - SrcBlock "Digital Clock" + SrcBlock "Enable" SrcPort 1 - Points [25, 0] - DstBlock "Sum" - DstPort 2 + DstBlock "Enable2Fcall" + DstPort 1 } Line { - ZOrder 3 + ZOrder 7 SrcBlock "In1" SrcPort 1 - DstBlock "Gain" + DstBlock "Seg2_1" DstPort 1 } Line { - ZOrder 4 - SrcBlock "Gain" + ZOrder 6 + SrcBlock "Seg2_1" SrcPort 1 - DstBlock "Sum" + DstBlock "Out1" DstPort 1 } } @@ -1879,113 +2714,204 @@ Model { Block { BlockType SubSystem Name "Seg2_2" - SID "126" - Ports [1, 1, 0, 1] - Position [200, 489, 265, 531] - ZOrder -14 + SID "221" + Ports [1, 1, 1] + Position [230, 489, 295, 531] + ZOrder 34 TreatAsAtomicUnit on RequestExecContextInheritance off System { Name "Seg2_2" - Location [53, 302, 599, 837] + Location [73, 101, 1061, 938] 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] + PaperType "A4" + PaperUnits "centimeters" + TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "In1" - SID "127" - Position [110, 103, 140, 117] + SID "222" + Position [220, 253, 250, 267] ZOrder -1 IconDisplay "Port number" } Block { - BlockType TriggerPort - Name "function" - SID "128" - Ports [] - Position [210, 15, 230, 35] - ZOrder -2 - TriggerType "function-call" - StatesWhenEnabling "held" + BlockType EnablePort + Name "Enable" + SID "223" + Ports [0, 1] + Position [210, 105, 230, 125] + ZOrder 10 + ShowOutputPort on } Block { - BlockType DigitalClock - Name "Digital Clock" - SID "129" - Position [165, 143, 230, 167] - ZOrder -8 - SampleTime "-1" + BlockType Reference + Name "Enable2Fcall" + SID "224" + Ports [1, 1] + Position [260, 82, 330, 148] + ZOrder 11 + LibraryVersion "1.66" + SourceBlock "tres_simulink_blockset/Enable2Fcall" + SourceType "" } Block { - BlockType Gain - Name "Gain" - SID "130" - Position [175, 95, 205, 125] - ZOrder -8 - Gain "0" - ParamDataTypeStr "Inherit: Inherit via internal rule" - OutDataTypeStr "Inherit: Inherit via internal rule" - SaturateOnIntegerOverflow off - } - Block { - BlockType Sum - Name "Sum" - SID "131" - Ports [2, 1] - Position [250, 100, 270, 120] - ZOrder -18 - ShowName off - IconShape "round" - Inputs "|++" - InputSameDT off - OutDataTypeStr "Inherit: Inherit via internal rule" - SaturateOnIntegerOverflow off + BlockType SubSystem + Name "Seg2_2" + SID "126" + Ports [1, 1, 0, 1] + Position [320, 239, 385, 281] + ZOrder 14 + TreatAsAtomicUnit on + RequestExecContextInheritance off + System { + Name "Seg2_2" + Location [53, 302, 599, 837] + 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 "In1" + SID "127" + Position [110, 103, 140, 117] + ZOrder -1 + IconDisplay "Port number" + } + Block { + BlockType TriggerPort + Name "function" + SID "128" + Ports [] + Position [210, 15, 230, 35] + ZOrder -2 + TriggerType "function-call" + StatesWhenEnabling "held" + } + Block { + BlockType DigitalClock + Name "Digital Clock" + SID "129" + Position [165, 143, 230, 167] + ZOrder -8 + SampleTime "-1" + } + Block { + BlockType Gain + Name "Gain" + SID "130" + Position [175, 95, 205, 125] + ZOrder -8 + Gain "0" + ParamDataTypeStr "Inherit: Inherit via internal rule" + OutDataTypeStr "Inherit: Inherit via internal rule" + SaturateOnIntegerOverflow off + } + Block { + BlockType Sum + Name "Sum" + SID "131" + Ports [2, 1] + Position [250, 100, 270, 120] + ZOrder -18 + ShowName off + IconShape "round" + Inputs "|++" + InputSameDT off + OutDataTypeStr "Inherit: Inherit via internal rule" + SaturateOnIntegerOverflow off + } + Block { + BlockType Outport + Name "Out1" + SID "132" + Position [360, 103, 390, 117] + ZOrder -3 + IconDisplay "Port number" + } + Line { + ZOrder 1 + SrcBlock "Sum" + SrcPort 1 + DstBlock "Out1" + DstPort 1 + } + Line { + ZOrder 2 + SrcBlock "Digital Clock" + SrcPort 1 + Points [25, 0] + DstBlock "Sum" + DstPort 2 + } + Line { + ZOrder 3 + SrcBlock "In1" + SrcPort 1 + DstBlock "Gain" + DstPort 1 + } + Line { + ZOrder 4 + SrcBlock "Gain" + SrcPort 1 + DstBlock "Sum" + DstPort 1 + } + } } Block { BlockType Outport Name "Out1" - SID "132" - Position [360, 103, 390, 117] + SID "229" + Position [470, 253, 500, 267] ZOrder -3 IconDisplay "Port number" } Line { - ZOrder 1 - SrcBlock "Sum" + ZOrder 6 + SrcBlock "Enable2Fcall" SrcPort 1 - DstBlock "Out1" - DstPort 1 + Points [15, 0] + DstBlock "Seg2_2" + DstPort trigger } Line { ZOrder 2 - SrcBlock "Digital Clock" + SrcBlock "Enable" SrcPort 1 - Points [25, 0] - DstBlock "Sum" - DstPort 2 + DstBlock "Enable2Fcall" + DstPort 1 } Line { - ZOrder 3 + ZOrder 5 SrcBlock "In1" SrcPort 1 - DstBlock "Gain" + DstBlock "Seg2_2" DstPort 1 } Line { - ZOrder 4 - SrcBlock "Gain" + ZOrder 7 + SrcBlock "Seg2_2" SrcPort 1 - DstBlock "Sum" + DstBlock "Out1" DstPort 1 } } @@ -1993,113 +2919,204 @@ Model { Block { BlockType SubSystem Name "Seg3_2" - SID "137" - Ports [1, 1, 0, 1] - Position [385, 489, 450, 531] - ZOrder -14 + SID "242" + Ports [1, 1, 1] + Position [410, 489, 475, 531] + ZOrder 36 TreatAsAtomicUnit on RequestExecContextInheritance off System { Name "Seg3_2" - Location [53, 302, 599, 837] + Location [73, 101, 1061, 938] 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] + PaperType "A4" + PaperUnits "centimeters" + TiledPaperMargins [1.270000, 1.270000, 1.270000, 1.270000] TiledPageScale 1 ShowPageBoundaries off ZoomFactor "100" Block { BlockType Inport Name "In1" - SID "138" - Position [110, 103, 140, 117] + SID "243" + Position [220, 253, 250, 267] ZOrder -1 IconDisplay "Port number" } Block { - BlockType TriggerPort - Name "function" - SID "139" - Ports [] - Position [210, 15, 230, 35] - ZOrder -2 - TriggerType "function-call" - StatesWhenEnabling "held" + BlockType EnablePort + Name "Enable" + SID "244" + Ports [0, 1] + Position [210, 105, 230, 125] + ZOrder 10 + ShowOutputPort on } Block { - BlockType DigitalClock - Name "Digital Clock" - SID "140" - Position [165, 143, 230, 167] - ZOrder -8 - SampleTime "-1" + BlockType Reference + Name "Enable2Fcall" + SID "245" + Ports [1, 1] + Position [260, 82, 330, 148] + ZOrder 11 + LibraryVersion "1.66" + SourceBlock "tres_simulink_blockset/Enable2Fcall" + SourceType "" } Block { - BlockType Gain - Name "Gain" - SID "141" - Position [175, 95, 205, 125] - ZOrder -8 - Gain "0" - ParamDataTypeStr "Inherit: Inherit via internal rule" - OutDataTypeStr "Inherit: Inherit via internal rule" - SaturateOnIntegerOverflow off - } - Block { - BlockType Sum - Name "Sum" - SID "142" - Ports [2, 1] - Position [250, 100, 270, 120] - ZOrder -18 - ShowName off - IconShape "round" - Inputs "|++" - InputSameDT off - OutDataTypeStr "Inherit: Inherit via internal rule" - SaturateOnIntegerOverflow off + BlockType SubSystem + Name "Seg3_2" + SID "137" + Ports [1, 1, 0, 1] + Position [320, 239, 385, 281] + ZOrder 16 + TreatAsAtomicUnit on + RequestExecContextInheritance off + System { + Name "Seg3_2" + Location [53, 302, 599, 837] + 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 "In1" + SID "138" + Position [110, 103, 140, 117] + ZOrder -1 + IconDisplay "Port number" + } + Block { + BlockType TriggerPort + Name "function" + SID "139" + Ports [] + Position [210, 15, 230, 35] + ZOrder -2 + TriggerType "function-call" + StatesWhenEnabling "held" + } + Block { + BlockType DigitalClock + Name "Digital Clock" + SID "140" + Position [165, 143, 230, 167] + ZOrder -8 + SampleTime "-1" + } + Block { + BlockType Gain + Name "Gain" + SID "141" + Position [175, 95, 205, 125] + ZOrder -8 + Gain "0" + ParamDataTypeStr "Inherit: Inherit via internal rule" + OutDataTypeStr "Inherit: Inherit via internal rule" + SaturateOnIntegerOverflow off + } + Block { + BlockType Sum + Name "Sum" + SID "142" + Ports [2, 1] + Position [250, 100, 270, 120] + ZOrder -18 + ShowName off + IconShape "round" + Inputs "|++" + InputSameDT off + OutDataTypeStr "Inherit: Inherit via internal rule" + SaturateOnIntegerOverflow off + } + Block { + BlockType Outport + Name "Out1" + SID "143" + Position [360, 103, 390, 117] + ZOrder -3 + IconDisplay "Port number" + } + Line { + ZOrder 1 + SrcBlock "Sum" + SrcPort 1 + DstBlock "Out1" + DstPort 1 + } + Line { + ZOrder 2 + SrcBlock "Digital Clock" + SrcPort 1 + Points [25, 0] + DstBlock "Sum" + DstPort 2 + } + Line { + ZOrder 3 + SrcBlock "In1" + SrcPort 1 + DstBlock "Gain" + DstPort 1 + } + Line { + ZOrder 4 + SrcBlock "Gain" + SrcPort 1 + DstBlock "Sum" + DstPort 1 + } + } } Block { BlockType Outport Name "Out1" - SID "143" - Position [360, 103, 390, 117] + SID "250" + Position [470, 253, 500, 267] ZOrder -3 IconDisplay "Port number" } Line { - ZOrder 1 - SrcBlock "Sum" + ZOrder 6 + SrcBlock "Enable2Fcall" SrcPort 1 - DstBlock "Out1" - DstPort 1 + Points [15, 0] + DstBlock "Seg3_2" + DstPort trigger } Line { ZOrder 2 - SrcBlock "Digital Clock" + SrcBlock "Enable" SrcPort 1 - Points [25, 0] - DstBlock "Sum" - DstPort 2 + DstBlock "Enable2Fcall" + DstPort 1 } Line { - ZOrder 3 + ZOrder 7 SrcBlock "In1" SrcPort 1 - DstBlock "Gain" + DstBlock "Seg3_2" DstPort 1 } Line { - ZOrder 4 - SrcBlock "Gain" + ZOrder 5 + SrcBlock "Seg3_2" SrcPort 1 - DstBlock "Sum" + DstBlock "Out1" DstPort 1 } } @@ -2107,12 +3124,12 @@ Model { Block { BlockType Reference Name "Task1" - SID "147" + SID "156" Ports [0, 2, 0, 1] - Position [340, 91, 435, 144] - ZOrder -14 - LibraryVersion "1.45" - SourceBlock "tres_simulink_blockset/Task" + Position [305, 92, 400, 148] + ZOrder 11 + LibraryVersion "1.66" + SourceBlock "tres_simulink_blockset/Task_df" SourceType "" ContentPreviewEnabled off conf_name "t1_instrs" @@ -2120,48 +3137,16 @@ Model { Block { BlockType Reference Name "Task2" - SID "148" + SID "158" Ports [0, 2, 0, 1] - Position [570, 91, 665, 144] - ZOrder -14 - LibraryVersion "1.45" - SourceBlock "tres_simulink_blockset/Task" + Position [545, 92, 640, 148] + ZOrder 14 + LibraryVersion "1.66" + SourceBlock "tres_simulink_blockset/Task_df" SourceType "" ContentPreviewEnabled off conf_name "t2_instrs" } - Block { - BlockType Terminator - Name "Terminator" - SID "46" - Position [535, 65, 555, 85] - ZOrder -5 - BlockMirror on - NamePlacement "alternate" - ShowName off - } - Block { - BlockType Terminator - Name "Terminator1" - SID "47" - Position [450, 65, 470, 85] - ZOrder -5 - ShowName off - } - Line { - ZOrder 1 - SrcBlock "From" - SrcPort 1 - DstBlock "Demux" - DstPort 1 - } - Line { - ZOrder 2 - SrcBlock "From1" - SrcPort 1 - DstBlock "Demux1" - DstPort 1 - } Line { ZOrder 3 SrcBlock "From4" @@ -2191,84 +3176,42 @@ Model { DstPort 1 } Line { - ZOrder 7 - SrcBlock "Kernel" - SrcPort 1 - DstBlock "Goto3" - DstPort 1 - } - Line { - ZOrder 8 - SrcBlock "Demux" - SrcPort 1 - DstBlock "Task1" - DstPort trigger - } - Line { - ZOrder 9 - SrcBlock "Demux" - SrcPort 2 - Points [0, 10] - DstBlock "Terminator1" - DstPort 1 - } - Line { - ZOrder 10 - SrcBlock "Demux1" - SrcPort 2 - DstBlock "Task2" - DstPort trigger - } - Line { - ZOrder 11 - SrcBlock "Demux1" - SrcPort 1 - Points [0, 10] - DstBlock "Terminator" - DstPort 1 - } - Line { - ZOrder 12 + ZOrder 64 SrcBlock "Task2" SrcPort 2 + Points [5, 0; 0, 30] DstBlock "Goto5" DstPort 1 } Line { - ZOrder 13 + ZOrder 72 SrcBlock "Task2" SrcPort 1 - DstBlock "Goto1" + DstBlock "Demux2" DstPort 1 } Line { - ZOrder 14 + ZOrder 59 SrcBlock "Task1" SrcPort 2 + Points [9, 0; 0, 15] DstBlock "Goto8" DstPort 1 } Line { - ZOrder 15 - SrcBlock "Task1" - SrcPort 1 - DstBlock "Goto7" - DstPort 1 - } - Line { - ZOrder 16 + ZOrder 90 SrcBlock "Seg1_1" SrcPort 1 DstBlock "Latch1_1" DstPort 1 } Line { - ZOrder 17 + ZOrder 91 SrcBlock "Latch1_1" SrcPort 1 Points [5, 0] Branch { - ZOrder 18 + ZOrder 92 DstBlock "Seg2_1" DstPort 1 } @@ -2280,58 +3223,19 @@ Model { } } Line { - ZOrder 20 + ZOrder 94 SrcBlock "Seg2_1" SrcPort 1 DstBlock "Latch2_1" DstPort 1 } Line { - ZOrder 21 + ZOrder 95 SrcBlock "Latch2_1" SrcPort 1 DstBlock "Goto9" DstPort 1 } - Line { - ZOrder 22 - SrcBlock "Demux2" - SrcPort 1 - Points [0, 10; -75, 0] - DstBlock "Seg1_1" - DstPort trigger - } - Line { - ZOrder 23 - SrcBlock "From7" - SrcPort 1 - DstBlock "Demux2" - DstPort 1 - } - Line { - ZOrder 24 - SrcBlock "Demux2" - SrcPort 2 - Points [0, 20; -25, 0] - DstBlock "Latch1_1" - DstPort trigger - } - Line { - ZOrder 25 - SrcBlock "Demux2" - SrcPort 3 - Points [0, 20; 30, 0] - DstBlock "Seg2_1" - DstPort trigger - } - Line { - ZOrder 26 - SrcBlock "Demux2" - SrcPort 4 - Points [0, 20; 85, 0] - DstBlock "Latch2_1" - DstPort trigger - } Line { ZOrder 27 SrcBlock "From8" @@ -2354,75 +3258,36 @@ Model { DstPort 1 } Line { - ZOrder 30 + ZOrder 97 SrcBlock "Seg1_2" SrcPort 1 DstBlock "Latch1_2" DstPort 1 } Line { - ZOrder 31 + ZOrder 104 SrcBlock "Seg2_2" SrcPort 1 DstBlock "Latch2_2" DstPort 1 } Line { - ZOrder 32 + ZOrder 102 SrcBlock "Latch2_2" SrcPort 1 - Points [0, 0] + Points [5, 0] Branch { - ZOrder 33 - Points [0, 70] - DstBlock "Goto11" + ZOrder 105 + DstBlock "Seg3_2" DstPort 1 } Branch { - ZOrder 34 - DstBlock "Seg3_2" + ZOrder 33 + Points [0, 70] + DstBlock "Goto11" DstPort 1 } } - Line { - ZOrder 35 - SrcBlock "Demux3" - SrcPort 1 - Points [0, 10; -170, 0] - DstBlock "Seg1_2" - DstPort trigger - } - Line { - ZOrder 36 - SrcBlock "From10" - SrcPort 1 - DstBlock "Demux3" - DstPort 1 - } - Line { - ZOrder 37 - SrcBlock "Demux3" - SrcPort 2 - Points [0, 20; -120, 0] - DstBlock "Latch1_2" - DstPort trigger - } - Line { - ZOrder 38 - SrcBlock "Demux3" - SrcPort 3 - Points [0, 34] - DstBlock "Seg2_2" - DstPort trigger - } - Line { - ZOrder 39 - SrcBlock "Demux3" - SrcPort 4 - Points [0, 34] - DstBlock "Latch2_2" - DstPort trigger - } Line { ZOrder 40 SrcBlock "From11" @@ -2438,52 +3303,36 @@ Model { DstPort 2 } Line { - ZOrder 42 + ZOrder 96 SrcBlock "Latch1_2" SrcPort 1 Points [10, 0] Branch { - ZOrder 43 - Points [0, 70] - DstBlock "Goto10" + ZOrder 99 + DstBlock "Seg2_2" DstPort 1 } Branch { - ZOrder 44 - DstBlock "Seg2_2" + ZOrder 43 + Points [0, 70] + DstBlock "Goto10" DstPort 1 } } Line { - ZOrder 45 + ZOrder 109 SrcBlock "Seg3_2" SrcPort 1 DstBlock "Latch3_2" DstPort 1 } Line { - ZOrder 46 + ZOrder 108 SrcBlock "Latch3_2" SrcPort 1 DstBlock "Goto12" DstPort 1 } - Line { - ZOrder 47 - SrcBlock "Demux3" - SrcPort 5 - Points [0, 15; 40, 0] - DstBlock "Seg3_2" - DstPort trigger - } - Line { - ZOrder 48 - SrcBlock "Demux3" - SrcPort 6 - Points [0, 5; 95, 0] - DstBlock "Latch3_2" - DstPort trigger - } Line { ZOrder 49 SrcBlock "From13" @@ -2505,6 +3354,195 @@ Model { DstBlock "Kernel" DstPort 2 } + Line { + ZOrder 58 + SrcBlock "Task1" + SrcPort 1 + DstBlock "Demux" + DstPort 1 + } + Line { + ZOrder 53 + SrcBlock "Demux" + SrcPort 1 + DstBlock "Goto7" + DstPort 1 + } + Line { + ZOrder 54 + SrcBlock "Demux" + SrcPort 2 + DstBlock "Goto4" + DstPort 1 + } + Line { + ZOrder 55 + SrcBlock "Demux" + SrcPort 3 + DstBlock "Goto13" + DstPort 1 + } + Line { + ZOrder 56 + SrcBlock "Demux" + SrcPort 4 + DstBlock "Goto14" + DstPort 1 + } + Line { + ZOrder 61 + SrcBlock "Kernel" + SrcPort 1 + DstBlock "Demux1" + DstPort 1 + } + Line { + ZOrder 62 + SrcBlock "Demux1" + SrcPort 2 + DstBlock "Goto15" + DstPort 1 + } + Line { + ZOrder 63 + SrcBlock "Demux1" + SrcPort 1 + DstBlock "Goto3" + DstPort 1 + } + Line { + ZOrder 65 + SrcBlock "Demux2" + SrcPort 1 + DstBlock "Goto22" + DstPort 1 + } + Line { + ZOrder 66 + SrcBlock "Demux2" + SrcPort 2 + DstBlock "Goto21" + DstPort 1 + } + Line { + ZOrder 67 + SrcBlock "Demux2" + SrcPort 3 + DstBlock "Goto16" + DstPort 1 + } + Line { + ZOrder 68 + SrcBlock "Demux2" + SrcPort 4 + DstBlock "Goto20" + DstPort 1 + } + Line { + ZOrder 69 + SrcBlock "Demux2" + SrcPort 5 + DstBlock "Goto23" + DstPort 1 + } + Line { + ZOrder 70 + SrcBlock "Demux2" + SrcPort 6 + DstBlock "Goto24" + DstPort 1 + } + Line { + ZOrder 73 + SrcBlock "From1" + SrcPort 1 + DstBlock "Task2" + DstPort trigger + } + Line { + ZOrder 74 + SrcBlock "From" + SrcPort 1 + DstBlock "Task1" + DstPort trigger + } + Line { + ZOrder 89 + SrcBlock "From23" + SrcPort 1 + Points [5, 0] + DstBlock "Seg1_2" + DstPort enable + } + Line { + ZOrder 98 + SrcBlock "From20" + SrcPort 1 + Points [10, 0] + DstBlock "Latch1_2" + DstPort enable + } + Line { + ZOrder 101 + SrcBlock "From21" + SrcPort 1 + Points [10, 0] + DstBlock "Seg2_2" + DstPort enable + } + Line { + ZOrder 103 + SrcBlock "From22" + SrcPort 1 + DstBlock "Latch2_2" + DstPort enable + } + Line { + ZOrder 106 + SrcBlock "From24" + SrcPort 1 + Points [5, 0] + DstBlock "Seg3_2" + DstPort enable + } + Line { + ZOrder 110 + SrcBlock "From25" + SrcPort 1 + Points [5, 0] + DstBlock "Latch3_2" + DstPort enable + } + Line { + ZOrder 146 + SrcBlock "From10" + SrcPort 1 + DstBlock "Seg1_1" + DstPort enable + } + Line { + ZOrder 147 + SrcBlock "From2" + SrcPort 1 + Points [5, 0] + DstBlock "Latch1_1" + DstPort enable + } + Line { + ZOrder 145 + SrcBlock "From3" + SrcPort 1 + Points [5, 0] + DstBlock "Seg2_1" + DstPort enable + } + Line { + ZOrder 144 + SrcBlock "From7" + SrcPort 1 + DstBlock "Latch2_1" + DstPort enable + } } } #Finite State Machines diff --git a/simulink/demos/dummy/tres_dummy_launcher.m b/simulink/demos/dummy/tres_dummy_launcher.m index 83c1753..6c2e4dc 100644 --- a/simulink/demos/dummy/tres_dummy_launcher.m +++ b/simulink/demos/dummy/tres_dummy_launcher.m @@ -1,8 +1,8 @@ % (simple) task set description % -% % type %iat %rdl %ph -task_set_descr = {'PeriodicTask', 20, 20, 0; ... - 'PeriodicTask', 30, 30, 0}; +% % type %name %iat %rdl %ph +task_set_descr = {'PeriodicTask', 'Task1', 20, 20, 0; ... + 'PeriodicTask', 'Task2', 30, 30, 0}; % sequences of pseudo instructions (task codes) t1_instrs = {'fixed(2)', 'fixed(3)'}; diff --git a/simulink/demos/quadrotor/quadrotor_bn_launcher.m b/simulink/demos/quadrotor/quadrotor_bn_launcher.m index 9fa35ae..bc0bdc7 100644 --- a/simulink/demos/quadrotor/quadrotor_bn_launcher.m +++ b/simulink/demos/quadrotor/quadrotor_bn_launcher.m @@ -1,11 +1,11 @@ %% task-set description % task_set_descr = {... -% % type %iat %rdl %ph % prio - 'PeriodicTask', 0.100, 0.100, 0.0, 0; ... % set-points' reading - 'PeriodicTask', 0.020, 0.020, 0.0, 5; ... % attitude control - 'PeriodicTask', 0.050, 0.050, 0.0, 10; ... % yaw control - 'PeriodicTask', 0.025, 0.025, 0.0, 15; ... % altitude control +% % type %name %iat %rdl %ph % prio + 'PeriodicTask', 'Task_spr', 0.100, 0.100, 0.0, 0; ... % set-points' reading + 'PeriodicTask', 'Task_pos', 0.020, 0.020, 0.0, 5; ... % attitude control + 'PeriodicTask', 'Task_yaw', 0.050, 0.050, 0.0, 15; ... % yaw control + 'PeriodicTask', 'Task_alt', 0.025, 0.025, 0.0, 10; ... % altitude control }; %% sequences of pseudo instructions (task codes) @@ -16,5 +16,5 @@ %% launch the simulink model mdl_quadcopter -uiopen('sl_quadcopter_tres_poster.slx',1); +uiopen('sl_quadcopter_tres_poster_df.slx',1); %sim('sl_quadcopter_tres_poster.slx'); diff --git a/simulink/demos/quadrotor/sl_quadcopter_tres_poster_df.slx b/simulink/demos/quadrotor/sl_quadcopter_tres_poster_df.slx new file mode 100644 index 0000000000000000000000000000000000000000..c065db88d9607c2e6dd3ffbe36e9ff87ec0936b3 GIT binary patch literal 41916 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

@}7?I?V=g_#k(J>mP-j6!| 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 literal 0 HcmV?d00001 diff --git a/simulink/demos/test_distributedfuncts/tres_test_distributedfuncts_launcher.m b/simulink/demos/test_distributedfuncts/tres_test_distributedfuncts_launcher.m new file mode 100644 index 0000000..c253586 --- /dev/null +++ b/simulink/demos/test_distributedfuncts/tres_test_distributedfuncts_launcher.m @@ -0,0 +1,13 @@ +% (simple) descriptions of task sets +% +% % type %name %iat %rdl %ph +task_set_descr1 = {'PeriodicTask', 'Task1_1', 10, 10, 0}; +task_set_descr2 = {'PeriodicTask', 'Task1_2', 15, 15, 0}; + +% sequences of pseudo instructions (task codes) +t11_instrs = {'fixed(2)','fixed(4)'}; +t12_instrs = {'fixed(3)'}; + +% launch the simulink model +uiopen('tres_test_distributedfuncts_df.slx',1); +%sim('tres_test_distributedfuncts_df.slx'); diff --git a/simulink/src/common/tres_enabler_df.cpp b/simulink/src/common/tres_enabler_df.cpp new file mode 100644 index 0000000..ceb20b2 --- /dev/null +++ b/simulink/src/common/tres_enabler_df.cpp @@ -0,0 +1,109 @@ +#define S_FUNCTION_NAME tres_enabler_df +#define S_FUNCTION_LEVEL 2 + +#include "simstruc.h" + +/* Function: mdlInitializeSizes =========================================== + * Abstract: + * The sizes information is used by Simulink to determine the S-function + * block's characteristics (number of inputs, outputs, states, etc.). + */ +static void mdlInitializeSizes(SimStruct *S) +{ + // Number of expected parameters + ssSetNumSFcnParams(S, 0); + + // States + ssSetNumContStates(S, 0); + ssSetNumDiscStates(S, 0); + + // I/O ports + if (!ssSetNumInputPorts(S, 1)) return; + ssSetInputPortDirectFeedThrough(S, 0, 1); + ssSetInputPortWidth(S, 0, 1); + if (!ssSetNumOutputPorts(S, 1)) return; + ssSetOutputPortWidth(S, 0, 1); + + ssSetNumDWork(S, 1); // status of flag `request_served' + ssSetDWorkWidth(S, 0, 1); + ssSetDWorkDataType(S, 0, SS_BOOLEAN); + + // Sample times + ssSetNumSampleTimes(S, 1); + ssSetSimStateCompliance(S, USE_DEFAULT_SIM_STATE); +} + +/* Function: mdlInitializeSampleTimes ===================================== + */ +static void mdlInitializeSampleTimes(SimStruct *S) +{ + // Sample times + ssSetSampleTime(S, 0, INHERITED_SAMPLE_TIME); + ssSetOffsetTime(S, 0, FIXED_IN_MINOR_STEP_OFFSET); + + // Initialize the Function Call output + ssSetCallSystemOutput(S,0); +} + +/** + * \brief Initialize discrete state to zero + */ +#define MDL_INITIALIZE_CONDITIONS +static void mdlInitializeConditions(SimStruct *S) +{ + // Set `request_served' to FALSE + boolean_T *request_served = (boolean_T*) ssGetDWork(S,0); + request_served[0] = false; +} + +/* Function: mdlOutputs =================================================== + */ +static void mdlOutputs(SimStruct *S, int_T tid) +{ + // Check if the incoming request of execution is pending (not yet served) + InputRealPtrsType uPtrs = ssGetInputPortRealSignalPtrs(S,0); + boolean_T *request_served = (boolean_T*) ssGetDWork(S,0); + if ( (*uPtrs[0] > 0.0) && (!request_served[0]) ) + { + mexPrintf( "%s, %s, FIRING at time %.16f\n", ssGetPath(S), __FUNCTION__, ssGetT(S) ); + + // Function-call generation + ssCallSystemWithTid(S, 0, tid); + + // Pending request served + request_served[0] = true; + } +} + +/* Function: mdlUpdate ==================================================== + * From Mathworks user's guide: "The method should compute the S-function's + * states at the current time step and store the states in the S-function's + * state vector. __The method can also perform any other tasks that the + * S-function needs to perform at each major time step__. + */ +#define MDL_UPDATE +static void mdlUpdate(SimStruct *S, int_T tid) +{ + // Check if the incoming request has already been served + boolean_T *request_served = (boolean_T*) ssGetDWork(S,0); + if ( request_served[0] ) + { + mexPrintf( "%s, %s, MarkSv.at time %.16f\n", ssGetPath(S), __FUNCTION__, ssGetT(S) ); + + // Reset to initial conditions (mdlInitializeConditions) + request_served[0] = false; + } +} + +/* Function: mdlTerminate ================================================= + * No termination needed, but we are required to have this routine. + */ +static void mdlTerminate(SimStruct *S) +{ +} + +#ifdef MATLAB_MEX_FILE /* Is this file being compiled as a MEX-file? */ +#include "simulink.c" /* MEX-file interface mechanism */ +#else +#include "cg_sfun.h" /* Code generation registration function */ +#endif diff --git a/simulink/src/node/tres_kernel.cpp b/simulink/src/node/tres_kernel.cpp index b64f913..47f02ab 100644 --- a/simulink/src/node/tres_kernel.cpp +++ b/simulink/src/node/tres_kernel.cpp @@ -189,6 +189,7 @@ static void mdlInitializeSampleTimes(SimStruct *S) int_T num_tasks = ssGetOutputPortWidth(S,0); // Initialize the Function Call output + ssSetExplicitFCSSCtrl(S, 1); for (int i = 0; i < num_tasks; i++) ssSetCallSystemOutput(S, i); } @@ -267,6 +268,15 @@ static void mdlInitializeConditions(SimStruct *S) #define MDL_OUTPUT static void mdlOutputs(SimStruct *S, int_T tid) { + // Enable function-call subsystem at start of simulation + if (ssGetT(S) == 0) + { + int_T num_tasks = ssGetOutputPortWidth(S,0); + for (int i = 0; i < num_tasks; i++) + if (!ssEnableSystemWithTid(S, i, tid)) + return; + } + // Get ports access InputRealPtrsType u = ssGetInputPortRealSignalPtrs(S,0); InputBooleanPtrsType aper_reqs = (InputBooleanPtrsType) ssGetInputPortSignalPtrs(S,1); @@ -300,6 +310,8 @@ mexPrintf("\n*** Aperiodic activ(s) at time: %.3f***\n", ssGetT(S)); // FIXME double simulink_time = ssGetT(S); + mexPrintf( "%s, %s, major step at %.16f\n", ssGetPath(S), __FUNCTION__, ssGetT(S) ); + // If the incoming event occurs in the present, i.e., at the current Simulink time if (first_incoming_evt_tick/(time_resolution) - ssGetT(S) <= 0.0) { @@ -371,6 +383,7 @@ mexPrintf("\n*** Aperiodic activ(s) at time: %.3f***\n", ssGetT(S)); // For each Task to trigger, send a Function generation // signal onto the corresponding port + mexPrintf( "%s, %s, FIRING at time %.16f\n", ssGetPath(S), __FUNCTION__, ssGetT(S) ); for (std::vector::iterator port = ports.begin(); port != ports.end(); ++port) @@ -380,15 +393,34 @@ mexPrintf("\n*** Aperiodic activ(s) at time: %.3f***\n", ssGetT(S)); } } -#if 0 /** * \brief Model Update */ #define MDL_UPDATE static void mdlUpdate(SimStruct *S, int_T tid) { + mexPrintf( "%s, %s, major step at %.16f\n", ssGetPath(S), __FUNCTION__, ssGetT(S) ); + + // Get the C++ object back from the pointers vector + tres::Kernel *kern = static_cast(ssGetPWork(S)[0]); + + // Read which tasks have to be triggered + std::vector ports = kern->getPortsToTrigger(); + + // For each Task to trigger, send a Function generation + // signal onto the corresponding port + for (std::vector::iterator port = ports.begin(); + port != ports.end(); + ++port) + { + mexPrintf( "%s, %s, resett. at time %.16f\n", ssGetPath(S), __FUNCTION__, ssGetT(S) ); + ssDisableSystemWithTid(S, *port, tid); + ssEnableSystemWithTid(S, *port, tid); + } + + // Update the internal state of the tres::Kernel struct for next step + kern->clearPortsToTrigger(); } -#endif /** * \brief Detect zero-crossing points diff --git a/simulink/src/node/tres_task_df.cpp b/simulink/src/node/tres_task_df.cpp new file mode 100644 index 0000000..c0089b9 --- /dev/null +++ b/simulink/src/node/tres_task_df.cpp @@ -0,0 +1,198 @@ +/********************************************************************* +* Software License Agreement (BSD License) +* +* Copyright (c) 2014,2015, ReTiS Lab., Scuola Superiore Sant'Anna. +* All rights reserved. +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* * Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* * Redistributions in binary form must reproduce the above +* copyright notice, this list of conditions and the following +* disclaimer in the documentation and/or other materials provided +* with the distribution. +* * Neither the name of the ReTiS Lab. nor the names of its +* contributors may be used to endorse or promote products derived +* from this software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +* POSSIBILITY OF SUCH DAMAGE. +*********************************************************************/ + +/** + * \file tres_task.cpp + */ + +// TODO: license, doxygen +#define S_FUNCTION_NAME tres_task_df +#define S_FUNCTION_LEVEL 2 + +#include +#include +#include +#include +#include "simstruc.h" + +#define INSTRSET_DESCR_VARNAME 0 + +static const mxArray * getTaskInstructionSet(SimStruct *S) +{ + char *bufIsd; // INSTRSET_DESCR_VARNAME + int bufIsdLen; + const mxArray *mxIsd; + + // Get the instruction-set description (Isd) + // (block's callbacks guarantee it's a MATLAB cell array) + bufIsdLen = mxGetN( ssGetSFcnParam(S,INSTRSET_DESCR_VARNAME) )+1; + bufIsd = new char[bufIsdLen]; + mxGetString(ssGetSFcnParam(S,INSTRSET_DESCR_VARNAME), bufIsd, bufIsdLen); + mxIsd = mexGetVariablePtr("base", bufIsd); + delete bufIsd; + + return mxIsd; +} + +/* Function: mdlInitializeSizes =========================================== + * Abstract: + * The sizes information is used by Simulink to determine the S-function + * block's characteristics (number of inputs, outputs, states, etc.). + */ +static void mdlInitializeSizes(SimStruct *S) +{ + int num_segments; + + ssSetNumSFcnParams(S, 1); /* Number of expected parameters */ + + // Get the number of segments + num_segments = mxGetNumberOfElements(getTaskInstructionSet(S)); + + ssSetNumContStates(S, 0); + ssSetNumDiscStates(S, 0); + + if (!ssSetNumInputPorts(S, 0)) return; + + if (!ssSetNumOutputPorts(S, 2)) return; + ssSetOutputPortWidth(S, 0, 2*num_segments); + ssSetOutputPortWidth(S, 1, 1); + + ssSetNumSampleTimes(S, 1); + + ssSetNumPWork(S, 1); // tres::Task (set in mdlInitializeConditions()) + ssSetNumRWork(S, 1); // store the value to be issued on the data-flow + // port #0 (enable signal for segments) + ssSetSimStateCompliance(S, USE_DEFAULT_SIM_STATE); +} + +/* Function: mdlInitializeSampleTimes ===================================== + */ +static void mdlInitializeSampleTimes(SimStruct *S) +{ + // Sample times + ssSetSampleTime(S, 0, INHERITED_SAMPLE_TIME); + ssSetOffsetTime(S, 0, FIXED_IN_MINOR_STEP_OFFSET); +} + +#define MDL_INITIALIZE_CONDITIONS +/* Function: mdlInitializeConditions ====================================== + * Abstract: + * Initialize discrete state to zero. + */ +static void mdlInitializeConditions(SimStruct *S) +{ + const mxArray *mxIsd; + int num_segments; + std::vector instr_list; + + // Get the number of segments + mxIsd = getTaskInstructionSet(S); + num_segments = mxGetNumberOfElements(mxIsd); + + // Construct the sequence of pseudo instructions + // Note that the consistency of the task-code description (cell array) + // has already been checked in get_sfun_param() + for (int index = 0; index < num_segments; index++) + { + instr_list.push_back( std::string(mxArrayToString(mxGetCell(mxIsd, index))) ); + } + + // Create a new tres::Task instance from the task-code description vector + tres::Task *task = new tres::Task(instr_list); + + // Save the new C++ object for later usage (mdlOutputs()) + ssGetPWork(S)[0] = task; + + // Initialize the (1st) standard output port (enable signal for segments) + real_T *y = ssGetOutputPortRealSignal(S,0); + for (int i = 0; i < num_segments; i++) + y[i] = 0.0; + + // Initial the 2nd (real) Output + y = ssGetOutputPortRealSignal(S,1); +#ifdef TRES_DEBUG_1 + mexPrintf("%s: task->ni_duration is %.3f\n", __FILE__, task->getSegmentDuration()); +#endif + y[0] = task->getSegmentDuration(); +} + +/* Function: mdlOutputs =================================================== + */ +static void mdlOutputs(SimStruct *S, int_T tid) +{ + // Get the C++ object back from the pointers vector + tres::Task *task = static_cast(ssGetPWork(S)[0]); + + // Process the current segment + int subsys_idx = task->processSegment(); + + // Write (duration of next_instr) + real_T *y = ssGetOutputPortRealSignal(S,1); + y[0] = task->getSegmentDuration(); + + // Issue the enable signal (subsys_act_idx) + y = ssGetOutputPortRealSignal(S,0); + //mexPrintf( "%s, %s, At time %.16f\n", ssGetPath(S), __FUNCTION__, ssGetT(S) ); + if (subsys_idx == 0) + y[0] = 1.0; + else + { + y[2*subsys_idx - 1] = 1.0; + if (subsys_idx < task->getNumberOfSegments()) + y[2*subsys_idx] = 1.0; + } + +#ifdef TRES_DEBUG_1 + mexPrintf("%s: activated segment #%d task->ni_duration is %.3f\n", __FILE__, + subsys_idx, task->getSegmentDuration()); + +#endif +} + +/* Function: mdlTerminate ================================================= + * No termination needed, but we are required to have this routine. + */ +static void mdlTerminate(SimStruct *S) +{ + // Retrieve and destroy C++ object + tres::Task *task = static_cast(ssGetPWork(S)[0]); + delete task; +} + +#ifdef MATLAB_MEX_FILE /* Is this file being compiled as a MEX-file? */ +#include "simulink.c" /* MEX-file interface mechanism */ +#else +#include "cg_sfun.h" /* Code generation registration function */ +#endif +