2014-10-01 40 views
0

您好,我有一些關於事件和Modelica時的困惑。以下是我的代碼:當和如果在Modelica

model test 
    Integer bar(start=5, fixed=true); 
equation 
    when (time < 2) then 
    bar = 1; 
    end when; 
    annotation(experiment(StopTime=3)); 
end test; 

我的問題是爲什麼我得到5而不是1,當時間少於2?在這種情況下,我如何理解事件(時間< 2)? Modelica和其他編程語言中的when子句有什麼不同,如c。

回答

1

托比亞斯的回答是正確的。但我認爲對於初學者來說,調用pre結構或將它們發送到規範可能有點令人生畏。因此,除了托比亞斯的回答,我還會在我的書中指出感興趣的讀者this question以及this chapter。具體的興趣(我懷疑)將是this subsectionwhen和它如何不同於if

2

when公式只有在條件變爲爲真時纔有效。在你的情況下,條件time < 2從一開始就是真實的,只有變成錯誤。

when - 塊可以故意翻譯成

b = time < 2; 

if not(pre(b)) and b then 
    bar = 1; 
else 
    bar = pre(bar); 
end 

欲瞭解更多信息,可以諮詢規範https://modelica.org/documents/ModelicaSpec33Revision1.pdf

+0

您的意思是BECOME,表示條件應該從FALSE變爲TRUE。謝謝。 – Wei 2014-10-01 19:43:09

+0

@ user3658215是的,'成爲'的重點很重要。謝謝你的評論。我在這方面修改了答案。 – Tobias 2014-10-02 06:12:33