Difference between revisions of "OpenModelica/C2/Control-flow-and-Event-handling/English"
Line 14: | Line 14: | ||
|| In this tutorial, we are going to learn: | || In this tutorial, we are going to learn: | ||
− | How to use '''if-else''' | + | How to use '''if-else''' statement |
How to handle '''time''' and '''state''' events | How to handle '''time''' and '''state''' events | ||
Line 62: | Line 62: | ||
|- | |- | ||
|| | || | ||
− | ||'''‘timeEventExample’''' file is available in Code Files link on spoken tutorial website. | + | ||'''‘timeEventExample’''' file is available in '''Code Files''' link on spoken tutorial website. |
Please download and save all the files in Code Files link. | Please download and save all the files in Code Files link. | ||
Line 71: | Line 71: | ||
|- | |- | ||
|| | || | ||
− | || Now let me go to OMEdit. | + | || Now let me go to '''OMEdit'''. |
I have already launched it on my system. | I have already launched it on my system. | ||
Line 85: | Line 85: | ||
|- | |- | ||
|| | || | ||
− | ||Note: Windows users may similarly search for OMEdit in start menu and open it. | + | ||Note: Windows users may similarly search for '''OMEdit''' in '''start''' menu and open it. |
|- | |- | ||
Line 93: | Line 93: | ||
|- | |- | ||
|| Click on '''‘Open’''' | || Click on '''‘Open’''' | ||
− | || Locate '''‘timeEventExample’''' file in your system and click on Open. | + | || Locate '''‘timeEventExample’''' file in your system and click on '''Open'''. |
|- | |- | ||
|| | || | ||
− | ||You may alternatively use the file menu to open this file. | + | ||You may alternatively use the '''file''' menu to open this file. |
− | Note that timeEventExample | + | Note that '''timeEventExample''' has appeared in libraries browser. |
|- | |- | ||
|| | || | ||
− | ||Right click on this icon and select view class. | + | ||Right click on this icon and select '''view class'''. |
− | The model has now opened in Diagram view. | + | The model has now opened in '''Diagram view'''. |
− | Click on third button which is the Text View. | + | Click on third button which is the '''Text View'''. |
− | We have already discussed that model and class are used synonymously in Modelica. | + | We have already discussed that '''model''' and '''class''' are used synonymously in Modelica. |
|- | |- | ||
Line 157: | Line 157: | ||
|- | |- | ||
|| '''if time >= 0.5 then''' | || '''if time >= 0.5 then''' | ||
− | || | + | || '''if''' statement places a constraint on '''‘time’''' variable. |
'''‘time’''' is a built-in variable in Modelica. | '''‘time’''' is a built-in variable in Modelica. | ||
Line 181: | Line 181: | ||
|| The ball is at rest when time is less than '''0.5''' seconds. Hence, these two equations hold good in that case. | || The ball is at rest when time is less than '''0.5''' seconds. Hence, these two equations hold good in that case. | ||
− | |||
− | |||
− | |||
|- | |- | ||
|| '''end if;''' | || '''end if;''' | ||
Line 196: | Line 193: | ||
|- | |- | ||
|| /* Plotting perspective */ | || /* Plotting perspective */ | ||
− | || Plotting perspective has now opened. | + | || '''Plotting perspective''' has now opened. |
Select '''‘h’''' in the '''‘variables browser’'''. | Select '''‘h’''' in the '''‘variables browser’'''. | ||
Line 208: | Line 205: | ||
|- | |- | ||
|| | || | ||
− | ||To delete the result right click on timeEventExample in Variables browser and select Delete Result. | + | ||To delete the result right click on '''timeEventExample''' in Variables browser and select '''Delete Result'''. |
|- | |- | ||
Line 228: | Line 225: | ||
|| Now, let me delete the second equation in '''‘else’''' branch. | || Now, let me delete the second equation in '''‘else’''' branch. | ||
− | Click on Save button in the toolbar to save this model. | + | Click on '''Save''' button in the toolbar to save this model. |
|- | |- | ||
− | || Click on simulate button | + | || Click on '''simulate''' button |
|| Click on '''‘Simulate’''' | || Click on '''‘Simulate’''' | ||
Line 244: | Line 241: | ||
|- | |- | ||
|| | || | ||
− | ||Let me insert the equation back in its place and click on save button. | + | ||Let me insert the equation back in its place and click on '''save''' button. |
|- | |- | ||
Line 255: | Line 252: | ||
|- | |- | ||
|| Let me show you how it is done. | || Let me show you how it is done. | ||
− | |||
− | The | + | delete the '''‘if-else’''' block first. |
+ | |||
+ | The equations to be typed here have been provided in a file named '''‘if else-statement.txt’'''. | ||
|- | |- | ||
|| | || | ||
− | || | + | || These file is also available in '''‘Code Files’''' link. |
− | + | ||
− | These file is also available in '''‘Code Files’''' link. | + | |
|- | |- | ||
|| | || | ||
− | || Since it is a text file I have used gedit to open it. | + | || Since it is a text file I have used '''gedit''' to open it. |
|- | |- | ||
Line 283: | Line 279: | ||
|- | |- | ||
|| /* timeEventExample */ | || /* timeEventExample */ | ||
− | || Go back to '''OMEdit'''. Do a right click and select Paste | + | || Go back to '''OMEdit'''. Do a right click and select '''Paste''' |
|- | |- | ||
|| | || | ||
− | || Click on Save button in the toolbar once again. | + | || Click on '''Save''' button in the toolbar once again. |
|- | |- | ||
Line 299: | Line 295: | ||
Select '''‘h’''' in the '''‘variables browser’''' | Select '''‘h’''' in the '''‘variables browser’''' | ||
− | |||
− | Select '''‘h’''' in the '''‘variables browser’''' once again. | + | ||Select '''‘h’''' in the '''‘variables browser’''' once again. |
Note that the '''‘h’''' vs '''‘time’''' plot is the same as in previous case which indicates that both models are the same. | Note that the '''‘h’''' vs '''‘time’''' plot is the same as in previous case which indicates that both models are the same. | ||
− | To delete the result right click on timeEventExample and select Delete Result. | + | To delete the result right click on '''timeEventExample''' and select '''Delete Result'''. |
|- | |- | ||
|| /* Switch to '''Modeling perspective''' */ | || /* Switch to '''Modeling perspective''' */ | ||
− | || Click on Modeling button at bottom right. | + | || Click on '''Modeling''' button at bottom right. |
|- | |- | ||
|| der(v) = if time >= 0.5 then g else 0; | || der(v) = if time >= 0.5 then g else 0; | ||
− | || This is an if-else statement which indicates that if '''time >= 0.5''' '''dv/dt = g''' otherwise '''dv/dt = 0'''. | + | || This is an '''if-else''' statement which indicates that if '''time >= 0.5''' '''dv/dt = g''' otherwise '''dv/dt = 0'''. |
|- | |- | ||
Line 320: | Line 315: | ||
|- | |- | ||
|| Now let me go back to the slides. | || Now let me go back to the slides. | ||
− | + | ||
+ | Please note that the number of equations in '''‘if’''' branch should be equal to the Number of equations in '''‘else’''' branch and both of them should be equal to the Number of variables in the class or model. | ||
|- | |- | ||
Line 332: | Line 328: | ||
In a '''time event''', the time at which event occurs is precisely known. | In a '''time event''', the time at which event occurs is precisely known. | ||
− | '''‘timeEventExample’''' handles a time event at t = 0.5 seconds | + | '''‘timeEventExample’''' handles a time event at '''t = 0.5''' seconds |
− | '''state event''' occurs when a system variable | + | '''state event''' occurs when a system variable cross a certain value. |
Line 363: | Line 359: | ||
|- | |- | ||
|| Click on '''‘bouncingBall’''' tab at the top of modeling area | || Click on '''‘bouncingBall’''' tab at the top of modeling area | ||
− | || Click on '''‘OpenModel/LIbrary File’''' tool. Locate '''‘bouncingBall’''' file in your system and click on open. | + | || Click on '''‘OpenModel/LIbrary File’''' tool. Locate '''‘bouncingBall’''' file in your system and click on '''open'''. |
|- | |- | ||
Line 375: | Line 371: | ||
'''parameter Real e = 0.8 "Coefficient of restitution";''' | '''parameter Real e = 0.8 "Coefficient of restitution";''' | ||
− | || '''‘e’''' is | + | || '''‘e’''' is coefficient of restitution for inelastic collision of ball with Earth. |
It is a parameter and its value remains constant at 0.8 through out the simulation run. | It is a parameter and its value remains constant at 0.8 through out the simulation run. | ||
Line 388: | Line 384: | ||
'''parameter Real g(unit = “m/s2”) = -9.81;''' | '''parameter Real g(unit = “m/s2”) = -9.81;''' | ||
− | || '''‘h’, ‘v’''' and '''‘g’''' represent the same quantities as in | + | || '''‘h’, ‘v’''' and '''‘g’''' represent the same quantities as in '''timeEventExample''' |
|- | |- | ||
Line 394: | Line 390: | ||
'''der(v) = g; ''' | '''der(v) = g; ''' | ||
− | || | + | || These two equations of motions have already been discussed in '''‘freeFall’''' class. |
|- | |- | ||
Line 411: | Line 407: | ||
|- | |- | ||
|| '''reinit(v, -e * pre(v)); ''' | || '''reinit(v, -e * pre(v)); ''' | ||
− | || Here, it re-initializes velocity of ball with the negative product of | + | || Here, it re-initializes velocity of ball with the negative product of '''e''' and velocity of ball before touching the ground. |
|- | |- | ||
Line 421: | Line 417: | ||
Click on '''‘Simulation Setup’''' button in the toolbar. | Click on '''‘Simulation Setup’''' button in the toolbar. | ||
− | Under General tab, change '''‘Stop Time’''' field to 30 units and | + | Under '''General''' tab, change '''‘Stop Time’''' field to 30 units and |
Click on '''‘Simulate’'''. | Click on '''‘Simulate’'''. | ||
Line 443: | Line 439: | ||
A discussion of numerical errors is beyond the scope of this tutorial. | A discussion of numerical errors is beyond the scope of this tutorial. | ||
− | Please refer to Zeno behavior of bouncing ball for a better understanding. | + | Please refer to '''Zeno''' behavior of bouncing ball for a better understanding. |
− | Let me deselect h | + | Let me deselect '''h''' |
|- | |- | ||
Line 454: | Line 450: | ||
|| Slide: | || Slide: | ||
− | Event-related operators | + | '''Event-related operators''' |
|| '''‘when’''' statement is used to signal an event. | || '''‘when’''' statement is used to signal an event. | ||
Line 463: | Line 459: | ||
For example, '''reinit(a, 10)''' assigns a value of '''10''' to '''‘a’''' when event occurs. | For example, '''reinit(a, 10)''' assigns a value of '''10''' to '''‘a’''' when event occurs. | ||
− | The faulty behavior of bouncingBall model is corrected in ''‘bouncingBallWithHysteresis’'''. | + | The faulty behavior of '''bouncingBall''' model is corrected in '''‘bouncingBallWithHysteresis’'''. |
|- | |- | ||
|| Slide: | || Slide: | ||
− | Assignment | + | '''Assignment''' |
+ | |||
||''‘bouncingBallWithHysteresis’''' model is available on spoken tutorial website. | ||''‘bouncingBallWithHysteresis’''' model is available on spoken tutorial website. | ||
− | + | Simulate '''‘bouncingBallWithHysteresis‘''' and generate '''‘h’''' vs '''‘time’''' plot. | |
− | Notice the difference between '' | + | Notice the difference between '''‘bouncingBall‘''' and '''‘bouncingBallWithHysteresis‘''' |
|- | |- | ||
Line 482: | Line 479: | ||
|| Slide: | || Slide: | ||
− | About the Spoken Tutorial Project | + | About the '''Spoken Tutorial Project''' |
+ | |||
|| Watch the video available at following link. | || Watch the video available at following link. | ||
'''http://spoken-tutorial.org/ http://spoken-tutorial.org] /What\_is\_a\_Spoken\_Tutorial''' | '''http://spoken-tutorial.org/ http://spoken-tutorial.org] /What\_is\_a\_Spoken\_Tutorial''' | ||
− | It summarises the Spoken Tutorial project | + | It summarises the '''Spoken Tutorial''' project |
|- | |- | ||
|| Slide: | || Slide: | ||
− | Spoken Tutorial Workshops | + | '''Spoken Tutorial''' Workshops |
|| We conduct workshops using spoken tutorials | || We conduct workshops using spoken tutorials | ||
Line 503: | Line 501: | ||
Forum | Forum | ||
− | || If you have questions related to this spoken tutorial, please visit the following website. | + | || If you have any questions related to this spoken tutorial, please visit the following website. |
|- | |- | ||
|| Slide: | || Slide: | ||
− | Textbook Companion Project | + | '''Textbook Companion Project''' |
− | || Under Textbook Companion Project we coordinate coding of solved examples of popular books. | + | || Under '''Textbook Companion Project''' we coordinate coding of solved examples of popular books. |
We give honorarium and certificates to those who do this. | We give honorarium and certificates to those who do this. | ||
Line 518: | Line 516: | ||
|| Slide: | || Slide: | ||
− | Lab Migration Project | + | '''Lab Migration Project''' |
− | || Under Lab Migration Project we help migrate commercial simulator labs to OpenModelica. | + | || Under '''Lab Migration Project''' we help migrate commercial simulator labs to OpenModelica. |
For more information please visit the website. | For more information please visit the website. | ||
Line 526: | Line 524: | ||
|| Slide: | || Slide: | ||
− | Acknowledgements | + | '''Acknowledgements''' |
|| '''Spoken Tutorial Project''' is supported by '''NMEICT, MHRD''', Government of India. | || '''Spoken Tutorial Project''' is supported by '''NMEICT, MHRD''', Government of India. | ||
Revision as of 14:37, 1 March 2016
Visual Cue | Narration |
Slide Number 1
Title Slide |
Welcome to the spoken tutorial on Control flow and Event handling. |
Slide:
Learning Objectives |
In this tutorial, we are going to learn:
How to use if-else statement How to handle time and state events How to use when statement. |
Slide:
System Requirements |
To record this tutorial, I am using
OpenModelica 1.9.2 and Ubuntu Operating system version 14.04 But, this process is identical in Windows, Mac OS X or FOSSEE OS on ARM. |
Slide:
Pre-requisites |
To understand and practice this tutorial, you need to know the following:
Pre-requisite tutorials are mentioned on Spoken Tutorial website. Please go through them. |
Slide:
Problem Statement |
freeFall class was already discussed in previous tutorials.
Now, let us add a constraint to it. Ball is at rest until t = 0.5 seconds. Free fall under gravity starts at time t = 0.5 seconds I have created a model named ‘timeEventExample’ which simulates this condition. |
‘timeEventExample’ file is available in Code Files link on spoken tutorial website.
Please download and save all the files in Code Files link. For your convenience, ‘freeFall’ class is also made available.
| |
Now let me go to OMEdit.
I have already launched it on my system. | |
Click on Dash Home | To open OMEdit on Ubuntu Operating System, click on Dash Home icon at the top left. |
Type OMEdit in the Search bar and click on ‘OMEdit’ icon. Let me go back. | |
Note: Windows users may similarly search for OMEdit in start menu and open it. | |
Click on ‘Open Model/Library File’ in tool bar. | To open ‘timeEventExample’ file, Click on the tool named ‘Open Model/Library File’. |
Click on ‘Open’ | Locate ‘timeEventExample’ file in your system and click on Open. |
You may alternatively use the file menu to open this file.
Note that timeEventExample has appeared in libraries browser. | |
Right click on this icon and select view class.
The model has now opened in Diagram view. Click on third button which is the Text View. We have already discussed that model and class are used synonymously in Modelica. | |
/* timeEventExample */
model timeEventExample |
The Name of this model is ‘timeEventExample’. |
“Time event demonstration” | Comments such as this may be written on the first line of a model or class. |
Real h(unit = “m”) “Height of ball”;
Real v(unit = “m/s”) “Velocity of ball”; parameter Real g(unit = “m/s2”) = -9.81 “Acceleration due to gravity”; |
‘h’, ‘v’ and ‘g’ represent the same quantities as in ‘freeFall’ class. |
initial equation | ‘initial equation’ section contains initial conditions. |
h = 30; | Value of h at time t = 0 is 30 m |
v = 0; | Value of v at time t = 0 is 0.
|
Equation signifies the beginning of equation section of this model. | |
Now, let us see how to insert the constraint explained in slides. | |
Note that there is an ‘if-else’ block in equation section as shown.
Let us try to understand each statement of this ‘if-else’ block. | |
if time >= 0.5 then | if statement places a constraint on ‘time’ variable.
‘time’ is a built-in variable in Modelica. It need not be explicitly declared in a class or model. |
der(h) = v;
der(v) = g; |
The ball experiences free fall after time 0.5 seconds.
Hence, these two equations represent the same equations as those in ‘freeFall’ class. |
else | ‘else’ branch contains equations which are executed when time is less than 0.5 seconds. |
der(h) = v;
der(v) = 0; |
The ball is at rest when time is less than 0.5 seconds. Hence, these two equations hold good in that case. |
end if; | ‘end if’ signifies the end of ‘if-else’ block |
Click on simulate button | The model is now complete.
let us simulate it by clicking on simulate button. |
/* Plotting perspective */ | Plotting perspective has now opened.
Select ‘h’ in the ‘variables browser’. |
This generates ‘h’ vs ‘time’ plot.
Since the ball is at rest until time t=0.5 seconds. Height remains the same. | |
To delete the result right click on timeEventExample in Variables browser and select Delete Result. | |
Click on Modeling perspective button | To go back to Modeling perspective.
Click on Modeling button at bottom right. |
/* timeEventExample */
else der(h) = v; Delete // der(v) = 0; end if; |
Now, let me delete the second equation in ‘else’ branch.
Click on Save button in the toolbar to save this model. |
Click on simulate button | Click on ‘Simulate’ |
Hover the mouse over 'Messages browser. | The simulation has failed. Go to the Messages browser and scroll up to see the error message.
The error message says that the number of equations in each branch should be the same. Therefore, the number of equations in ‘if’ and ‘else’ branches should each be equal to the number of variables. |
Let me insert the equation back in its place and click on save button. | |
Note that der(h) = v is an equation which is commons to both ‘if’ and ‘else’ branches.
Hence, the ‘if-else’ block can be replaced by two statements.
| |
Let me show you how it is done.
delete the ‘if-else’ block first. The equations to be typed here have been provided in a file named ‘if else-statement.txt’. | |
These file is also available in ‘Code Files’ link. | |
Since it is a text file I have used gedit to open it. | |
/* gedit */ | Let me go to ‘gedit’.
Windows users may open this file using ‘Notepad’ or any other text editor. |
der(h) = v;
der(v) = if time >= 0.5 then g else 0; |
Copy the two equations. |
/* timeEventExample */ | Go back to OMEdit. Do a right click and select Paste |
Click on Save button in the toolbar once again. | |
Click on simulate button | Click on Simulate.
Close the pop up window. |
/* Plotting perspective */
Select ‘h’ in the ‘variables browser’ |
Select ‘h’ in the ‘variables browser’ once again.
Note that the ‘h’ vs ‘time’ plot is the same as in previous case which indicates that both models are the same. To delete the result right click on timeEventExample and select Delete Result. |
/* Switch to Modeling perspective */ | Click on Modeling button at bottom right. |
der(v) = if time >= 0.5 then g else 0; | This is an if-else statement which indicates that if time >= 0.5 dv/dt = g otherwise dv/dt = 0. |
Slide: | |
Now let me go back to the slides.
Please note that the number of equations in ‘if’ branch should be equal to the Number of equations in ‘else’ branch and both of them should be equal to the Number of variables in the class or model. | |
Slide:
Event |
Event is an abrupt change in behavior of a system.
Events may be categorized into time events and state events. In a time event, the time at which event occurs is precisely known. ‘timeEventExample’ handles a time event at t = 0.5 seconds state event occurs when a system variable cross a certain value.
|
Slide:
Problem Statement |
Let us try to understand state events using an example.
A ball under free fall faces a state event on touching the ground. The following behavior is observed when it hits the ground. Velocity of ball reverts in direction. Magnitude of velocity changes if the collision is inelastic I have created a model named ‘bouncingBall’ to simulate this behavior. This file is available on Spoken Tutorial Website. |
/* Switch to OMEdit */ | To view this model and simulate it, Let me go back to OMEdit.
|
Click on ‘bouncingBall’ tab at the top of modeling area | Click on ‘OpenModel/LIbrary File’ tool. Locate ‘bouncingBall’ file in your system and click on open. |
Right-click on ‘bouncingBall’ | Right-click on ‘bouncingBall’ icon in libraries browser and select ‘View Class’.
If the model does not open in ‘Text View’ go to the top of modeling area and click on ‘Text View’ button. |
/* bouncingBall */
parameter Real e = 0.8 "Coefficient of restitution"; |
‘e’ is coefficient of restitution for inelastic collision of ball with Earth.
It is a parameter and its value remains constant at 0.8 through out the simulation run. |
parameter Real radius = 0.001 "Radius of the ball in “m'"; | ‘radius’ represents the radius of ball in ‘m’. |
Real h(unit = “m”);
Real v(unit = “m”); parameter Real g(unit = “m/s2”) = -9.81; |
‘h’, ‘v’ and ‘g’ represent the same quantities as in timeEventExample |
der(h) = v;
der(v) = g; |
These two equations of motions have already been discussed in ‘freeFall’ class. |
when h <= radius then | ‘when’ statement is used to signal an event.
It is used to specify the action to be taken when an event occurs. h <= radius holds true when the ball is in contact with ground. This statement is executed whenever the event occurs. |
reinit(v, -e * pre(v)); | ‘reinit()’ function is used to re-initialize a variable. |
reinit(v, -e * pre(v)); | Here, it re-initializes velocity of ball with the negative product of e and velocity of ball before touching the ground. |
/* Simulation Options */
Click on ‘Simulation Options’ icon |
To simulate this model
Click on ‘Simulation Setup’ button in the toolbar. Under General tab, change ‘Stop Time’ field to 30 units and Click on ‘Simulate’. Close the pop up window. |
/* Plotting perspective */
Select‘h’ in ‘variables browser’ |
Select‘h’ in ‘variables browser’
note that ‘h’ drops below zero which is unacceptable. We have seen similar behavior while simulating ‘freeFall’ class. |
This faulty behavior is due to numerical errors.
A discussion of numerical errors is beyond the scope of this tutorial. Please refer to Zeno behavior of bouncing ball for a better understanding. Let me deselect h | |
Let us go back to the slides | |
Slide:
Event-related operators |
‘when’ statement is used to signal an event.
‘reinit(a,b)’ assigns value of ‘b’ to variable ‘a’ and resumes simulation. pre(a) returns the value of variable ‘a’ before event. For example, reinit(a, 10) assigns a value of 10 to ‘a’ when event occurs. The faulty behavior of bouncingBall model is corrected in ‘bouncingBallWithHysteresis’. |
Slide:
Assignment |
‘bouncingBallWithHysteresis’' model is available on spoken tutorial website.
Simulate ‘bouncingBallWithHysteresis‘ and generate ‘h’ vs ‘time’ plot. Notice the difference between ‘bouncingBall‘ and ‘bouncingBallWithHysteresis‘ |
This brings us to the end of this tutorial. | |
Slide:
About the Spoken Tutorial Project |
Watch the video available at following link.
http://spoken-tutorial.org/ http://spoken-tutorial.org] /What\_is\_a\_Spoken\_Tutorial It summarises the Spoken Tutorial project |
Slide:
Spoken Tutorial Workshops |
We conduct workshops using spoken tutorials
Give certificates Please contact us. |
Slide:
Forum |
If you have any questions related to this spoken tutorial, please visit the following website. |
Slide:
Textbook Companion Project |
Under Textbook Companion Project we coordinate coding of solved examples of popular books.
We give honorarium and certificates to those who do this. For more details please visit the following website. |
Slide:
Lab Migration Project |
Under Lab Migration Project we help migrate commercial simulator labs to OpenModelica.
For more information please visit the website. |
Slide:
Acknowledgements |
Spoken Tutorial Project is supported by NMEICT, MHRD, Government of India. |
Slide:
Thanks |
We thank the development team of OpenModelica for their support. |
Thank you for joining me in this tutorial. Goodbye. |