python - 如何正确使用“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}'
解决方案
不要在 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;
推荐阅读
- javascript - 使用 NextJS Link 时 ExpressJS 中间件不工作
- javascript - 将鼠标悬停在特定列表元素上时显示文本
- php - PHP ID 未定义
- sql-server - 将 CSV 从 PowerShell 导入 SQL Server
- angular - sass 文件中的更改未被重新殖民化为有效
- react-native - 无法使用领域构建我的应用程序。抛出错误,说在 iOS 中找不到领域的构造函数,并且无法在 android 中配置领域
- javascript - req.body 和 res.render 变得不完整 Vaule
- python - 如何创建管理员无法更改的模型?
- c# - 改善字符串内存分配的方法
- testing - 是否可以在测试脚本中使用元数据?