ModSlaveSim help v3.07 - 4.3.2. Flow Computer
Download manual: HTML
This example simulates a simple "flow computer", which monitors a flow rate and computes and stores the total and average flow rate for the last period.
GUIDE:
(To load this simulation select the file Flow computer from File->Simulation Examples....)
When ready to start press Run Slave Simulation. Press it again to stop or pause the simulation.
At the end of every flow computer cycle of 10 seconds (stored in the Period register) you will see the flow computer simulation update the Total and Average flow for that cycle (and Elapsed time is reset to zero for the next cycle). During the cycle, as the Elapsed time within the cycle increases, you can see the Running total changing as the simulation calculates the flow from the Flow rate, which is itself changing during the cycle.
For further guidelines see Running Example Simulations
The program listing and explanatory notes for the simulation follow. Before looking at them, please read the short sections Introduction to programming simulations and Language: Quick Start Guide
The table below shows the simple program underlying the simulation.
Table 3. Slave 1: flow computer
Register Address | Register Name | Statement |
---|---|---|
$100 | Flow rate | if ($$ >= 3000 && $$ <= 4000) then $$ + 15 else 3000 |
$101 | Period | |
$102 | Total | if $105 >= $101 then $104 - ($105 - $101) * $100 |
$103 | Average | $102 / $101 |
$104 | Running total | if $105 >= $101 then ($105 - $101) * $100 else $$ + CycleTime * $100 |
$105 | Elapsed time | if $$ >= $101 then ($$ - $101) else $$ + CycleTime |
Notes.
$100 : Flow rate. The monitored flow rate. This increases gradually in this simulation then drops down and starts to rise again. It could have been varied with less predictability using, for example, a random walk.
$101 : Period. The period in seconds for which the total and average are computed.
-
$102 : Total. The total flow for the last complete flow computer cycle. It is copied from the Running total ($104) at the end of each flow computer cycle, and a correction for the flow in the partial (CycleTime) cycle, at the end of the flow period, is subtracted from RunningTotal($104) (see NB below). The code
$105 >= $101
tests for the end of the flow computer cycle (see the note on Elapsed time below).if $105 >= $101 then $104 - ($105 - $101) * $100
NB. Partial periods. It is common to get partial periods since the cycle in the simulation will often not be synchronised to the
CycleTime
. This can be as a result of operating system variation in how frequently it allocates resources. However, it might also be because, for example, the flow computer cycle Period is not synchronized with a Run Interval: the former may be 10 seconds and the latter .80 second. So the periods do not align precisely and this may occur both at the start and end of a period.In this simulation, partial periods are also calculated in ElapsedTime and RunningTotal. In this register, the partial period calculation is (Elapsed time - Period):
($105 - $101)
-
$103 : Average. The average flow rate for the last complete flow computer cycle. It is computed simply by dividing the total flow by the flow computer period.
$102 / $101
-
$104 : Running total. The flow so far for the current flow computer cycle. At the end of each flow computer cycle, the running total is initialized with the flow for the partial
CycleTime
cycle at the start of the next flow computer cycle. The running total is then incremented with the flow for each completeCycleTime
cycle (see NB under $102 Total for an explanation of partial periods). The code$105 >= $101
tests for the end of the flow computer cycle (see the note on Elapsed time below).if $105 >= $101 then ($105 - $101) * $100 else $$ + CycleTime * $100
-
$105 : Elapsed time. The number of seconds since the start of the current flow computer cycle. The elapsed time is incremented by
CycleTime
on eachCycleTime
cycle. When the elapsed time exceeds Period it is re-initialized to the partialCycleTime
cycle$$ - $101
(see NB under $102 Total for an explanation of partial periods). This register is an example of a Periodic timerif $$ >= $101 then $$ - $101 else $$ + CycleTime