Matlab simulink建模与仿真 第十六章(用户定义函数库)
参考视频: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 = [];相关文章:
Matlab simulink建模与仿真 第十六章(用户定义函数库)
参考视频:simulink1.1simulink简介_哔哩哔哩_bilibili 一、用户定义函数库中的模块概览 注:MATLAB版本不同,可能有些模块也会有差异,但大体上区别是不大的。 二、Fcn/Matlab Fcn模块 1、Fcn模块 双击Fcn模块,在对话…...
每天练打字2:今日状况——完成击键5第1遍,赛文速度74.71
今日跟打:604字 总跟打:99883字 记录天数:2435天 (实际没有这么多天,这个是注册账号的天数) 平均每天:41字 练习常用单字中500,击键5,键准100%,两遍。&#x…...
给新人的python笔记(一)
元组与列表 元组使用圆括号()而不是[]列表的元素可以修改,但元组的元素不能修改 创建元组 menu1 (meat,fish,chicken) 访问元组 print(menu[1:3]) 修改元组 不支持 元组内置函数 len(tuple):计算元组中元素个数;…...
如何实现异步并发限制
如何实现异步并发限制 文章目录 如何实现异步并发限制方法1注意点 方法2题目要求实现方法注意点 之前一直没有系统的去总结异步并发限制的实现思路,今天就来做个总结吧 方法1 只有一个变量 pool:代表正在执行中的任务中的集合 function sleep(name, t…...
孙怡带你深度学习(2)--PyTorch框架认识
文章目录 PyTorch框架认识1. Tensor张量定义与特性创建方式 2. 下载数据集下载测试展现下载内容 3. 创建DataLoader(数据加载器)4. 选择处理器5. 神经网络模型构建模型 6. 训练数据训练集数据测试集数据 7. 提高模型学习率 总结 PyTorch框架认识 PyTorc…...
如何在Android上实现RTSP服务器
技术背景 在Android上实现RTSP服务器确实是一个不太常见的需求,因为Android平台主要是为客户端应用设计的。在一些内网场景下,我们更希望把安卓终端或开发板,作为一个IPC(网络摄像机)一样,对外提供个拉流的…...
代理导致的git错误
问题: 今天在clone时出现如下错误: fatal: unable to access https://github.com/NirDiamant/RAG_Techniques.git/: Failed to connect to 127.0.0.1 port 10089 after 2065 ms: Couldnt connect to server真是让人感到奇怪!就在前天&#…...
Ready Go
本文首发在这里 温馨提示 XX年,指的是20XX年,后跟以前、以后之类,均包含本数链接较多,只是想言之有物,已拒绝相同外链,仅看关心的即可已尽量只引用自己的东西,16年后仓库(11/13),2…...
Matlab simulink建模与仿真 第十三章(信号通路库)
参考视频:simulink1.1simulink简介_哔哩哔哩_bilibili 一、信号通路库中的模块概览 1、信号通路组 注:部分模块在第二章中有介绍,本章不再赘述。 2、信号存储和访问组 二、总线分配模块 Bus Assignment模块接受总线作为输入,并…...
Java中接口和抽象类的区别(语法层面的区别、设计理念层面的区别)
文章目录 1. 语法层面的区别1.1 成员属性1.2 成员方法1.3 关系 2. 设计理念层面的区别(重点)3. 举例理解抽象类和接口在设计理念层面的区别3.1 例一:门和警报3.2 例二:招聘3.3 例三:装修房子 4. 总结 1. 语法层面的区别…...
Leetcode面试经典150题-20.有效的括号
给定一个只包括 (,),{,},[,] 的字符串 s ,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。每个右括号都有一个对应的相同类型的左括…...
Git常用指令大全详解
Git常用指令大全详解 Git,作为目前最流行的分布式版本控制系统,其强大的功能和灵活性为开发者提供了极大的便利。无论是个人项目还是团队协作,Git都扮演着不可或缺的角色。本文将详细总结Git的常用指令,帮助大家更好地掌握这一工…...
面试真题-TCP的三次握手
TCP的基础知识 TCP头部 面试题:TCP的头部是多大? TCP(传输控制协议)的头部通常是固定的20个字节长,但是根据TCP选项(Options)的不同,这个长度可以扩展。TCP头部包含了许多关键的字…...
LabVIEW多语言支持优化
遇到的LabVIEW多语言支持问题,特别是德文显示乱码以及系统区域设置导致的异常,可能是由编码问题或区域设置不匹配引起的。以下是一些可能的原因及解决方案: 问题原因: 编码问题:LabVIEW内部使用UTF-8编码,但…...
身份证阅读器API模式 VUE Dorado7
VUE 新框架 // 身份证扫描 readIdCard(type) {// 1.连接axios.get(http://localhost:19196/openDevice).then(res > {if (res.data.resultFlag 0) {// 2.读卡axios.get(http://localhost:19196/readCard).then((res) > {if (res.data.resultFlag 0) {// this.$message…...
北京通州自闭症学校推荐:打造和谐学习氛围,助力孩子成长
在北京通州,寻找一所能够全面关注自闭症儿童成长、提供高效康复服务的学校,星贝育园无疑是众多家庭的首选。作为全国知名的广泛性发育障碍全托寄宿制儿童康复训练机构,星贝育园以其专业的康复方法、强大的师资力量和贴心的服务,为…...
openstack之cinder介绍
概念 cinder 为虚拟机提供管理块存储服务。支持的文件系统:lvm、iscsi、nfs、san、RBD 组件构成及功能介绍 cinder api:在控制节点运行,管理服务的接口,被命令行、其他组件调用; cinder scheduler:类似n…...
第k个排列 - 华为OD统一考试(E卷)
2024华为OD机试(E卷D卷C卷)最新题库【超值优惠】Java/Python/C合集 题目描述 给定参数n,从1到n会有n个整数:1,2,3,.,n,这n个数字共有 n!种排列。按大小顺序升序列出所有排列情况,并-一标记,当n3时,所有排列…...
清理C盘缓存,电脑缓存清理怎么一键删除,操作简单的教程
清理C盘缓存是维护电脑性能、释放磁盘空间的重要步骤。以下是一个详细且操作简单的教程,旨在帮助用户通过一键或几步操作完成C盘缓存的清理。 1.使用Windows系统自带工具 磁盘清理 1.打开磁盘清理工具: -按下“WinE”打开文件资源管理器…...
网络安全-ssrf
目录 一、环境 二、漏洞讲解 三、靶场讲解 四、可利用协议 4.1 dict协议 4.2 file协议 4.3 gopher协议 五、看一道ctf题吧(长亭的比赛) 5.1环境 5.2开始测试 编辑 一、环境 pikachu,这里我直接docker拉取的,我只写原…...
springboot 百货中心供应链管理系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,百货中心供应链管理系统被用户普遍使用,为方…...
高等数学(下)题型笔记(八)空间解析几何与向量代数
目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...
Linux云原生安全:零信任架构与机密计算
Linux云原生安全:零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言:云原生安全的范式革命 随着云原生技术的普及,安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测,到2025年,零信任架构将成为超…...
工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配
AI3D视觉的工业赋能者 迁移科技成立于2017年,作为行业领先的3D工业相机及视觉系统供应商,累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成,通过稳定、易用、高回报的AI3D视觉系统,为汽车、新能源、金属制造等行…...
AI书签管理工具开发全记录(十九):嵌入资源处理
1.前言 📝 在上一篇文章中,我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源,方便后续将资源打包到一个可执行文件中。 2.embed介绍 🎯 Go 1.16 引入了革命性的 embed 包,彻底改变了静态资源管理的…...
Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
Typeerror: cannot read properties of undefined (reading ‘XXX‘)
最近需要在离线机器上运行软件,所以得把软件用docker打包起来,大部分功能都没问题,出了一个奇怪的事情。同样的代码,在本机上用vscode可以运行起来,但是打包之后在docker里出现了问题。使用的是dialog组件,…...
R语言速释制剂QBD解决方案之三
本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...
08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险
C#入门系列【类的基本概念】:开启编程世界的奇妙冒险 嘿,各位编程小白探险家!欢迎来到 C# 的奇幻大陆!今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类!别害怕,跟着我,保准让你轻松搞…...
站群服务器的应用场景都有哪些?
站群服务器主要是为了多个网站的托管和管理所设计的,可以通过集中管理和高效资源的分配,来支持多个独立的网站同时运行,让每一个网站都可以分配到独立的IP地址,避免出现IP关联的风险,用户还可以通过控制面板进行管理功…...
