MATLAB中的s-function代码生成

MATLAB版本2020b

最近用s-function模块生成代码,总结一下:

1、level-1 MATALB S-Function

。。

2、level-2 MATLAB S-Function

level-1不能生成c,只有level-2可以;

level-2分为level-2 MATLAB S-Function和S-Function,如下图,应该是都可以生成C代码的,但是都需要对应同名TLC文件。我用的是level-2 MATLAB S-Function使用M语言编写的。

b8a72fbd28a64f8a8255d50d3c231bc7.png

那么tlc文件哪来呢?根据我目前查阅到的资料,只能自己编写,matlab官方给了很多tlc的模板可以参考编写。

由于我对tlc一窍不通,所以一直想寻找自动生成tlc的方法,暂时还没有找到,如果大家有方法,可以告知于我,感激不尽!。。。又找了两天,不能自动生成。。。。

3、S-Functions

如果接口名称数量固定(可以是多个接口),可使用下列模块:

1)用MATLAB官方模板C-MEX,这个模板是可以生成c代码的。

9d1dd853e2dd475c8f5ae4d7ca287926.png

 

2)S-Function Builder模块,与1)类似。不同的是Builder直接双击会出现一个对话框,在里面进行代码编写(C MEX),完成后点击“builder”,会生成 .c 和对应 .tlc 文件,进而在Simulink中添加其他模块后生成c代码,至于具体如何使用该模块,可以通过help文档学习,后期有时间的话我会补充一下。

fdb522cbfedc4e93a0bb9d7e87768c51.png

4、matlab function

可以直接生成c代码,不需要tlc文件。

1f59d33945954c78b0a8050d5e25f1ad.png

如果接口数量不固定,需要从别的地方取值过来,那么上述模块大概率是不行的,至少目前在我看来是不可以的。

2023.12.19补充:MATLAB Function 输入维度可以设置为可变的,所以在前面添加 mux 模块;输出维度需固定,可以在输出后接数组中数据选择模块进行输出接口定义。

5、Legacy Code Tool工具

Legacy Code Tool工具不可以!它可以实现的是:通过现有c代码生成s-function,同时生成tlc。可通过命令行输入 help legacy_code 查看官方帮助文档,但是不能将已经编写好的s-Function模块生成 .tlc。

找官方例程,在以下路径:

C:\文档\MATLAB\Examples\R2020b\simulink\IntegrateCFcnArgsAreStructuresExample

b536e43b1fc74941980f2c0c4f4e5dbb.png

使用记录:

1)编写.c和.h文件。

2)编写.m文件如下。

Simulink.importExternalCTypes('ex_myTypes_LCT1.h');
def = legacy_code('initialize');  //初始化代码继承工具数据结构体 specs,它用于注册现有 C 或 C++ 代码的特征以及代码继承工具生成的 S-Function 的属性。
def.SFunctionName = 'sfun_ex_mySrc_LCT';  //s-function模块调用的.c的文件命名
def.SourceFiles = {'ex_mySrc_LCT1.c'};    //外部源文件
def.HeaderFiles = {'ex_myTypes_LCT1.h'};  //外部头文件
def.OutputFcnSpec = ['void myFcn(sigStructType u1[1], ',...
    'paramStructType p1[1], sigStructType y1[1])']; 

生成.c、.mexw64、.tlc文件的语句:

legacy_code('generate_for_sim',def); //生成.c、.mexw64、.tlc文件供S-Function模块调用以及c代码生成。

生成.c、.mexw64、.tlc文件供S-Function模块调用以及c代码生成,如下图:

36a98a8886b04e5badc94d9b432bad93.png

 生成S-Function模块语句:

legacy_code('slblock_generate', def); //生成S-Function模块供Simulink仿真使用:

 生成的含S-Function的.slx文件如下图: 

0425eb9ee5004aa3a1655184d6c8c04b.png

 

 

由于我需要接口数量根据mat文件变化,故最终的解决方案是使用MATLAB Function重新开发。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值