首页 > 解决方案 > 如何正确使用“setComponentModifierValue”命令在 OpenModelica 中设置双精度数组

问题描述

   **DICTIONARY CONTENTS CHANGE ORDER! WHY ?**

字典的内容我指定更改顺序!我分配 Fc= {0.25, 0.4, 0.1, 0.001, 0.0491, 0.06},然后在 Python 3.6.7 Shell 中我得到 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)+"))") 的示例,但是当有人想要更改数组时会发生什么. n

在 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}'

标签: pythonopenmodelica

解决方案


不要在 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;

推荐阅读