西安百度网站快速排名,网店推广方法有哪些,返利淘客网站源码,做英文网站賺钱参考视频#xff1a;simulink1.1simulink简介_哔哩哔哩_bilibili
一、用户定义函数库中的模块概览 注#xff1a;MATLAB版本不同#xff0c;可能有些模块也会有差异#xff0c;但大体上区别是不大的。
二、Fcn/Matlab Fcn模块
1、Fcn模块 双击Fcn模块#xff0c;在对话…参考视频simulink1.1simulink简介_哔哩哔哩_bilibili
一、用户定义函数库中的模块概览 注MATLAB版本不同可能有些模块也会有差异但大体上区别是不大的。
二、Fcn/Matlab Fcn模块
1、Fcn模块 双击Fcn模块在对话框中可配置一个表达式其中用u表示输入u可以是向量甚至是矩阵表达式可使用MATLAB中的函数表达式的计算结果即为Fcn模块的输出。 2、Matlab Fcn模块
1该模块的作用和Fcn模块差不多不过它的可操作性更强Fcn模块根据表达式求结果而Matlab Fcn模块根据函数求结果另外该模块的边框是粗黑线条意味着编译模型时该模块是独立编译的。
2双击该模块可打开一个代码编辑窗口在这里可以编辑该模块中的函数。 三、S函数仅了解
1、S函数简介
1S函数的全称为system-functions系统函数它主要用于扩展simulink环境扩展simulink模块的用法。
2S函数可使用多种语言进行编写如C语言、C、Python、MATLAB、Fortran等使用C语言、C和Fortran这些编译型语言需要借助mex文件。
3S函数通过特定语法调用simulink中提供给该S函数的应用程序接口通过该接口S函数可以和simulink的计算引擎进行交互。
4通过S函数可实现连续系统、离散系统和混合控制系统。
2、S函数相关模块概述
1Level-1 M-fileS-Function模块
①该模块本身能调用系统函数所实现的功能比Level-2 M-file S-Function模块少得多其存在的意义是为了兼容旧版本的MATLAB。
②该模块主要是用标志位flag来实现相应的功能的内部使用switch语句对标志位进行判断针对各种情况进行代码的编写。
③S函数模板有几个默认参数t、x、u系统输入信号和flagS-Function模块会自动将它们传递给S函数程序员可以在“S-function parameters”字段中指定其它自定义的输入参数值如自定义参数不止1个用逗号进行分隔。 2Level-2 M-file S-Function模块
①该模块使用回调函数的方式在运行过程中通过调用相应的变量来实现函数调用的功能。
②该模块允许程序员使用MATLAB创建自定义模块这些模块可以有多个输入和多个输出并能够处理由simulink模型产生的任何类型的信号。
③Level-1 M-file S-Function模块的S函数引导行即第一行中有非常多的参数和返回值而Level-2 M-file S-Function模块的S函数引导行只有一个函数参数block且没有返回值同时在引导行下方调用setup函数参数为block建立一个局部的block对象作为运行时对象接下来S函数的执行都围绕这个block对象。
④Level-2 M-file S-Function模块的S函数较Level-1 M-file S-Function模块的S函数更为复杂这里不再进行过多介绍具体可看官方的帮助文档。 3S-Function Builder模块
①该模块可以使用C语言和C编写S函数适用于初次使用C语言或者C编写S函数的编程人员。 ②使用C语言和C编写S函数的过程比较复杂本章不会对此进行深入介绍。
3、S函数使用示例
1模型如下图所示常量5为系统的输入信号u。 2以下是根据Level-1 M-file S-Function模块S函数模板改制的函数函数名为mysfun其中gain和bias为自定义输入参数在本例中分别定为3和4。
function [sys,x0,str,ts,simStateCompliance] mysfun(t,x,u,flag,gain,bias) %gain和bias为非模板参数,其它均为S函数模板需要的参数
%t-仿真时间x-状态变量针对存在状态方程的情况也就是系统可进行微分和积分u-系统输入flag-标志位
%sys-系统输出x0-状态初始值str-保留暂无作用ts-[采样周期 采用时间偏移值]连续系统中采样周期为0
%%%%%%simStateCompliance-允许取值有“DefaultSimState”默认仿真状态、“HasNoSimState”无仿真状态%和“DisallowSimState”禁止仿真状态如不进行设置则默认为“UknownSimState”未知仿真状态
%%%%%
switch flag %判断标志位区分各种情况case 0 %标志位为0进行初始化[sys,x0,str,ts,simStateCompliance]mdlInitializeSizes;case 3 %根据系统输入求系统输出sysmdlOutputs(t,x,u,gain,bias);case{1,2,4,9} %未使用的几种情况sys[];otherwise %系统出错DAStudio.error(Simulink:blocks:unhandledFlag, num2str(flag));
end%初始化函数mdlInitializeSizes
function [sys,x0,str,ts,simStateCompliance]mdlInitializeSizes
sizes simsizes; %生成S函数使用的结构体
sizes.NumContStates 0; sizes.NumDiscStates 0; %连续状态数目和离散状态数目
sizes.NumOutputs 1; sizes.NumInputs 1; %输出端口数目和输入端口数目
sizes.DirFeedthrough 1; %是否有前馈0代表有1反之
sizes.NumSampleTimes 1; %采样时间的数目至少需要一个采样时间sys simsizes(sizes); %结构体返回
x0 []; %初始状态
str []; %保留参数暂时不用
ts [0 0]; %[采样周期 采用时间偏移值]
simStateCompliance UnknownSimState; %默认仿真状态%对系统输入求微分无状态变量可不必理会
function sysmdlDerivatives(t,x,u)
sys [];%对系统状态进行更新没有微分操作可不必理会
function sysmdlUpdate(t,x,u)
sys [];%根据系统输入求系统输出
function sysmdlOutputs(t,x,u,gain,bias)
sys gain * u bias;%设置下一个采样时间点相对上一个采样时间点的间隔仅针对离散系统
function sysmdlGetTimeOfNextVarHit(t,x,u)
sampleTime 1; %间隔秒数
sys t sampleTime;%运行结束后执行清空操作释放内存使用MATLAB编写S函数可不必理会
function sysmdlTerminate(t,x,u)
sys [];