redshift 1.3.15

Sign up to get free protection for your applications and to get access to all the features.
Files changed (107) hide show
  1. data/.gitignore +8 -0
  2. data/README +5 -0
  3. data/RELEASE-NOTES +455 -0
  4. data/TODO +431 -0
  5. data/bench/alg-state.rb +61 -0
  6. data/bench/bench +26 -0
  7. data/bench/bench.rb +10 -0
  8. data/bench/continuous.rb +76 -0
  9. data/bench/diff-bench +86 -0
  10. data/bench/discrete.rb +101 -0
  11. data/bench/euler.rb +50 -0
  12. data/bench/formula.rb +78 -0
  13. data/bench/half-strict.rb +103 -0
  14. data/bench/inertness.rb +116 -0
  15. data/bench/queue.rb +92 -0
  16. data/bench/run +66 -0
  17. data/bench/simple.rb +74 -0
  18. data/bench/strictness.rb +86 -0
  19. data/examples/ball-tkar.rb +72 -0
  20. data/examples/ball.rb +123 -0
  21. data/examples/collide.rb +70 -0
  22. data/examples/connect-parallel.rb +48 -0
  23. data/examples/connect.rb +109 -0
  24. data/examples/constants.rb +27 -0
  25. data/examples/delay.rb +80 -0
  26. data/examples/derivative.rb +77 -0
  27. data/examples/euler.rb +46 -0
  28. data/examples/external-lib.rb +33 -0
  29. data/examples/guard-debugger.rb +77 -0
  30. data/examples/lotka-volterra.rb +33 -0
  31. data/examples/persist-ball.rb +68 -0
  32. data/examples/pid.rb +87 -0
  33. data/examples/ports.rb +60 -0
  34. data/examples/queue.rb +56 -0
  35. data/examples/queue2.rb +98 -0
  36. data/examples/reset-with-event-val.rb +28 -0
  37. data/examples/scheduler.rb +104 -0
  38. data/examples/set-dest.rb +23 -0
  39. data/examples/simulink/README +1 -0
  40. data/examples/simulink/delay.mdl +827 -0
  41. data/examples/simulink/derivative.mdl +655 -0
  42. data/examples/step-discrete-profiler.rb +103 -0
  43. data/examples/subsystem.rb +109 -0
  44. data/examples/sync-deadlock.rb +32 -0
  45. data/examples/sync-queue.rb +91 -0
  46. data/examples/sync-retry.rb +20 -0
  47. data/examples/sync.rb +51 -0
  48. data/examples/thermostat.rb +53 -0
  49. data/examples/zeno.rb +53 -0
  50. data/lib/accessible-index.rb +47 -0
  51. data/lib/redshift.rb +1 -0
  52. data/lib/redshift/component.rb +412 -0
  53. data/lib/redshift/meta.rb +183 -0
  54. data/lib/redshift/mixins/zeno-debugger.rb +69 -0
  55. data/lib/redshift/port.rb +57 -0
  56. data/lib/redshift/queue.rb +104 -0
  57. data/lib/redshift/redshift.rb +111 -0
  58. data/lib/redshift/state.rb +31 -0
  59. data/lib/redshift/syntax.rb +558 -0
  60. data/lib/redshift/target/c.rb +37 -0
  61. data/lib/redshift/target/c/component-gen.rb +1303 -0
  62. data/lib/redshift/target/c/flow-gen.rb +325 -0
  63. data/lib/redshift/target/c/flow/algebraic.rb +85 -0
  64. data/lib/redshift/target/c/flow/buffer.rb +74 -0
  65. data/lib/redshift/target/c/flow/delay.rb +203 -0
  66. data/lib/redshift/target/c/flow/derivative.rb +101 -0
  67. data/lib/redshift/target/c/flow/euler.rb +67 -0
  68. data/lib/redshift/target/c/flow/expr.rb +113 -0
  69. data/lib/redshift/target/c/flow/rk4.rb +80 -0
  70. data/lib/redshift/target/c/library.rb +85 -0
  71. data/lib/redshift/target/c/world-gen.rb +1370 -0
  72. data/lib/redshift/target/spec.rb +34 -0
  73. data/lib/redshift/world.rb +300 -0
  74. data/rakefile +37 -0
  75. data/test/test.rb +52 -0
  76. data/test/test_buffer.rb +58 -0
  77. data/test/test_connect.rb +242 -0
  78. data/test/test_connect_parallel.rb +47 -0
  79. data/test/test_connect_strict.rb +135 -0
  80. data/test/test_constant.rb +74 -0
  81. data/test/test_delay.rb +145 -0
  82. data/test/test_derivative.rb +48 -0
  83. data/test/test_discrete.rb +592 -0
  84. data/test/test_discrete_isolated.rb +92 -0
  85. data/test/test_exit.rb +59 -0
  86. data/test/test_flow.rb +200 -0
  87. data/test/test_flow_link.rb +288 -0
  88. data/test/test_flow_sub.rb +100 -0
  89. data/test/test_flow_trans.rb +292 -0
  90. data/test/test_inherit.rb +127 -0
  91. data/test/test_inherit_event.rb +74 -0
  92. data/test/test_inherit_flow.rb +139 -0
  93. data/test/test_inherit_link.rb +65 -0
  94. data/test/test_inherit_setup.rb +56 -0
  95. data/test/test_inherit_state.rb +66 -0
  96. data/test/test_inherit_transition.rb +168 -0
  97. data/test/test_numerics.rb +34 -0
  98. data/test/test_queue.rb +90 -0
  99. data/test/test_queue_alone.rb +115 -0
  100. data/test/test_reset.rb +209 -0
  101. data/test/test_setup.rb +119 -0
  102. data/test/test_strict_continuity.rb +410 -0
  103. data/test/test_strict_reset_error.rb +30 -0
  104. data/test/test_strictness_error.rb +32 -0
  105. data/test/test_sync.rb +185 -0
  106. data/test/test_world.rb +328 -0
  107. metadata +204 -0
data/examples/queue.rb ADDED
@@ -0,0 +1,56 @@
1
+ # Example of some basic features of queues. Uses strings as messages
2
+ # just to make the matching examples simple. See also queue2.rb.
3
+
4
+ require 'redshift'
5
+
6
+ include RedShift
7
+
8
+ class Receiver < Component
9
+ queue :q
10
+
11
+ transition do
12
+ wait :q => /time is now 2/
13
+ action do
14
+ msg = q.pop
15
+ puts "SPECIAL CASE! popped #{msg.inspect} at time #{world.clock}"
16
+ end
17
+ end
18
+
19
+ transition do
20
+ wait :q => [/time is/, /3/]
21
+ action do
22
+ msg = q.pop
23
+ puts "CONJUNCTION! popped #{msg.inspect} at time #{world.clock}"
24
+ end
25
+ end
26
+
27
+ transition do
28
+ wait :q => /time is/
29
+ action do
30
+ msg = q.pop
31
+ puts "popped #{msg.inspect} at time #{world.clock}"
32
+ end
33
+ end
34
+ end
35
+
36
+ class Sender < Component
37
+ link :receiver
38
+ flow {diff "t' = 1"}
39
+
40
+ transition do
41
+ guard "t>1"
42
+ reset :t => 0
43
+ action do
44
+ msg = "time is now #{world.clock}"
45
+ puts "pushed #{msg.inspect}"
46
+ receiver.q << msg
47
+ end
48
+ end
49
+ end
50
+
51
+ w = World.new
52
+ receiver = w.create Receiver
53
+ sender = w.create Sender
54
+ sender.receiver = receiver
55
+
56
+ w.evolve 5
@@ -0,0 +1,98 @@
1
+ # More complex example of queues, showing multiple queues, multiple
2
+ # simultaneous entries in a queue, and several kinds of matching.
3
+
4
+ require 'redshift'
5
+
6
+ include RedShift
7
+
8
+ class MyMessage
9
+ attr_accessor :foo
10
+ def initialize foo
11
+ @foo = foo
12
+ end
13
+ end
14
+ class OtherMessage; end
15
+
16
+ class Receiver < Component
17
+ queue :q1, :q2 # same as attr_reader :q, plus initialize q to a new queue
18
+
19
+ transition do
20
+ # is there at least one instance of MyMessage on the *head* of the queue,
21
+ # with foo=="bar"?
22
+ wait :q1 => [MyMessage, proc {|m| m.foo == "bar"}]
23
+ action do
24
+ puts "messages received -- q1: #{q1.pop.inspect}"
25
+ end
26
+ end
27
+
28
+ transition do
29
+ # is there at least one instance of MyMessage on the *head* of the queue?
30
+ # and also OtherMessage on q2?
31
+ wait :q1 => MyMessage, :q2 => OtherMessage
32
+ action do
33
+ puts "messages received -- q1: #{q1.pop.inspect}, q2: #{q2.pop.inspect}"
34
+ end
35
+ end
36
+
37
+ transition do
38
+ # wait for numbers, explicitly handling the case of multiple
39
+ # objects (assume all are numeric) pushed into the queue
40
+ # simultaneously
41
+ wait :q1 => Numeric
42
+ action do
43
+ x = q1.pop
44
+ case x
45
+ when SimultaneousQueueEntries
46
+ x = x.max # choose the largest, and ignore the smaller, arbitrarily
47
+ end
48
+ puts "max x = #{x}"
49
+ end
50
+ end
51
+
52
+ transition do
53
+ wait :q1 # is there *anything* on the head of the queue?
54
+ # note that this guard is checked after the MyMessage guard, so
55
+ # this transition functions as an "else" clause
56
+ action do
57
+ p q1.pop
58
+ end
59
+ end
60
+ end
61
+
62
+ class Sender < Component
63
+ link :r => Receiver
64
+ state :S1, :S2, :S3, :S4
65
+
66
+ transition Enter => S1 do
67
+ action do
68
+ r.q1 << MyMessage.new("bar")
69
+ end
70
+ end
71
+
72
+ transition S1 => S2 do
73
+ action do
74
+ r.q1 << MyMessage.new("zzz")
75
+ r.q2 << OtherMessage.new
76
+ end
77
+ end
78
+
79
+ transition S2 => S3 do
80
+ action do
81
+ r.q1 << 1.2
82
+ r.q1 << 42.0
83
+ end
84
+ end
85
+
86
+ transition S3 => S4 do
87
+ action do
88
+ r.q1 << {"foo"=>[:bar, self.inspect, self, r.q1]} # some weird hash
89
+ end
90
+ end
91
+ end
92
+
93
+ w = World.new
94
+ w.create Sender do |s|
95
+ s.r = w.create(Receiver)
96
+ end
97
+
98
+ w.evolve 1
@@ -0,0 +1,28 @@
1
+ # Shows how to use events to pass values among synced
2
+ # transitions. Note that event expressions are evaled
3
+ # *before* reset expressions are evaled, so that the
4
+ # the latter may reference the former.
5
+
6
+ require 'redshift'
7
+ include RedShift
8
+
9
+ class Emitter < Component
10
+ transition Enter => Exit do
11
+ event :e => 42.0
12
+ end
13
+ end
14
+
15
+ class Receiver < Component
16
+ link :c => Emitter
17
+ constant :result
18
+ transition Enter => Exit do
19
+ sync :c => :e
20
+ event :e => 0.42
21
+ reset :result => "e + c.e"
22
+ end
23
+ end
24
+
25
+ w = World.new
26
+ r = w.create(Receiver) {|r| r.c = r.create(Emitter)}
27
+ w.run 1
28
+ p r.result
@@ -0,0 +1,104 @@
1
+ # efficient and convenient way to manage timed events
2
+
3
+ require 'redshift'
4
+
5
+ class Scheduler < RedShift::Component
6
+ queue :request_queue
7
+ continuous :time
8
+ constant :next_wakeup_time
9
+
10
+ default do
11
+ @schedule = [] ## could use rbtree for efficient sorted list
12
+ self.next_wakeup_time = RedShift::Infinity
13
+ end
14
+
15
+ flow do
16
+ diff " time' = 1 "
17
+ end
18
+
19
+ class Request
20
+ include Comparable
21
+ attr_accessor :time, :queue, :message
22
+ def <=>(other)
23
+ self.time <=> other.time
24
+ end
25
+ def initialize time, queue, message
26
+ @time, @queue, @message = time, queue, message
27
+ end
28
+ end
29
+
30
+ EPSILON = 1E-12 # float fuzziness, if timestep is 0.1, for example
31
+
32
+ # Returns the request object for use with unschedule
33
+ def schedule_message delta_t, queue, message
34
+ req = Request.new(time + delta_t - EPSILON, queue, message)
35
+ request_queue << req
36
+ req
37
+ end
38
+
39
+ def unschedule req
40
+ @schedule.delete req
41
+ end
42
+
43
+ transition do
44
+ wait :request_queue
45
+ action do
46
+ case reqs = request_queue.pop
47
+ when RedShift::SimultaneousQueueEntries
48
+ reqs.each do |req|
49
+ @schedule << req
50
+ end
51
+ else
52
+ @schedule << reqs
53
+ end
54
+
55
+ @schedule.sort!
56
+ self.next_wakeup_time = @schedule.first.time
57
+ end
58
+ end
59
+
60
+ transition do
61
+ guard "time >= next_wakeup_time"
62
+ action do
63
+ while (req = @schedule.first and req.time <= time)
64
+ @schedule.shift
65
+ req.queue << req.message
66
+ end
67
+
68
+ if (req = @schedule.first)
69
+ self.next_wakeup_time = req.time
70
+ else
71
+ self.next_wakeup_time = RedShift::Infinity
72
+ end
73
+ end
74
+ end
75
+ end
76
+
77
+ class Client < RedShift::Component
78
+ queue :wakeup
79
+ link :scheduler
80
+ state :Waiting
81
+ constant :delay => 4.2
82
+
83
+ transition Enter => Waiting do
84
+ action do
85
+ puts "scheduling message at #{world.clock} sec"
86
+ scheduler.schedule_message delay, wakeup, "Time to wake up, snoozebrain!"
87
+ end
88
+ end
89
+
90
+ transition Waiting => Exit do
91
+ wait :wakeup
92
+ action do
93
+ msg = wakeup.pop
94
+ puts "wake up received at #{world.clock} sec: #{msg.inspect}"
95
+ end
96
+ end
97
+ end
98
+
99
+ w = RedShift::World.new
100
+ s = w.create Scheduler
101
+ c = w.create Client
102
+ c.scheduler = s
103
+
104
+ w.evolve 10
@@ -0,0 +1,23 @@
1
+ # Assigning to comp.dest can change the destination of
2
+ # the current transition.
3
+
4
+ require 'redshift'
5
+
6
+ class C < RedShift::Component
7
+ state :S
8
+ transition Enter => Exit do
9
+ action do
10
+ puts "changing dest from Exit to S"
11
+ self.dest = S
12
+ end
13
+ end
14
+ transition S => Exit do
15
+ action do
16
+ puts "S=>Exit"
17
+ end
18
+ end
19
+ end
20
+
21
+ w = RedShift::World.new
22
+ w.create C
23
+ w.run 1
@@ -0,0 +1 @@
1
+ Models that are comparable to redshift examples in the parent dir.
@@ -0,0 +1,827 @@
1
+ Model {
2
+ Name "delay"
3
+ Version 6.5
4
+ MdlSubVersion 0
5
+ GraphicalInterface {
6
+ NumRootInports 0
7
+ NumRootOutports 0
8
+ ParameterArgumentNames ""
9
+ ComputedModelVersion "1.4"
10
+ NumModelReferences 0
11
+ NumTestPointedSignals 0
12
+ }
13
+ SavedCharacterEncoding "windows-1252"
14
+ SaveDefaultBlockParams on
15
+ SampleTimeColors off
16
+ LibraryLinkDisplay "none"
17
+ WideLines off
18
+ ShowLineDimensions off
19
+ ShowPortDataTypes off
20
+ ShowLoopsOnError on
21
+ IgnoreBidirectionalLines off
22
+ ShowStorageClass off
23
+ ShowTestPointIcons on
24
+ ShowViewerIcons on
25
+ SortedOrder off
26
+ ExecutionContextIcon off
27
+ ShowLinearizationAnnotations on
28
+ ScopeRefreshTime 0.035000
29
+ OverrideScopeRefreshTime on
30
+ DisableAllScopes off
31
+ DataTypeOverride "UseLocalSettings"
32
+ MinMaxOverflowLogging "UseLocalSettings"
33
+ MinMaxOverflowArchiveMode "Overwrite"
34
+ BlockNameDataTip off
35
+ BlockParametersDataTip off
36
+ BlockDescriptionStringDataTip off
37
+ ToolBar on
38
+ StatusBar on
39
+ BrowserShowLibraryLinks off
40
+ BrowserLookUnderMasks off
41
+ Created "Sat Mar 15 23:25:09 2008"
42
+ Creator "vjoel"
43
+ UpdateHistory "UpdateHistoryNever"
44
+ ModifiedByFormat "%<Auto>"
45
+ LastModifiedBy "vjoel"
46
+ ModifiedDateFormat "%<Auto>"
47
+ LastModifiedDate "Sun Mar 16 00:04:55 2008"
48
+ ModelVersionFormat "1.%<AutoIncrement:4>"
49
+ ConfigurationManager "None"
50
+ LinearizationMsg "none"
51
+ Profile off
52
+ ParamWorkspaceSource "MATLABWorkspace"
53
+ AccelSystemTargetFile "accel.tlc"
54
+ AccelTemplateMakefile "accel_default_tmf"
55
+ AccelMakeCommand "make_rtw"
56
+ TryForcingSFcnDF off
57
+ RecordCoverage off
58
+ CovPath "/"
59
+ CovSaveName "covdata"
60
+ CovMetricSettings "dw"
61
+ CovNameIncrementing off
62
+ CovHtmlReporting on
63
+ covSaveCumulativeToWorkspaceVar on
64
+ CovSaveSingleToWorkspaceVar on
65
+ CovCumulativeVarName "covCumulativeData"
66
+ CovCumulativeReport off
67
+ CovReportOnPause on
68
+ ExtModeBatchMode off
69
+ ExtModeEnableFloating on
70
+ ExtModeTrigType "manual"
71
+ ExtModeTrigMode "normal"
72
+ ExtModeTrigPort "1"
73
+ ExtModeTrigElement "any"
74
+ ExtModeTrigDuration 1000
75
+ ExtModeTrigDurationFloating "auto"
76
+ ExtModeTrigHoldOff 0
77
+ ExtModeTrigDelay 0
78
+ ExtModeTrigDirection "rising"
79
+ ExtModeTrigLevel 0
80
+ ExtModeArchiveMode "off"
81
+ ExtModeAutoIncOneShot off
82
+ ExtModeIncDirWhenArm off
83
+ ExtModeAddSuffixToVar off
84
+ ExtModeWriteAllDataToWs off
85
+ ExtModeArmWhenConnect on
86
+ ExtModeSkipDownloadWhenConnect off
87
+ ExtModeLogAll on
88
+ ExtModeAutoUpdateStatusClock on
89
+ BufferReuse on
90
+ ProdHWDeviceType "32-bit Generic"
91
+ ShowModelReferenceBlockVersion off
92
+ ShowModelReferenceBlockIO off
93
+ Array {
94
+ Type "Handle"
95
+ Dimension 1
96
+ Simulink.ConfigSet {
97
+ $ObjectID 1
98
+ Version "1.2.0"
99
+ Array {
100
+ Type "Handle"
101
+ Dimension 7
102
+ Simulink.SolverCC {
103
+ $ObjectID 2
104
+ Version "1.2.0"
105
+ StartTime "0.0"
106
+ StopTime "10.0"
107
+ AbsTol "auto"
108
+ FixedStep "0.1"
109
+ InitialStep "auto"
110
+ MaxNumMinSteps "-1"
111
+ MaxOrder 5
112
+ ConsecutiveZCsStepRelTol "10*128*eps"
113
+ MaxConsecutiveZCs "1000"
114
+ ExtrapolationOrder 4
115
+ NumberNewtonIterations 1
116
+ MaxStep "auto"
117
+ MinStep "auto"
118
+ MaxConsecutiveMinStep "1"
119
+ RelTol "1e-3"
120
+ SolverMode "Auto"
121
+ Solver "ode4"
122
+ SolverName "ode4"
123
+ ZeroCrossControl "UseLocalSettings"
124
+ AlgebraicLoopSolver "TrustRegion"
125
+ SolverResetMethod "Fast"
126
+ PositivePriorityOrder off
127
+ AutoInsertRateTranBlk off
128
+ SampleTimeConstraint "Unconstrained"
129
+ RateTranMode "Deterministic"
130
+ }
131
+ Simulink.DataIOCC {
132
+ $ObjectID 3
133
+ Version "1.2.0"
134
+ Decimation "1"
135
+ ExternalInput "[t, u]"
136
+ FinalStateName "xFinal"
137
+ InitialState "xInitial"
138
+ LimitDataPoints on
139
+ MaxDataPoints "1000"
140
+ LoadExternalInput off
141
+ LoadInitialState off
142
+ SaveFinalState off
143
+ SaveFormat "Array"
144
+ SaveOutput on
145
+ SaveState off
146
+ SignalLogging on
147
+ InspectSignalLogs off
148
+ SaveTime on
149
+ StateSaveName "xout"
150
+ TimeSaveName "tout"
151
+ OutputSaveName "yout"
152
+ SignalLoggingName "logsout"
153
+ OutputOption "RefineOutputTimes"
154
+ OutputTimes "[]"
155
+ Refine "1"
156
+ }
157
+ Simulink.OptimizationCC {
158
+ $ObjectID 4
159
+ Array {
160
+ Type "Cell"
161
+ Dimension 5
162
+ Cell "ZeroExternalMemoryAtStartup"
163
+ Cell "ZeroInternalMemoryAtStartup"
164
+ Cell "InitFltsAndDblsToZero"
165
+ Cell "OptimizeModelRefInitCode"
166
+ Cell "NoFixptDivByZeroProtection"
167
+ PropName "DisabledProps"
168
+ }
169
+ Version "1.2.0"
170
+ BlockReduction on
171
+ BooleanDataType on
172
+ ConditionallyExecuteInputs on
173
+ InlineParams off
174
+ InlineInvariantSignals off
175
+ OptimizeBlockIOStorage on
176
+ BufferReuse on
177
+ EnforceIntegerDowncast on
178
+ ExpressionFolding on
179
+ FoldNonRolledExpr on
180
+ LocalBlockOutputs on
181
+ ParameterPooling on
182
+ RollThreshold 5
183
+ SystemCodeInlineAuto off
184
+ StateBitsets off
185
+ DataBitsets off
186
+ UseTempVars off
187
+ ZeroExternalMemoryAtStartup on
188
+ ZeroInternalMemoryAtStartup on
189
+ InitFltsAndDblsToZero on
190
+ NoFixptDivByZeroProtection off
191
+ EfficientFloat2IntCast off
192
+ OptimizeModelRefInitCode off
193
+ LifeSpan "inf"
194
+ BufferReusableBoundary on
195
+ }
196
+ Simulink.DebuggingCC {
197
+ $ObjectID 5
198
+ Version "1.2.0"
199
+ RTPrefix "error"
200
+ ConsistencyChecking "none"
201
+ ArrayBoundsChecking "none"
202
+ SignalInfNanChecking "none"
203
+ ReadBeforeWriteMsg "UseLocalSettings"
204
+ WriteAfterWriteMsg "UseLocalSettings"
205
+ WriteAfterReadMsg "UseLocalSettings"
206
+ AlgebraicLoopMsg "warning"
207
+ ArtificialAlgebraicLoopMsg "warning"
208
+ CheckSSInitialOutputMsg on
209
+ CheckExecutionContextPreStartOutputMsg off
210
+ CheckExecutionContextRuntimeOutputMsg off
211
+ SignalResolutionControl "TryResolveAllWithWarning"
212
+ BlockPriorityViolationMsg "warning"
213
+ MinStepSizeMsg "warning"
214
+ TimeAdjustmentMsg "none"
215
+ MaxConsecutiveZCsMsg "error"
216
+ SolverPrmCheckMsg "warning"
217
+ InheritedTsInSrcMsg "warning"
218
+ DiscreteInheritContinuousMsg "warning"
219
+ MultiTaskDSMMsg "error"
220
+ MultiTaskCondExecSysMsg "error"
221
+ MultiTaskRateTransMsg "error"
222
+ SingleTaskRateTransMsg "none"
223
+ TasksWithSamePriorityMsg "warning"
224
+ SigSpecEnsureSampleTimeMsg "warning"
225
+ CheckMatrixSingularityMsg "none"
226
+ IntegerOverflowMsg "warning"
227
+ Int32ToFloatConvMsg "warning"
228
+ ParameterDowncastMsg "error"
229
+ ParameterOverflowMsg "error"
230
+ ParameterUnderflowMsg "none"
231
+ ParameterPrecisionLossMsg "warning"
232
+ UnderSpecifiedDataTypeMsg "none"
233
+ UnnecessaryDatatypeConvMsg "none"
234
+ VectorMatrixConversionMsg "none"
235
+ InvalidFcnCallConnMsg "error"
236
+ FcnCallInpInsideContextMsg "Use local settings"
237
+ SignalLabelMismatchMsg "none"
238
+ UnconnectedInputMsg "warning"
239
+ UnconnectedOutputMsg "warning"
240
+ UnconnectedLineMsg "warning"
241
+ SFcnCompatibilityMsg "none"
242
+ UniqueDataStoreMsg "none"
243
+ BusObjectLabelMismatch "warning"
244
+ RootOutportRequireBusObject "warning"
245
+ AssertControl "UseLocalSettings"
246
+ EnableOverflowDetection off
247
+ ModelReferenceIOMsg "none"
248
+ ModelReferenceVersionMismatchMessage "none"
249
+ ModelReferenceIOMismatchMessage "none"
250
+ ModelReferenceCSMismatchMessage "none"
251
+ ModelReferenceSimTargetVerbose off
252
+ UnknownTsInhSupMsg "warning"
253
+ ModelReferenceDataLoggingMessage "warning"
254
+ ModelReferenceSymbolNameMessage "warning"
255
+ ModelReferenceExtraNoncontSigs "error"
256
+ StrictBusMsg "Warning"
257
+ }
258
+ Simulink.HardwareCC {
259
+ $ObjectID 6
260
+ Version "1.2.0"
261
+ ProdBitPerChar 8
262
+ ProdBitPerShort 16
263
+ ProdBitPerInt 32
264
+ ProdBitPerLong 32
265
+ ProdIntDivRoundTo "Undefined"
266
+ ProdEndianess "Unspecified"
267
+ ProdWordSize 32
268
+ ProdShiftRightIntArith on
269
+ ProdHWDeviceType "32-bit Generic"
270
+ TargetBitPerChar 8
271
+ TargetBitPerShort 16
272
+ TargetBitPerInt 32
273
+ TargetBitPerLong 32
274
+ TargetShiftRightIntArith on
275
+ TargetIntDivRoundTo "Undefined"
276
+ TargetEndianess "Unspecified"
277
+ TargetWordSize 32
278
+ TargetTypeEmulationWarnSuppressLevel 0
279
+ TargetPreprocMaxBitsSint 32
280
+ TargetPreprocMaxBitsUint 32
281
+ TargetHWDeviceType "Specified"
282
+ TargetUnknown off
283
+ ProdEqTarget on
284
+ }
285
+ Simulink.ModelReferenceCC {
286
+ $ObjectID 7
287
+ Version "1.2.0"
288
+ UpdateModelReferenceTargets "IfOutOfDateOrStructuralChange"
289
+ CheckModelReferenceTargetMessage "error"
290
+ ModelReferenceNumInstancesAllowed "Multi"
291
+ ModelReferencePassRootInputsByReference on
292
+ ModelReferenceMinAlgLoopOccurrences off
293
+ }
294
+ Simulink.RTWCC {
295
+ $BackupClass "Simulink.RTWCC"
296
+ $ObjectID 8
297
+ Array {
298
+ Type "Cell"
299
+ Dimension 1
300
+ Cell "IncludeHyperlinkInReport"
301
+ PropName "DisabledProps"
302
+ }
303
+ Version "1.2.0"
304
+ SystemTargetFile "grt.tlc"
305
+ GenCodeOnly off
306
+ MakeCommand "make_rtw"
307
+ GenerateMakefile on
308
+ TemplateMakefile "grt_default_tmf"
309
+ GenerateReport off
310
+ SaveLog off
311
+ RTWVerbose on
312
+ RetainRTWFile off
313
+ ProfileTLC off
314
+ TLCDebug off
315
+ TLCCoverage off
316
+ TLCAssert off
317
+ ProcessScriptMode "Default"
318
+ ConfigurationMode "Optimized"
319
+ ConfigAtBuild off
320
+ IncludeHyperlinkInReport off
321
+ LaunchReport off
322
+ TargetLang "C"
323
+ IncludeBusHierarchyInRTWFileBlockHierarchyMap off
324
+ IncludeERTFirstTime off
325
+ Array {
326
+ Type "Handle"
327
+ Dimension 2
328
+ Simulink.CodeAppCC {
329
+ $ObjectID 9
330
+ Array {
331
+ Type "Cell"
332
+ Dimension 16
333
+ Cell "IgnoreCustomStorageClasses"
334
+ Cell "InsertBlockDesc"
335
+ Cell "SFDataObjDesc"
336
+ Cell "SimulinkDataObjDesc"
337
+ Cell "DefineNamingRule"
338
+ Cell "SignalNamingRule"
339
+ Cell "ParamNamingRule"
340
+ Cell "InlinedPrmAccess"
341
+ Cell "CustomSymbolStr"
342
+ Cell "CustomSymbolStrGlobalVar"
343
+ Cell "CustomSymbolStrType"
344
+ Cell "CustomSymbolStrField"
345
+ Cell "CustomSymbolStrFcn"
346
+ Cell "CustomSymbolStrBlkIO"
347
+ Cell "CustomSymbolStrTmpVar"
348
+ Cell "CustomSymbolStrMacro"
349
+ PropName "DisabledProps"
350
+ }
351
+ Version "1.2.0"
352
+ ForceParamTrailComments off
353
+ GenerateComments on
354
+ IgnoreCustomStorageClasses on
355
+ IncHierarchyInIds off
356
+ MaxIdLength 31
357
+ PreserveName off
358
+ PreserveNameWithParent off
359
+ ShowEliminatedStatement off
360
+ IncAutoGenComments off
361
+ SimulinkDataObjDesc off
362
+ SFDataObjDesc off
363
+ IncDataTypeInIds off
364
+ PrefixModelToSubsysFcnNames on
365
+ MangleLength 1
366
+ CustomSymbolStrGlobalVar "$R$N$M"
367
+ CustomSymbolStrType "$N$R$M"
368
+ CustomSymbolStrField "$N$M"
369
+ CustomSymbolStrFcn "$R$N$M$F"
370
+ CustomSymbolStrBlkIO "rtb_$N$M"
371
+ CustomSymbolStrTmpVar "$N$M"
372
+ CustomSymbolStrMacro "$R$N$M"
373
+ DefineNamingRule "None"
374
+ ParamNamingRule "None"
375
+ SignalNamingRule "None"
376
+ InsertBlockDesc off
377
+ SimulinkBlockComments on
378
+ EnableCustomComments off
379
+ InlinedPrmAccess "Literals"
380
+ ReqsInCode off
381
+ }
382
+ Simulink.GRTTargetCC {
383
+ $BackupClass "Simulink.TargetCC"
384
+ $ObjectID 10
385
+ Array {
386
+ Type "Cell"
387
+ Dimension 13
388
+ Cell "IncludeMdlTerminateFcn"
389
+ Cell "CombineOutputUpdateFcns"
390
+ Cell "SuppressErrorStatus"
391
+ Cell "ERTCustomFileBanners"
392
+ Cell "GenerateSampleERTMain"
393
+ Cell "GenerateTestInterfaces"
394
+ Cell "MultiInstanceERTCode"
395
+ Cell "PurelyIntegerCode"
396
+ Cell "SupportNonFinite"
397
+ Cell "SupportComplex"
398
+ Cell "SupportAbsoluteTime"
399
+ Cell "SupportContinuousTime"
400
+ Cell "SupportNonInlinedSFcns"
401
+ PropName "DisabledProps"
402
+ }
403
+ Version "1.2.0"
404
+ TargetFcnLib "ansi_tfl_tmw.mat"
405
+ TargetLibSuffix ""
406
+ TargetPreCompLibLocation ""
407
+ GenFloatMathFcnCalls "ANSI_C"
408
+ UtilityFuncGeneration "Auto"
409
+ GenerateFullHeader on
410
+ GenerateSampleERTMain off
411
+ GenerateTestInterfaces off
412
+ IsPILTarget off
413
+ ModelReferenceCompliant on
414
+ IncludeMdlTerminateFcn on
415
+ CombineOutputUpdateFcns off
416
+ SuppressErrorStatus off
417
+ IncludeFileDelimiter "Auto"
418
+ ERTCustomFileBanners off
419
+ SupportAbsoluteTime on
420
+ LogVarNameModifier "rt_"
421
+ MatFileLogging on
422
+ MultiInstanceERTCode off
423
+ SupportNonFinite on
424
+ SupportComplex on
425
+ PurelyIntegerCode off
426
+ SupportContinuousTime on
427
+ SupportNonInlinedSFcns on
428
+ EnableShiftOperators on
429
+ ParenthesesLevel "Nominal"
430
+ ExtMode off
431
+ ExtModeStaticAlloc off
432
+ ExtModeTesting off
433
+ ExtModeStaticAllocSize 1000000
434
+ ExtModeTransport 0
435
+ ExtModeMexFile "ext_comm"
436
+ RTWCAPISignals off
437
+ RTWCAPIParams off
438
+ RTWCAPIStates off
439
+ GenerateASAP2 off
440
+ }
441
+ PropName "Components"
442
+ }
443
+ }
444
+ PropName "Components"
445
+ }
446
+ Name "Configuration"
447
+ SimulationMode "normal"
448
+ CurrentDlgPage "Solver"
449
+ }
450
+ PropName "ConfigurationSets"
451
+ }
452
+ Simulink.ConfigSet {
453
+ $PropName "ActiveConfigurationSet"
454
+ $ObjectID 1
455
+ }
456
+ BlockDefaults {
457
+ Orientation "right"
458
+ ForegroundColor "black"
459
+ BackgroundColor "white"
460
+ DropShadow off
461
+ NamePlacement "normal"
462
+ FontName "Arial"
463
+ FontSize 10
464
+ FontWeight "normal"
465
+ FontAngle "normal"
466
+ ShowName on
467
+ }
468
+ BlockParameterDefaults {
469
+ Block {
470
+ BlockType Constant
471
+ }
472
+ Block {
473
+ BlockType Integrator
474
+ ExternalReset "none"
475
+ InitialConditionSource "internal"
476
+ InitialCondition "0"
477
+ LimitOutput off
478
+ UpperSaturationLimit "inf"
479
+ LowerSaturationLimit "-inf"
480
+ ShowSaturationPort off
481
+ ShowStatePort off
482
+ AbsoluteTolerance "auto"
483
+ IgnoreLimit off
484
+ ZeroCross on
485
+ }
486
+ Block {
487
+ BlockType Scope
488
+ ModelBased off
489
+ TickLabels "OneTimeTick"
490
+ ZoomMode "on"
491
+ Grid "on"
492
+ TimeRange "auto"
493
+ YMin "-5"
494
+ YMax "5"
495
+ SaveToWorkspace off
496
+ SaveName "ScopeData"
497
+ LimitDataPoints on
498
+ MaxDataPoints "5000"
499
+ Decimation "1"
500
+ SampleInput off
501
+ SampleTime "-1"
502
+ }
503
+ Block {
504
+ BlockType Sin
505
+ SineType "Time based"
506
+ TimeSource "Use simulation time"
507
+ Amplitude "1"
508
+ Bias "0"
509
+ Frequency "1"
510
+ Phase "0"
511
+ Samples "10"
512
+ Offset "0"
513
+ SampleTime "-1"
514
+ VectorParams1D on
515
+ }
516
+ Block {
517
+ BlockType Sum
518
+ IconShape "rectangular"
519
+ Inputs "++"
520
+ InputSameDT on
521
+ OutDataTypeMode "Same as first input"
522
+ OutDataType "sfix(16)"
523
+ OutScaling "2^0"
524
+ LockScale off
525
+ RndMeth "Floor"
526
+ SaturateOnIntegerOverflow on
527
+ SampleTime "-1"
528
+ }
529
+ Block {
530
+ BlockType VariableTransportDelay
531
+ VariableDelayType "Variable time delay"
532
+ MaximumDelay "1"
533
+ InitialOutput "0"
534
+ MaximumPoints "1024"
535
+ FixedBuffer off
536
+ ZeroDelay off
537
+ TransDelayFeedthrough off
538
+ PadeOrder "0"
539
+ AbsoluteTolerance "auto"
540
+ }
541
+ }
542
+ AnnotationDefaults {
543
+ HorizontalAlignment "center"
544
+ VerticalAlignment "middle"
545
+ ForegroundColor "black"
546
+ BackgroundColor "white"
547
+ DropShadow off
548
+ FontName "Arial"
549
+ FontSize 10
550
+ FontWeight "normal"
551
+ FontAngle "normal"
552
+ }
553
+ LineDefaults {
554
+ FontName "Arial"
555
+ FontSize 9
556
+ FontWeight "normal"
557
+ FontAngle "normal"
558
+ }
559
+ System {
560
+ Name "delay"
561
+ Location [740, 99, 1393, 457]
562
+ Open on
563
+ ModelBrowserVisibility off
564
+ ModelBrowserWidth 200
565
+ ScreenColor "white"
566
+ PaperOrientation "landscape"
567
+ PaperPositionMode "auto"
568
+ PaperType "usletter"
569
+ PaperUnits "inches"
570
+ TiledPaperMargins [0.500000, 0.500000, 0.500000, 0.500000]
571
+ TiledPageScale 1
572
+ ShowPageBoundaries off
573
+ ZoomFactor "100"
574
+ ReportName "simulink-default.rpt"
575
+ Block {
576
+ BlockType Constant
577
+ Name "Constant"
578
+ Position [35, 50, 65, 80]
579
+ Value "0.3"
580
+ VectorParams1D on
581
+ SamplingMode "Sample based"
582
+ OutDataTypeMode "Inherit from 'Constant value'"
583
+ OutDataType "sfix(16)"
584
+ ConRadixGroup "Use specified scaling"
585
+ OutScaling "2^0"
586
+ SampleTime "inf"
587
+ FramePeriod "inf"
588
+ }
589
+ Block {
590
+ BlockType Integrator
591
+ Name "Integrator"
592
+ Ports [1, 1]
593
+ Position [245, 190, 275, 220]
594
+ IgnoreLimit off
595
+ }
596
+ Block {
597
+ BlockType Integrator
598
+ Name "Integrator1"
599
+ Ports [1, 1]
600
+ Position [120, 155, 150, 185]
601
+ Orientation "down"
602
+ IgnoreLimit off
603
+ }
604
+ Block {
605
+ BlockType Scope
606
+ Name "Scope"
607
+ Ports [3]
608
+ Position [450, 73, 480, 107]
609
+ Floating off
610
+ Location [530, 201, 1258, 894]
611
+ Open on
612
+ NumInputPorts "3"
613
+ ZoomMode "yonly"
614
+ List {
615
+ ListType AxesTitles
616
+ axes1 "%<SignalLabel>"
617
+ axes2 "%<SignalLabel>"
618
+ axes3 "%<SignalLabel>"
619
+ }
620
+ YMin "-5~-5~-5"
621
+ YMax "5~5~5"
622
+ DataFormat "StructureWithTime"
623
+ SampleTime "0"
624
+ }
625
+ Block {
626
+ BlockType Scope
627
+ Name "Scope1"
628
+ Ports [3]
629
+ Position [505, 238, 535, 272]
630
+ Floating off
631
+ Location [530, 201, 1258, 894]
632
+ Open off
633
+ NumInputPorts "3"
634
+ ZoomMode "yonly"
635
+ List {
636
+ ListType AxesTitles
637
+ axes1 "%<SignalLabel>"
638
+ axes2 "%<SignalLabel>"
639
+ axes3 "%<SignalLabel>"
640
+ }
641
+ YMin "-5~-5~-5"
642
+ YMax "5~5~5"
643
+ SaveName "ScopeData1"
644
+ DataFormat "StructureWithTime"
645
+ SampleTime "0"
646
+ }
647
+ Block {
648
+ BlockType Sin
649
+ Name "Sin"
650
+ Ports [0, 1]
651
+ Position [85, 15, 115, 45]
652
+ SineType "Time based"
653
+ Frequency "pi/2"
654
+ SampleTime "0"
655
+ }
656
+ Block {
657
+ BlockType Sum
658
+ Name "Sum"
659
+ Ports [2, 1]
660
+ Position [370, 120, 390, 140]
661
+ ShowName off
662
+ IconShape "round"
663
+ Inputs "|-+"
664
+ InputSameDT off
665
+ OutDataTypeMode "Inherit via internal rule"
666
+ SaturateOnIntegerOverflow off
667
+ }
668
+ Block {
669
+ BlockType Sum
670
+ Name "Sum1"
671
+ Ports [2, 1]
672
+ Position [425, 285, 445, 305]
673
+ ShowName off
674
+ IconShape "round"
675
+ Inputs "|-+"
676
+ InputSameDT off
677
+ OutDataTypeMode "Inherit via internal rule"
678
+ SaturateOnIntegerOverflow off
679
+ }
680
+ Block {
681
+ BlockType VariableTransportDelay
682
+ Name "Variable\nTime Delay"
683
+ Position [175, 22, 205, 53]
684
+ MaximumDelay "10"
685
+ }
686
+ Block {
687
+ BlockType VariableTransportDelay
688
+ Name "Variable\nTime Delay1"
689
+ Position [150, 237, 180, 268]
690
+ MaximumDelay "10"
691
+ }
692
+ Block {
693
+ BlockType Sin
694
+ Name "shifted sin"
695
+ Ports [0, 1]
696
+ Position [85, 75, 115, 105]
697
+ SineType "Time based"
698
+ Frequency "pi/2"
699
+ Phase "-0.3 * pi/2"
700
+ SampleTime "0"
701
+ }
702
+ Line {
703
+ SrcBlock "Sin"
704
+ SrcPort 1
705
+ Points [15, 0]
706
+ Branch {
707
+ DstBlock "Variable\nTime Delay"
708
+ DstPort 1
709
+ }
710
+ Branch {
711
+ DstBlock "Integrator1"
712
+ DstPort 1
713
+ }
714
+ }
715
+ Line {
716
+ SrcBlock "Variable\nTime Delay"
717
+ SrcPort 1
718
+ Points [20, 0]
719
+ Branch {
720
+ Points [125, 0; 0, 40]
721
+ Branch {
722
+ DstBlock "Scope"
723
+ DstPort 1
724
+ }
725
+ Branch {
726
+ DstBlock "Sum"
727
+ DstPort 1
728
+ }
729
+ }
730
+ Branch {
731
+ DstBlock "Integrator"
732
+ DstPort 1
733
+ }
734
+ }
735
+ Line {
736
+ SrcBlock "shifted sin"
737
+ SrcPort 1
738
+ Points [215, 0]
739
+ Branch {
740
+ DstBlock "Scope"
741
+ DstPort 2
742
+ }
743
+ Branch {
744
+ Points [0, 65]
745
+ DstBlock "Sum"
746
+ DstPort 2
747
+ }
748
+ }
749
+ Line {
750
+ SrcBlock "Sum"
751
+ SrcPort 1
752
+ Points [20, 0; 0, -30]
753
+ DstBlock "Scope"
754
+ DstPort 3
755
+ }
756
+ Line {
757
+ SrcBlock "Constant"
758
+ SrcPort 1
759
+ Points [5, 0]
760
+ Branch {
761
+ Points [80, 0; 0, -20]
762
+ DstBlock "Variable\nTime Delay"
763
+ DstPort 2
764
+ }
765
+ Branch {
766
+ Points [0, 195]
767
+ DstBlock "Variable\nTime Delay1"
768
+ DstPort 2
769
+ }
770
+ }
771
+ Line {
772
+ SrcBlock "Integrator"
773
+ SrcPort 1
774
+ Points [130, 0; 0, 40]
775
+ Branch {
776
+ DstBlock "Scope1"
777
+ DstPort 1
778
+ }
779
+ Branch {
780
+ DstBlock "Sum1"
781
+ DstPort 1
782
+ }
783
+ }
784
+ Line {
785
+ SrcBlock "Variable\nTime Delay1"
786
+ SrcPort 1
787
+ Points [205, 0]
788
+ Branch {
789
+ DstBlock "Scope1"
790
+ DstPort 2
791
+ }
792
+ Branch {
793
+ Points [0, 65]
794
+ DstBlock "Sum1"
795
+ DstPort 2
796
+ }
797
+ }
798
+ Line {
799
+ SrcBlock "Sum1"
800
+ SrcPort 1
801
+ Points [20, 0; 0, -30]
802
+ DstBlock "Scope1"
803
+ DstPort 3
804
+ }
805
+ Line {
806
+ SrcBlock "Integrator1"
807
+ SrcPort 1
808
+ DstBlock "Variable\nTime Delay1"
809
+ DstPort 1
810
+ }
811
+ Annotation {
812
+ Name "Note: 0.3 is\nhardcoded\ninside the\nshift bloc"
813
+ "k"
814
+ Position [41, 125]
815
+ BackgroundColor "yellow"
816
+ UseDisplayTextAsClickCallback off
817
+ }
818
+ Annotation {
819
+ Name "Compare the 3rd plot in this scope\nwith the id"
820
+ "di_err in delay.rb.\nRedShift is more accurate\nbecause delay flows buffer\nt"
821
+ "he entire rk4 state, not\njust the values at the timesteps."
822
+ Position [528, 194]
823
+ BackgroundColor "cyan"
824
+ UseDisplayTextAsClickCallback off
825
+ }
826
+ }
827
+ }