Simulink之S-function函数笔记之二

本文章用来做simulink的S-function函数的学习笔记:


  1. 自动生成s-function:s-function builder根据要求和c语言代码来构建一个s-function块。
    新建simulink模型,从library browser中拖拽出s-function builder块这里写图片描述
    双击s-function builder,打开其对话框。
    这里写图片描述
    对话框中可以设置s-function名字、参数、库等。先在命令行中输入mex -setup配置,再点击build按键开始创建。创建过程中,生成三个文件:mysfun.c, mysfun_wrapper.c, mysfun .tlc。其中mysfun.c包含所生成的s-function标准部分的源代码,mysfun_wrapper.c包含了在对话框中输入的客户代码,mysfun.tlc允许simulink在加速模式下运行所生成的s-function,并允许RTW包含由该s-function生成的代码。

  2. simulink 如何与C S-function 相互作用
    从两个层面来介绍这种相互作用,进程层面(在仿真的哪一时刻simulink调用s-function)和数据层面(在仿真时simulink与s-function如何交换信息)。
    进程层面:
    下图为simulink调用s-function回调函数的顺序:这里写图片描述
    实线框部分表示在模型初始化或每个仿真步长内需使用的回调函数;虚线框部分表示在初始化阶段或在仿真循环的一些或所有采样步长内使用的回调函数。这里写图片描述
    数据层面:
    s-function块具有输入和输出信号、参数、以及内部状态,再外加其它一般的工作域。一般对于块输入和输出信号的读写通过一个块I/O向量来,也可以来源于外部输入或接地输入。快输出可以通过根输出端口块传递到外部输出。这里写图片描述

  3. s-function可以通过两种渠道(指针或相邻的输入)来访问输入信号。

    指针访问:
    通过函数InputRealPtrsType uPtrs = ssGetInputPortRealSignalPtrs(S, portIndex)
    来访问输入信号,这是个指针数组,portIndex从0开始,每个输入端口都有一个索引号,访问该信号的一个元素使用*uPtrs[element]。这里写图片描述
    输入数组指针能够指向内存中非相邻的单元。使用real_T *y = ssGetOutputPortSignal(S, outputPortIndex);获取输出信号。

    访问相邻的输入信号:
    通过使用ssSetInputPortRequiredContiguous宏,S-function的mdlInitializeSizes函数可以指定其输入信号的元素必须占据相邻的内存区间。如果输入是相邻的,其它函数可以使用ssGetInputPortSignal来访问输入。

    输入指针数组能够指向块I/O向量中的非相邻入口,特定端口的输出信号组成了一个相邻的向量。访问输入元素并将它们写入输出元素的代码:
    int_T element;
    int_T portWidth = ssGetInputPortWidth(S, inputPortIndex);
    InputRealPtrsType uPtrs = ssGetInputPortRealSignalPtrs(S, inputPortIndex);
    real_T *y = ssGetOutputPortSignal(S, outputPortIdx);
    for(element = 0; element<portWidth; element++){
    y[element] = *uPtrs[element];
    }


如果有什么错误望指教。
参考:《MATLAB的S-function编写指导》。

  • 4
    点赞
  • 68
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值