c调用matlab模型,关于的集成外部C代码到Simulink模型分析和介绍

我原来写了一些很漂亮的C函数,写得非常不错,想把它集成到Simulink环境中来,怎么办?

点击末尾的“阅读原文”下载本文的案例模型

集成外部C代码到Simulink模型

要得到:

把自己编写的C函数集成到Simulink模型中

怎么做:

Simulink提供了多种方法来集成外部的C代码。从简单到复杂来看,可以:

使用Stateflow;

使用MATLABFunction模块;

使用LegacyCodeTool构造S-fcn模块;

自己写S-fcn

只介绍简单的方法

1.假设已有代码table1D.c以及table1D.h

table1D是个简单的1维查表函数。这是它的函数原型。第1、2个输入是表格数据,第3个输入是表格长度数据,第4个输入就是要查找的x,查到的结果作为返回值。

f90fc505ead097bda5253f27b746ba25.png

2.函数调用

我现在希望在Simulink环境下使用这个查表函数。当前的应用场景是:在给定表格的情况下,通过输入u查出相应的y出来。

aa76012b21be3ed6a628b6eba6a7393c.png

在Stateflow中,参照.h文件里定义的函数原型直接调用这个函数:

c7fdca92e4d315f197af0581f36b6275.png

然后如下图说明一下各个变量:u是这个Chart模块的输入,y是Chart的输出,uMap,yMap,n是固定的表格参数。

e0c3ff6f41b9952d30d3bcb252071ca2.png

在MATLABFunction模块中,需要使用到coder.ceval调用这段代码,引用传递使用coder.rref:

d1cf1838111eba2f332a9c95a5c92c04.png

跟Stateflow类似,在MATLABFunction中也需要对m脚本里用到的各个变量名做一个说明。

3d5534a85653017a6b053f1fb421442d.png

3.在Workspace里定义数据对象

再来看Simulink模型,它现在有4个信号:

aa76012b21be3ed6a628b6eba6a7393c.png

我希望控制这4个信号的名字以及定义方式,所以新建这4个信号对应的数据对象。另外,也给之前的3个参数定义对应的数据对象。

fa41a549f1858c9b742c451f906ab899.png

4.并把该模型生成代码

Ctrl+B,得到如下所示,两句函数调用的语句:

4efdccaa9c58c3fc43f531693539f9a9.png

另外,为了保证模型的正确编译链接,生成代码之前还需要在源文件中include手写的.h文件。如图,要在模型.h文件中增加这一行include的代码。

d584894b0f48404d1787900cbdd41229.png

那这一行include是怎么加进去的呢?如下页面得到:

98999d3f392882d8d302b7e3028ea96a.png

总结

使用Stateflow以及MATLABFunction模块可以很方便的集成外部的C代码。

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值