simulink如何使用C语言实现S-Function

  • 原创
  • |
  • 浏览:4679
  • |
  • 更新:
  • |
  • 标签:C语言 MATLAB 

在这个C语言大行其道的时代,在仿真模型中直接使用它编写模块,可提高工程的兼容性,增强仿真的实用性。simulink的S-Function是常用的用户自定义模块,目前R2016B可直接使用C语言编写该模块。用户只需要在matlab命令中使用mex -setup安装好C语言编译器,然后即可使用mex命令编译C文件。并且可以直接使用C语言的标准库函数,可谓是非常之方便。

simulink如何使用C语言实现S-Function

工具/原料

  • 联想M930S
  • Windows10
  • simulinkR2016B

方法/步骤

  1. 1

    步骤1:打开Simulink的库浏览器,搜索“s-function”,选择“S-Function Builder”拖动到工程当中。注意,不要选择s-function,那个是不能添加C文件的。

    simulink如何使用C语言实现S-Function
  2. 1
    相关内容非法爬取自百度经验
  3. 2

    步骤2:双击新添加的S-Function Builder实例,在其属下对话框选择“Data Properties”,配置好输入输出端口。以输入端口为例,Input ports为输入端口,点击左侧的箭头符号可添加端口。

    simulink如何使用C语言实现S-Function
  4. 3

    步骤3:双击端口名“Port name”可修改端口名称,同时还可修改端口对应的数据类型:维度、复数或实数等。另外还需要在S-function name右侧的文本框输入模块名称,默认为system,确认后点击“Build”编译,软件会根据模块名生成对应的文件。

    simulink如何使用C语言实现S-Function
  5. 4

    步骤4:编译过程中会在“Build Info”选项卡显示当前进度,成功后会显示至少三个文件,包含两个c文件和一个tlc文件,点击文件名可切换至编辑器。

    simulink如何使用C语言实现S-Function
  6. 5

    步骤5:通常xxx_wrapper.c包含一个xxx_Outputs_wrapper()函数,它就是模块的输入输出关系函数。这里的xxx指代具体的模块名,实例中使用的是mySin。用户可以修改该函数内容来实现自己的功能。

     

    simulink如何使用C语言实现S-Function
  7. 6

    步骤6:这里插入一段根据频率和时间产生正弦波的代码,其中所有参数均为指针形式给出,需要使用下标或者指针运算符访问。确认代码后保存文件,然后再matlab命令行输入mex mySin.c mySin_wrapper.c,注意mex后面的文件名是工程中用到的。

    simulink如何使用C语言实现S-Function
  8. 7

    步骤7:mex命令执行成功后会提示“MEX 已成功完成”,此时可回到simulink界面运行看看效果。实例中的模型包含一个S-Function Builder模块,有时间time、频率fre两个输入,一个输出,其中时间直接使用Clock模块产生,频率使用一个常量。由于Clock产生的比较粗糙,这里主时间设置得很短,为0.02秒。另外还有一个Scope观察输出波形。

    simulink如何使用C语言实现S-Function
  9. 8

    程序运行后可以在Scope中按程序生成了一个正弦波。

    simulink如何使用C语言实现S-Function
    END

注意事项

  • 确保c文件在matlab当前路径中,否则会导致编译找不到文件。
  • 每次点击S-Function Builder的Build按钮,会覆盖原来的C文件,请谨慎操作。
  • 注意模块应选择S-Function Builder而不是s-Function。
经验内容仅供参考,如果您需解决具体问题(尤其法律、医学等领域),建议您详细咨询相关领域专业人士。
作者声明:本篇经验系本人依照真实经历原创,未经许可,谢绝转载。
展开阅读全部
相关标签C语言MATLAB