matlab使用C语言仿真,用的是s-function模块。
基本步骤:
1.安装matlab
2.安装mingW-w64
3.写c语言代码文件和设置s-function模块
一、安装matlab
推荐2022b版本,至少2020b版本,此处省略。
二、安装mingW-w64
注意点:
1.matlab要先登录账号
方法1:
用matlab->附加功能菜单搜索安装(基本上会因为账号问题而不能使用)。
方法2:
使用离线下载安装的方法。
步骤1:在matlab里直接输入:
>> mex -setup -client engine c
会弹出错误报警,点击链接就可以下载离线安装包了。
链接地址:https://ww2.mathworks.cn/support/requirements/supported-compilers.html
下载安装即可。链接:https://pan.baidu.com/s/1sSlptqMIHz0Z8AtS_aMIpw?pwd=c2yn
提取码:c2yn
正确安装后可以用mex命令验证:
三、s-function使用
假设我们要用s-function编写一个boost算法函数,则s-function需要命名为boost。
准备工作:
有了以上的准备工作后,按以下操作
步骤1:
直接调用s-function example,多次选择点击basic mex template模版(用这个模板作为c语言的文件模板)
步骤2:
打开basic mex template模版另存为boost.c文件【需要放在simulink文件相同的目录】,修改以下几个地方
1.修改名字
#define S_FUNCTION_NAME sfuntmpl_basic
改为
#define S_FUNCTION_NAME boost
2.修改采样时间:
/* Function: mdlInitializeSampleTimes =========================================
* Abstract:
* This function is used to specify the sample time(s) for your
* S-function. You must register the same number of sample times as
* specified in ssSetNumSampleTimes.
*/
static void mdlInitializeSampleTimes(SimStruct *S)
{
ssSetSampleTime(S, 0, CONTINUOUS_SAMPLE_TIME);
ssSetOffsetTime(S, 0, 0.0);
}
改为
/* Function: mdlInitializeSampleTimes =========================================
* Abstract:
* This function is used to specify the sample time(s) for your
* S-function. You must register the same number of sample times as
* specified in ssSetNumSampleTimes.
*/
static void mdlInitializeSampleTimes(SimStruct *S)
{
ssSetSampleTime(S, 0, 1e-7);
ssSetOffsetTime(S, 0, 0.0);
}
步骤3:增加编译mex boost.c
点击运行仿真