Как правильно использовать команду «setComponentModifierValue» для установки массива двойников в OpenModelica - PullRequest
0 голосов
/ 22 января 2019
   **DICTIONARY CONTENTS CHANGE ORDER! WHY ?**

Содержанию словаря я назначаю порядок изменения! Я назначаю Fc = {0,25, 0,4, 0,1, 0,001, 0,0491, 0,06}, а затем в оболочке Python 3.6.7 я получаю Fc = '{0,25, 0,4, 0,1, 0,06, 0,0491, 0,001}'. Почему это происходит? Моя цель - использовать команду setComponentModifierValue для изменения значений модификаторов симуляции.

Я нашел только пример с переменной b = 0.5 omc.sendExpression ("setComponentModifierValue (structure_test_final_no_payload, Fc, $ Code (=" + str (b) + "))"), но что происходит, когда кто-то хочет изменить массив. п

В OpenModelica Fc определяется как: параметр Real Fc [6] = {0,55, 1,2, 0,5, 0,05, 0,0491, 0,08}

и результат omc.sendExpression ("getComponentModifierValue (structure_test_final_no_payload, Fc)") является {0,55, 1,2, 0,5, 0,05, 0,0491, 0,08} '

Вместо '{0.25,0.4,0.1,0.001,0.0491,0.06}'

Я получаю '{0,25, 0,4, 0,1, 0,06, 0,0491, 0,001}'

1 Ответ

0 голосов
/ 23 января 2019

Не используйте фигурные скобки {...} в Python, это наборы без порядка. Вместо этого используйте списки.

from OMPython import OMCSessionZMQ
omc = OMCSessionZMQ()
x = omc.sendExpression("cd()")
print("Got:" + str(x) + "\n");  
loadFile = "loadFile(\"" + str(x) + "/m.mo\")"
print("loadFile: " + loadFile + "\n")
x = omc.sendExpression(loadFile)
print("Got:" + str(x) + "\n")
x = omc.sendExpression("getErrorString()")
print("Got:" + str(x) + "\n")
x = omc.sendExpression("getComponentModifierValue(structure_test_final_no_payload, Fc)")
print("Got:" + str(x) + "\n")

Fc= [0.25, 0.4, 0.1, 0.001, 0.0491, 0.06]
print("Fc: " + str(Fc) + "\n")
strFc = "{" + ",".join(map(str, Fc)) + "}"
print("strFc: " + strFc + "\n")
x = omc.sendExpression("setComponentModifierValue(structure_test_final_no_payload, Fc, $Code(="+strFc+"))")
print("Got:" + str(x) + "\n")
x = omc.sendExpression("getErrorString()")
print("Got:" + str(x) + "\n")
x = omc.sendExpression("getComponentModifierValue(structure_test_final_no_payload, Fc)")
print("Got:" + str(x) + "\n")
x = omc.sendExpression("list(structure_test_final_no_payload)")
print("Got:" + str(x) + "\n")

Результат запуска:

$ /e/bin/python64/python test.py
2019-01-22 22:56:23,647 - OMPython - INFO - OMC Server is up and running at file:///c:/users/adrpo33/appdata/local/temp/openmodelica.port.558379ad46714b13bcd0c6aeb065c0a4 pid=22996
Got:C:/home/adrpo33/dev/OMTesting/python
loadFile: loadFile("C:/home/adrpo33/dev/OMTesting/python/m.mo")
Got:True
Got:
Got:{0.55, 1.2, 0.5, 0.05, 0.0491, 0.08}
Fc: [0.25, 0.4, 0.1, 0.001, 0.0491, 0.06]    
strFc: {0.25,0.4,0.1,0.001,0.0491,0.06}    
Got:Ok    
Got:    
Got:{0.25, 0.4, 0.1, 0.001, 0.0491, 0.06}
Got:model structure_test_final_no_payload
  parameter Real Fc[6] = {0.25, 0.4, 0.1, 0.001, 0.0491, 0.06};
end structure_test_final_no_payload;

Файл m.mo содержит:

model structure_test_final_no_payload
  parameter Real Fc[6] = {0.55, 1.2, 0.5, 0.05, 0.0491, 0.08};
end structure_test_final_no_payload;
...