2015-03-13 24 views
1

我有我創建作爲一個坦克模型如下:限制罐流時的水平<= 0的Modelica

model Tank "Simple model of a tank" 
    parameter Real volume=1 "tank volume (m^3)"; 
    parameter Integer num_ports=1 "Number of ports"; 
    parameter Real static_pressure=1 "Internal Tank Pressure"; 
    parameter Real initial_level = 0; 
    Stream[num_ports] ports "Stream Connectors"; 
    Real level "Level in % 0-100"; 
    protected 
    Real vol "Volume of medium in the tank"; 
    Real pressure(start=static_pressure) "Pressure inside the tank"; 

    initial equation 
    level = initial_level; 

    /* Pressure */ 
    equation 
     pressure = vol * 0.01; // Add correct factor here to get from volume to pressure change (based on height and head) 
     for i in 1:num_ports loop 
     ports[i].pressure = static_pressure + pressure; 
     end for; 

    /* Volume Flow */ 
    equation 
     der(vol) = sum(ports.m_flow); // Add density factor to get form mass flow to Volume Flow 
     level = vol * 100/volume; 

    end Tank; 

我怎樣才能讓這個當電平< = 0的坦克將不允許任何負值的流量(沒有端口可以流體流出,但流體仍然可以進入)?我覺得我缺少一些微不足道的東西,但似乎無法找到一種方法,沒有太多的方程式(超定系統)。

感謝

回答

1

你可以嘗試用時等式:

when level < 0 then 
    reinit(level, 0) 
end when; 
+0

什麼是重新發起功能Modelica的呢? – 2015-03-13 18:09:40

+0

它將變量重新初始化爲新值,請參閱Modelica規範: https://modelica.org/documents/ModelicaSpec33Revision1.pdf – 2015-03-13 18:19:52

+0

我猜在什麼時候應該是級別<0而不是<=的條件,因爲它會觸發等式再次。 – 2015-03-13 18:21:20