延伸,並具有一些另外的我接受了答案,我想給另一種解決方案是不那麼有效。對於一個帶有電容和電阻的簡單模型,我做了成功的測試,但使用更復雜的模型,它不能正常工作。在一個Modelica的腳本,realTimeSimulation.mos:
outputFile := "stepResult.mat";
simulation_step := 1;
start_time := 0;
stop_time := start_time+simulation_step;
loadFile("WhereverTheFileIs.mo");
buildModel(myTestModel);
system("myTestModel-override=startTime="+String(start_time)+",stopTime="+String(stop_time)+" -r="+outputFile);
將構建模型和模擬第一步驟直到仿真時間t = 1秒。稍後,使用Python將更新文本文件。 t = 1s和t = 2s之間時間的新數據被寫入到獲取模型輸入的文本文件中。然後模擬的另一個步驟是t = 1s到t = 2s之間的時間。作爲一個循環,它會像永遠一樣繼續下去:實現數據,爲新的時間間隔進行新的模擬。關鍵是,閱讀在每個步驟結束創建的輸出文件,並讓所有的變量值作爲新的初始條件的模擬,使用以下腳本:
valueList := readSimulationResultVars(outputFile);
start_time := start_time+simulation_step;
stop_time := stop_time+simulation_step;
value := val(OpenModelica.Scripting.stringVariableName(valueList[1]),start_time,outputFile);',
variableString := valueList[1] + "=" + String(value);
for i in 2:size(valueList,1) loop
value := val(OpenModelica.Scripting.stringVariableName(valueList[i]),start_time,outputFile);
variableString := variableString + "," + valueList[i] + "=" + String(value);
end for;
system("myTestModel-override startTime="+String(start_time)+",stopTime="+String(stop_time)+",variableString+" -r="+outputFile);
這是我一直在尋找,我接受答案。我不知道如何進行部隊更新。還有一個問題,有沒有辦法檢查模擬的輸出?因爲當我們這樣做時,模擬不會實際結束,並且沒有生成outfut文件。 – Falsterbo