Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/159.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C/C++;SIMULINK模型的包装器_C++_Matlab_User Interface_Wrapper_Simulink - Fatal编程技术网

C++ C/C++;SIMULINK模型的包装器

C++ C/C++;SIMULINK模型的包装器,c++,matlab,user-interface,wrapper,simulink,C++,Matlab,User Interface,Wrapper,Simulink,我在VisualStudio和Eclipse中有一个非常大的C/C++软件项目。有一些第三方软件以SIMULINK模型的形式出现。目前是否可以: 1) 为SIMULINK模型编写C/C++包装函数? 2) 从外部环境(如VS或EclipseC/C++项目)调用函数以执行集成和其他任务 我知道您可以使用MEX(MatlabExec.)函数,这些函数是C/C++或FORTRAN包装的,供MATLAB使用。但这对我来说并不理想 用例 我的用例是基于建模和仿真的,但是我的子系统在数据格式方面是非常不同的

我在VisualStudio和Eclipse中有一个非常大的C/C++软件项目。有一些第三方软件以SIMULINK模型的形式出现。目前是否可以:

1) 为SIMULINK模型编写C/C++包装函数? 2) 从外部环境(如VS或EclipseC/C++项目)调用函数以执行集成和其他任务

我知道您可以使用MEX(MatlabExec.)函数,这些函数是C/C++或FORTRAN包装的,供MATLAB使用。但这对我来说并不理想

用例

我的用例是基于建模和仿真的,但是我的子系统在数据格式方面是非常不同的。50%是C/C++,35%是SIMULINK模型,其余是二进制可执行文件、目标代码、符号数据等。我正在做一些复杂的系统建模;很抱歉,由于保护原因,无法进一步告诉您

从我得到的答案来看,人们似乎热衷于使用Mathworks提供的东西。我的意图是得到更像是不是的答案,但到目前为止,我也得到了很好的解释

更新


我将不得不评估SIMULINK的嵌入式编码器,并查看在抛光生成的代码时需要付出多少额外的努力。我读到嵌入式编码器中有生产级代码生成设施;应该很有趣。

根据您的具体需求,有两种选择:

  • 使用Simulink编码器将Simulink模型转换为C。这将有效地使您脱离Simulink环境,因此将模型功能集成到现有环境与合并任何其他C代码完全相同。当然,您需要访问Simulink编码器才能执行此操作

  • 打电话给警察。注意,不能仅调用Simulink。调用MATLAB并发出各种MATLAB命令来加载、执行和查询Simulink模型


谢谢您的回答。我已经知道SIMULINK编码器(ex-RT研讨会)。很抱歉,我在问题中没有提到这一点。问题是生成的代码效率不高,结构也不好。对于大型+复杂系统,例如4级涡轮发动机,12-13 SIMULINK模型的生成代码将是一个需要修复的噩梦。另外还有一个风险,即如果您在模型中有任何更改(客户更改),则生成的代码需要重新生成以及其他事情。我们还必须小心那些第三方模型的供应商知识产权。@hagubear Simulink Coder背后的想法是,出于您提到的原因,不要编辑生成的代码。模型成为黄金参考,而不是代码。如果代码不够高效,您可能需要使用嵌入式编码器对其进行优化和定制,该编码器旨在生成生产代码(而不是原型代码)。如果您要将调用合并到十几个或更多单独的模型中,则不可能使用MATLAB API方法。您需要有一个流程,其中标记对模型的任何更改并重新生成代码(如am304所述,使用嵌入式编码器)。另外,我不确定IPR是从哪里来的——保护编译模型要比保护Simulink.slx模型容易得多。@PhilGoddard仅仅因为有Simulink代码生成器并不一定意味着这是唯一的方法,至少我是这么认为的。SIMULINK似乎只提供S函数(用于在模型中调用遗留C/C++代码)和嵌入式编码器。我很想知道反过来是否可行,因为LabVIEW提供了这种功能。此外,我目前拥有MATLAB/SIMULINK许可证,但维护所有工具箱/区块集的成本高得离谱。此外,我的产品需求也在显著增长,并指向从Mathworks购买的额外区块集:(你最初的问题很清楚,你想要一个外部应用程序(用C++编写)调用Simulink。但同样,我的答案(我认为很清楚)如果说是,那是可能的。这可以通过调用MatlabAPI(来自C代码)来实现在答案中的链接中给出。我认为这不是正确的方法,系统越复杂,我越相信代码生成方法是正确的方法。似乎您不想使用任何主流方法访问simulink生成的代码。您希望做什么?@macduff,因为有代码生成器并不意味着我必须使用它。我试图找出是否可以使用C/C++包装来调用SIMULINK模型。我试图做的是创建一个复杂的系统,其中子系统设计要么在SIMULINK模型中,要么在C/C++源代码中,要么在可执行应用程序中,要么在对象文件中,要么在二进制数据中,等等关于详细信息,很抱歉,由于保密原因,我无法透露。您可以调用Matlab,使用TCP/IP或其他IPC进行联合仿真,以便在联合仿真期间与模型进行通信。但是,如果生成的c代码不够有效,则可能也缺少这种方法。@macduff我很高兴您理解了!我非常确定MATLAB的代码生成器不够好。SIMULINK的一个-我不确定,目前正在尝试中。我很想尝试一下你所说的TCP通信。那么,我应该“伪造”吗那么,远程执行my.m脚本?虽然这是可能的,但需要付出合理的努力。如果可能,请使用Simulink生成的代码。