OpenModelica/C2/Control-flow-and-Event-handling/English-timed
From Script | Spoken-Tutorial
Time | Narration |
00:01 | Welcome to the spoken tutorial on Control flow and Event handling. |
00:07 | 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. |
00:19 | To record this tutorial, I am using : OpenModelica 1.9.2 and Ubuntu Operating system version 14.04. |
00:30 | But, this process is identical in Windows, Mac OS X or FOSSEE OS on ARM. |
00:38 | To understand and practice this tutorial, you need to know the following: equation-based modeling of physical systems , |
00:47 | branching in any programming language , class definition in Modelica. |
00:53 | Pre-requisite tutorials are mentioned on Spoken Tutorial website. Please go through them. |
01:00 | freeFall class was already discussed in previous tutorials. |
01:05 | Now, let us add a constraint to it. |
01:08 | Ball is at rest until t = 0.5 seconds. Free fall under gravity starts at time t = 0.5 seconds. |
01:19 | I have created a model named timeEventExample which simulates this condition. |
01:25 | timeEventExample file is available in Code Files link on spoken tutorial website. |
01:32 | Please download and save all the files in Code Files link. |
01:38 | For your convenience, freeFall class is also made available. |
01:43 | Now let me go to OMEdit. |
01:45 | I have already launched it on my system. |
01:49 | To open OMEdit on Ubuntu Operating System, click on Dash Home icon at the top left. |
01:58 | Type: OMEdit in the Search bar and click on OMEdit icon. Let me go back. |
02:06 | Note: Windows users may similarly search for OMEdit in Start menu and open it. |
02:13 | To open timeEventExample file, click on the tool named Open Model/Library File. |
02:21 | Locate timeEventExample file in your system and click on Open. |
02:28 | You may alternatively use the File menu to open this file. |
02:34 | Note that timeEventExample has appeared in Libraries browser. |
02:39 | Right-click on this icon and select View class. |
02:44 | The model has now opened in Diagram view. |
02:47 | Click on third button which is the Text View. |
02:51 | We have already discussed that model and class are used synonymously in Modelica. |
02:58 | The name of this model is timeEventExample. |
03:02 | Comments such as this may be written on the first line of a model or class. |
03:08 | h, v and g represent the same quantities as in freeFall class. |
03:16 | initial equation section contains initial conditions. |
03:21 | Value of h at time t = 0 is 30m. |
03:26 | Value of v at time t = 0 is 0. |
03:31 | Equation signifies the beginning of equation section of this model. |
03:36 | Now, let us see how to insert the constraint explained in slides. |
03:43 | Note that there is an 'if-else'block in equation section as shown. |
03:48 | Let us try to understand each statement of this 'if-else' block. |
03:53 | 'if' statement places a constraint on time variable. |
03:58 | time is a built-in variable in Modelica. |
04:01 | It need not be explicitly declared in a class or model. |
04:06 | The ball experiences free fall after time 0.5 seconds. |
04:12 | Hence, these two equations represent the same equations as those in freeFall class. |
04:19 | 'else' branch contains equations which are executed when time is less than 0.5 seconds. |
04:27 | The ball is at rest when time is less than 0.5 seconds. |
04:32 | Hence, these two equations hold good in that case. |
04:36 | end if signifies the end of if-else block. |
04:41 | The model is now complete. |
04:44 | Let us simulate it by clicking on Simulate button. |
04:48 | Plotting perspective has now opened. |
04:51 | Select h in the Variables browser. |
04:55 | This generates h versus time plot. |
04:58 | Since the ball is at rest until time t=0.5 seconds, height remains the same. |
05:06 | To delete the result, right click on timeEventExample in Variables browser and select Delete Result. |
05:15 | To go back to Modeling perspective, click on Modeling button at bottom right. |
05:21 | Now, let me delete the second equation in else branch. |
05:26 | Click on Save button in the toolbar, to save this model. |
05:31 | Click on Simulate. |
05:34 | The simulation has failed. |
05:37 | Go to the Messages browser and scroll up to see the error message. |
05:42 | The error message says that the number of equations in each branch should be the same. |
05:49 | Therefore, the number of equations in if and else branches should each be equal to the number of variables. |
05:58 | Let me insert the equation back in its place and click on Save button. |
06:05 | Note that der(h) = v is an equation which is common to both if and else branches. |
06:14 | Hence, the if-else block can be replaced by two statements. |
06:20 | Let me show you how it is done. |
06:23 | Delete the if-else block first. |
06:26 | The equations to be typed here have been provided in a file named if else-statement.txt. |
06:34 | These file is also available in Code Files link. |
06:39 | Since it is a text file, I have used gedit to open it. |
06:45 | Let me go to gedit. |
06:47 | Windows users may open this file using Notepad or any other text editor. |
06:54 | Copy the two equations. |
06:57 | Go back to OMEdit. |
07:00 | Do a right-click and select Paste. |
07:04 | Click on Save button in the toolbar once again. |
07:08 | Click on Simulate. |
07:11 | Close the pop up window. |
07:14 | Select h in the Variables browser once again. |
07:18 | Note that the h versus time plot is the same as in previous case which indicates that both models are the same. |
07:27 | To delete the result, right-click on timeEventExample and select Delete Result. |
07:34 | Click on Modeling button at bottom right. |
07:38 | This is an if-else statement which indicates that if time >= 0.5 dv/dt = g otherwise dv/dt = 0. |
07:52 | Now let me go back to the slides. |
07:55 | Please note that the number of equations in if branch should be equal to the number of equations in else branch. |
08:03 | And, both of them should be equal to the number of variables in the class or model. |
08:10 | Event is an abrupt change in behavior of a system. |
08:15 | Events may be categorized into time events and state events. |
08:20 | In a time event, the time at which event occurs is precisely known. |
08:25 | timeEventExample handles a time event at t = 0.5 seconds |
08:32 | state event occurs when a system variable crosses a certain value. |
08:38 | Let us try to understand state events using an example. |
08:43 | A ball under free fall faces a state event on touching the ground. |
08:48 | The following behavior is observed when it hits the ground. |
08:52 | Velocity of ball reverts in direction. |
08:55 | Magnitude of velocity changes if the collision is inelastic. |
09:00 | I have created a model named bouncingBall to simulate this behavior. |
09:06 | This file is available on Spoken Tutorial Website. |
09:10 | To view this model and simulate it, let me go back to OMEdit. |
09:15 | Click on OpenModel/LIbrary File tool. |
09:19 | Locate bouncingBall file in your system and click on Open. |
09:25 | Right-click on bouncingBall icon in Libraries browser and select View Class. |
09:33 | If the model does not open in Text View, go to the top of modeling area and click on Text View button. |
09:41 | e is coefficient of restitution for inelastic collision of ball with Earth. |
09:48 | It is a parameter and its value remains constant at 0.8 throughout the simulation run. |
09:56 | radius represents the radius of ball in meter. |
10:00 | h, v and g represent the same quantities as in timeEventExample. |
10:07 | These two equations of motions have already been discussed in freeFall class. |
10:13 | when statement is used to signal an event. |
10:17 | It is used to specify the action to be taken when an event occurs. |
10:22 | h <= radius holds true when the ball is in contact with ground. |
10:29 | This statement is executed whenever the event occurs. |
10:34 | reinit() function is used to re-initialize a variable. |
10:39 | Here, it re-initializes velocity of ball with the negative product of e and velocity of ball before touching the ground. |
10:49 | To simulate this model, click on Simulation Setup button in the toolbar. |
10:55 | Under General tab, change Stop Time field to 30 units and click on Simulate. |
11:04 | Close the pop-up window. |
11:06 | Select h in Variables browser. |
11:10 | Note that h drops below zero which is unacceptable. |
11:16 | We have seen similar behavior while simulating freeFall class. |
11:21 | This faulty behavior is due to numerical errors. |
11:25 | A discussion of numerical errors is beyond the scope of this tutorial. |
11:30 | Please refer to Zeno behavior of bouncing ball for a better understanding. |
11:36 | Let me de-select h. |
11:39 | Let us go back to the slides. |
11:42 | when statement is used to signal an event. |
11:45 | reinit(a,b) assigns value of b to variable a and resumes simulation. |
11:54 | pre(a) returns the value of variable a before event. |
11:59 | For example, reinit(a, 10) assigns a value of 10 to a when event occurs. |
12:08 | The faulty behavior of bouncingBall model is corrected in bouncingBallWithHysteresis. |
12:15 | bouncingBallWithHysteresis model is available on spoken tutorial website. |
12:21 | Simulate bouncingBallWithHysteresis and generate h versus time plot. |
12:27 | Notice the difference between bouncingBall and bouncingBallWithHysteresis |
12:33 | This brings us to the end of this tutorial. |
12:36 | Watch the video available at following link. |
12:40 | It summarises the Spoken Tutorial project. |
12:42 | We conduct workshops using spoken tutorials, give certificates. Please contact us. |
12:48 | If you have any questions related to this spoken tutorial, please visit the following website. |
12:55 | Under Textbook Companion Project we coordinate coding of solved examples of popular books. |
13:03 | We give honorarium and certificates to those who do this. For more details, please visit the following website. |
13:10 | Under Lab Migration Project, we help migrate commercial simulator labs to OpenModelica. |
13:17 | For more information please visit the website. |
13:21 | Spoken Tutorial Project is supported by NMEICT, MHRD, Government of India. |
13:28 | We thank the development team of OpenModelica for their support. |
13:33 | Thank you for joining me in this tutorial. Goodbye. |