- 1、本文档共4页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Dymola使⽤C语⾔间接调⽤含第三⽅库Python⽂件流程
Dymola函数中调⽤python
⼀、语⾔配置介绍
Dymola Dymola 2022 trail version
C/C++与python见上⼀篇
⼆、Dymola simulation配置
Dymola中simulation选择之前配置好的Visual Studio C/C++编译器,务必选择使⽤DDE sever,如下图
三、简单案例测试
⾸先新建⽂件夹UserModels,在Dymola中新建packge,命名为UserModels放⼊UserModels⽂件夹中。在UserModels包中新建新
packge命名为UserFunctions,并在UserFunctions中新建函数callpython⽤于测试python函数调⽤,同时在UserModels包中新建
CtoPython模型测试函数调⽤。结构如下图所⽰
注 此处如果直接函数右键call funciton测试,不会调⽤DDE sever,会导致调⽤C/C++时默认采⽤x86环境,与64位python冲
突。
之后在UserModels⽂件夹中新建Resource⽂件夹,内部保存的是需要调⽤的C⽂件squarenum.c与python⽂件test_python.py。选择
打开UserModels包并将⼯作 ⽬录转移到UserModels包,新建的callpython函数与CtoPython模型代码如下
package UserModels
package UserFunctions
function callpython
input Real input_ num;
output Real output_ num;
external C output_ num squarenum(input_ num)
annotation(IncludeDirectory modelica:// UserModels.Resource,
Include #include \squarenum.c\) ;
end callpython;
end UserFunctions;
model CtoPython
Real x(start 1.0), y ;
equation
der(x) 1;
y UserFunctions.callpython(x) ;
annotation (Icon(coordinateSystem(preserveAspectRatio false)), Diagram(
coordinateSystem(preserveAspectRatio false))) ;
end CtoPython;
end UserModels;
′
可以看到,CtoPython中f (x) = 1,即表⽰x从 1开始递增,y则是通过c引⽤的python中的numpy的square函数等于x的平⽅。需要注
意的是,引⽤外部C⽂件路径如下表⽰
IncludeDirectory= “modelica://UserModels.Resource”
其中modelica://表⽰刚刚打开并重新定位的程序运⾏路径,此处需要填写UserModels.Resource⽽不能只写Resource,这是modelica
相对位置引⽤的规则。
接下来是C⽂件squarenum.c:
#include Python.h
#include stdio.h
double squarenum(double input_ num){
double output_ num 0;
Py_ Initialize() ;
PyObject* pModule NULL;
PyObject* pFunc NULL;
PyObject* args Py_ BuildValue((d), input_ num) ;
// 此处注意函数路径 !!!!
pModule PyImport_ ImportModule(Resource.test_ python) ;
if (pModule ! NULL){
文档评论(0)