Simulating dynamic tanks in EMSO (Part 2)

This is the sec­ond part of our text “Sim­u­lat­ing a dynamic tank in EMSO”. The first part shows the basic the­ory about EMSO mod­el­ing lan­guage applied to model a dynamic tank. The code to a sin­gle tank was imple­mented and expanded to a set of tanks in series.

Fig. 1. Dynamic tanks in series.

Fig. 1. Dynamic tanks in series.

Last post did the expan­sion of a sin­gle tank to series using codes how­ever, in bigger/more com­plex sys­tems, it could be hard build­ing. In this sense, it should be more inter­est­ing if there is a GUI where a flow­sheet (dia­gram) can be built con­nect­ing blocks in a work­space such as in sequen­tial mod­u­lar sim­u­la­tors (Aspen Plus, HYSYS, etc.)

In EMSO we can attribute an image/icon to a Model adding a new sec­tion calls ATTRIBUTES. The reserved key­words in and out are required to pro­mote the input and out­put data from a model those are phys­i­cally rep­re­sented by the inlet and out­let flows (streams). How­ever, in order to take the block con­nec­tions actived the inlet and out­let flows must be com­pat­i­ble and defined by their own Model. For this pur­pose the “tank_flow” model was cre­ated (lines 3–6).

Thus all con­nec­tions are com­pat­i­ble but the inter­face design dia­gram does not admit a sin­gle block for sim­u­la­tion. One block needs at least one input block. For this a block calls “tank_source_test” (lines 8–15) was cre­ated using the “tank_flow” model. So it rep­re­sents a source block that gets the flow­sheet started.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
using "types";
 
Model tank_flow
    VARIABLES
    F as flow_vol (Brief="Flow");
end
 
Model tank_source_test
    ATTRIBUTES
    Pallete = true;
    Icon = "source_icon";
 
    VARIABLES
out Outlet as tank_flow (Brief="Inlet stream", PosX=1, PosY=0.65);
end
 
Model simple_tank_test
    ATTRIBUTES
    Pallete = true;
    Icon = "tank_icon";
 
    PARAMETERS
    k as Real (Brief="Valve constant", Default=4, Unit='m^2.5/h');
    A as area (Brief="Tank area", Default=2);
 
    VARIABLES
in  Inlet  as tank_flow (Brief="Input flow", PosX=0, PosY=0.17);
out Outlet as tank_flow	(Brief="Output flow", PosX=1, PosY=0.94);
    h      as length	(Brief="Tank level");
 
    EQUATIONS
    "Material balance"
    diff(A*h) = Inlet.F - Outlet.F;
 
    "Valve equation"
    Outlet.F = k*sqrt(h);
end

There­fore “tank_source_test” (lines 8–15) and “simple_tank_test” (lines 17–37) define the blocks that would be load­ing on the pal­lete in Model tab accord­ing to their ATTRIBUTES sec­tions. Icon gives the icon as a PNG image (source_icon.png, tank_icon.png) so that Pal­lete set as true means that the related icon is loaded on the EMSO pal­lete (Model tab). PosX and PosY guide the posi­tions for point con­nec­tions.
Adding our work folder to EMSO library (Con­fig > Libraries > Add Library) and restart­ing it, we will be the new blocks loaded on the EMSO pal­lete of equip­ments.
Now let us build the flow­sheet of 2 tanks as in last post. Firstly cre­ate a new file of type “Dia­gram” so that a “Dia­gram setup” win­dow will open to edit­ing prop­er­ties. Go to “Options” tab and set start time, end time, and step time respec­tively as 0, 2, 0.1 hours. Here­after it already pos­si­ble to build the flow­sheet using the blocks and con­nec­tions. After that you will be some­thing like Fig. 2.

Fig. 2. Flow­sheet diagram

Dou­ble clicks on blocks in the dia­gram open the edit­ing prop­er­ties. For this case you must spec­ify the inlet flowrate and the ini­tial level for the 2 tanks.

For “tank_source”, the vari­able Outlet.F is spec­i­fied as 10 m3/h. For “tank_1” and “tank_2”, the vari­ables h are ini­tial­ized both as 1 m.

Check­ing the con­sis­tency of prob­lem and run­ning the plot results for the out­let tank flowrates will be as shown in Fig. 3.

Fig. 3. Plot results

Related Posts with Thumbnails

What do you think?