Matlab simulink建模与仿真 第十六章(用户定义函数库)

ops/2024/11/15 4:30:14/

参考视频: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函数简介

(1)S函数的全称为system-functions(系统函数),它主要用于扩展simulink环境(扩展simulink模块的用法)。

(2)S函数可使用多种语言进行编写,如C语言、C++、Python、MATLAB、Fortran等,使用C语言、C++和Fortran这些编译型语言需要借助mex文件。

(3)S函数通过特定语法调用simulink中提供给该S函数的应用程序接口,通过该接口,S函数可以和simulink的计算引擎进行交互。

(4)通过S函数可实现连续系统、离散系统和混合控制系统。

2、S函数相关模块概述

(1)(Level-1 M-file)S-Function模块:

①该模块本身能调用系统函数所实现的功能比Level-2 M-file S-Function模块少得多,其存在的意义是为了兼容旧版本的MATLAB。

②该模块主要是用标志位flag来实现相应的功能的,内部使用switch语句对标志位进行判断,针对各种情况进行代码的编写。

③S函数模板有几个默认参数t、x、u(系统输入信号)和flag,S-Function模块会自动将它们传递给S函数,程序员可以在“S-function parameters”字段中指定其它自定义的输入参数值(如自定义参数不止1个,用逗号进行分隔)。

(2)Level-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函数更为复杂,这里不再进行过多介绍,具体可看官方的帮助文档。

(3)S-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        %根据系统输入求系统输出sys=mdlOutputs(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 sys=mdlDerivatives(t,x,u)
sys = [];%对系统状态进行更新(没有微分操作可不必理会)
function sys=mdlUpdate(t,x,u)
sys = [];%根据系统输入求系统输出
function sys=mdlOutputs(t,x,u,gain,bias)
sys = gain * u + bias;%设置下一个采样时间点相对上一个采样时间点的间隔(仅针对离散系统)
function sys=mdlGetTimeOfNextVarHit(t,x,u)
sampleTime = 1;        %间隔秒数
sys = t + sampleTime;%运行结束后执行清空操作(释放内存,使用MATLAB编写S函数可不必理会)
function sys=mdlTerminate(t,x,u)
sys = [];

http://www.ppmy.cn/ops/114428.html

相关文章

【Linux】Linux进程的概念

一、冯诺依曼体系结构 我们常见的计算机,比如笔记本,我们不常见的计算机,比如服务器,大部分都遵循冯诺依曼体系结构。 截至目前,我们所认识的计算机,都是有一个一个独立的硬件组成: 输入单元&a…

OpenHarmony(鸿蒙南向开发)——标准系统方案之瑞芯微RK3568移植案例(上)

往期知识点记录: 鸿蒙(HarmonyOS)应用层开发(北向)知识点汇总 鸿蒙(OpenHarmony)南向开发保姆级知识点汇总~ OpenHarmony(鸿蒙南向开发)——轻量和小型系统三方库移植指南…

UnLua扩展C++函数和蓝图自定义事件

一、通过BlueprintImplementableEvent标记扩展C函数 1、 这个标记表示C不需要实现,让蓝图/Lua重写。 2、首先在C中将LuaImp函数标记为BlueprintImplementableEvent,不需要实现,然后再GetIndex中调用该函数。 MyBaseActor.h UFUNCTION(Bluepr…

探讨基于AI技术的相亲交友系统设计与实现

摘要 随着人工智能技术的发展,相亲交友领域也开始引入AI技术来改善用户体验,提高匹配成功率。本文探讨了如何利用AI技术设计并实现一个智能化的相亲交友系统,该系统能够根据用户的行为数据和个人偏好,自动推荐合适的潜在伴侣。通…

2024年华为杯中国研究生数学建模竞赛D题(大数据驱动的地理综合问题)思路

问题1:构建描述性统计方法,分析1990-2020年中国范围内降水量和土地利用/土地覆被类型的时空演化特征 解题思路: 数据处理: 使用数据集3中的降水数据集和数据集4中的土地利用/土地覆被数据集。对于降水数据,需要从1961-2022年逐日的降水数据中,提取1990-2020年间的年平均…

研究生第一次刷力扣day1

1.给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出和为目标值target 的那两个整数,并返回它们的数组下标 直接采用暴力求解,其他解答案看不懂 大致思想:先用len函数求出数组的长度n,然后一个个遍…

内网渗透- 内网渗透的基本知识

攻击流程讲解 内网介绍 内网也指局域网,是指在某一区域内由多台计算机互联而成的计算机组,组网范围通常在数千米以内。在局域网中,可以实现文件管理、应用软件共享、打印机共享、工作组内的日程安排、电子邮件和传真通信服务等。内网是封闭的…

【STM32】DAC数字模拟转换

本篇博客重点在于标准库函数的理解与使用,搭建一个框架便于快速开发 目录 前言 DAC简介 DAC配置 DAC时钟使能 GPIO初始化 DAC配置 DAC使能 读写DAC值 驱动代码 MyDAC.h MyDAC.c main.c 前言 大容量的STM32F101xx和STM32F103xx产品才有DAC外设 大容量…