实例讲解Simulink的MATLAB Function模块

news2024/9/21 20:45:09

内容

MATLAB Function是一个支持使用M语言编写模块功能,并能够将所编写的M语言生成C代码,用于开发桌面应用和嵌入式应用的模块。它支持的 MATLAB内建函数比 Fcn模块要广泛,除去基本的四则运算、逻辑操作符和关系操作符,还可以调用MATLAB各种工具箱里提供的内建函数,包括支持代码生成和不支持代码生成两个类型。

1.MATLAB Function模块

模块功能:将 MATLAB 代码包含在生成可嵌入式 C 代码的模型中库:Simulink / User-Defined FunctionsHDL Coder / User-Defined Functions

此模块的特殊之处在于双击之后打开的不是参数对话框,而是一个M代码编辑窗,在这里编写M代码描述输出y与输入u之间的关系。模块拥有1个输入端口u和1个输出端口y。MATLAB Function的模块的图标上绘制一个MATLAB logo图案,如图所示。

图片

图片

模块是否有输入输出端口取决于内部M函数的定义方式。

(1)没有输出

图片

图片

(2)没有输入

图片

图片

实例1 基本操作

图片

fcn函数

​​​​​​​

function y = fcn(u1,u2)y = u1*u2;end

点击界面的Go to Diagram可以从脚本视图跳转回仿真视图。

图片

点击Edit Data,可以对输入和输出数据进行编辑,例如数据的类型、尺寸等属性。

图片

图片

模型运行结果

图片

实例2 多输入和多输出

图片

fcn1函数

​​​​​​​

function [y,y1] = fcn1(u1,u2)y = u1+u2;y1 = u1*u2;end

fcn2函数

​​​​​​​

function [y,y1] = fcn2(u)y = u(1)+u(2);y1 = u(1)*u(2);end

运行结果

图片

2.MATLAB Function里面使用if和for语句

实例3 MATLAB Function里面使用if语句

图片

fcn4函数内容

​​​​​​​

function y = fcn4(u) if u>=5     y = 1; elseif u<0     y = -1; else     y = 0; endend

运行结果

图片

实例4  MATLAB Function里面使用for语句

图片

function y = fcn5(u)num = length(u);y = 0;for i = 1:1:num    y = y +u(i);endend

运行结果

图片


3.MATLAB Function里面使用persistent保持变量

根据Simulink的运行机制,每个采样点会调用一次MATLAB Function的函数,两次调用之间,同一个变量的前次计算的终值如何传递到当前计算周期来是个问题,可以使用persistent 变量实现函数退出和进入时内部变量值的保持。

例如使用MATLAB Function编写一个能够累积输人值作为输出的模块-─累加模块。计算累加值需要一个状态变量,在每次调用fcn 时依据上一次的值进行累加,并将累加值存储在这个变量中。使用persistent声明这个变量可以实现此目的。persistent变量是定义在某个函数内的变量类型,可在函数调用的不同次数间保持上一次退出该函数的值。它同global全局变量的类似之处在于MATLAB为它们创建永久数据区域,不同之处在于它只能被声明它的函数内部识别,目的是免除此变量被其他函数或命令行修改值而造成用户无法确保其值的困扰。声明persistent变量时它刚刚被创建,还不具有初始值,其内容为空值[],调用声明persistent变量的函数时先判断persistent变量是否为空,如果是空则初始化为0 ,非空则直接使用,它们会记得上次被调用后的值。具体代码如下:

function  y = fcn(u)%% u 是模块的输入% y 是模块的输出%函数功能:实现对输入的累加persistent sum_total  % 函数内部声明 可持续类型变量 sum_total% 首先要判断persistent声明的变量是否是空if isempty(sum_total)    sum_total  = 0;endsum_total = sum_total +u; %进行累加y = sum_total;

仿真图

将Clock模块的信号输入MATLAB Function模块并使用Scope模块接收y端口的输出值,解算器设置为固定步长,值为1 ,仿真结果如图所示。

设置步长为1

图片

图片

图片

示波器输出

图片

经过10 s共11个采样点后,结果累加到55,等同于sum([0 : 10])。使用persistent变量时需要注意:

(1)persistent变量不能作为函数的输入输出参数﹐否则会报错。(2)persistent变量不能同当前工作空间中已经存在的变量同名,否则会     报错。(3)persistent变量不能声明在Command Window (命令窗口)里,必须在    函数内声明。

4.添加trigger信号

在Edit data中添加触发信号。

图片

实例5 添加触发信号

图片

fcn6

function y = fcn6(u)num = length(u);y = 0;for i = 1:1:num    y = y +u(i);endend

图片


5.Extrinsic函数

MATLAB Function模块支持在M编辑器内部定义子函数并调用,但是不支持递归调用。MATLAB Function可以将MATLAB内建函数编写的M函数生成C代码,如 sum,length , sqrt等(支持代码生成的M函数详细列表请搜索MATLAB自带 Help文档的Func-tions Supported for C/C++Code Generation — Alphabetical List.),使用不支持代码生成功能的MATLAB内建函数时,如绘图函数系列 plot , patch , bar和 figure等,需使用eml. extrinsic( 'plot ' , 'bar')来声明为Extrinsic函数,启动仿真后这些函数只用来仿真,不进行编译,从而不生成可独立运行的C/C++代码及可执行文件。

Extrinsic函数

Extrinsic函数的处理方式 

图片

模型进行仿真时,MATLAB生成调用Extrinsic函数的代码,但是不生成可执行代码,仅保证这些函数能够在MATLAB环境下执行。模块生成代码时,MATLAB会判断Extrinsic函数是否对调用它们的函数输出值有影响,如果有则产生编译器错误,如果没有影响,则对声明为Extrinsic函数以外的函数进行代码生成,而忽略此Extrinsic函数。

Simulink 的 Scope只能显示线条图像,目前的版本还不支持3-D绘图,不能像MATLAB那样提供各种功能强大的绘图功能。可使用MATLAB Function模块自定义一个模块绘制3-D图像。结合Extrinsic函数声明和Persistent变量的使用,可以在MATLAB Function模块中调用绘图函数绘图,并将每次从 Simulink模型获取的输入保存起来,如下所示例程:

​​​​​​​​​​​​​​

function  fcn(u)%% 绘制三维图形eml.extrinsic('plot3','scatter3','delete','close');%声明不能生成c代码的函数len = length(u);%计算输入的长度persistent data  %声明持续性变量if isempty(data) %判断持续性变量是否是空值    data = zeros(3,100000);%初始化endpersistent n  %声明采样数据次数的持续性变量 nif isempty(n)    n = 1;else    n = n +1;enddata(:,n) = u;%存储输入的数据 3*n  每列数据是一个三维坐标(x,y,z)persistent  h  if isempty(h)    h = plot3(data(1,:),data(2,:),data(3,:),'bo');else    delete(h);%每个采样时刻重新绘制图像以达到动态刷新的效果     h = plot3(data(1,:),data(2,:),data(3,:),'bo');end

模型建立时使用Clock模块, Fcn模块和Mux模块构成正弦、余弦和时间量3维输入。运行模型之后,会动态地绘制出每个采样时刻计算的值到坐标轴中,构成逐步上升的螺旋3-D图形,如图所示。

仿真图

图片

产生的三维图形结果

图片

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1238078.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

动能方案 | 15693协议的读卡器应用 DP1363F 替代RC663

15693协议是一种高频&#xff08;13.56 MHz&#xff09;射频识别&#xff08;RFID&#xff09;协议&#xff0c;广泛满足无线识别和数据传输领域。其特点包括较远的读取范围、支持快速数据传输、与多个标签的兼容等&#xff0c;产生于不同行业有着广泛的应用&#xff0c;包括但…

实时云渲染与本地渲染:优劣对比与未来趋势

随着科技的迅速发展&#xff0c;图形渲染技术也随之演进&#xff0c;而实时云渲染作为新兴的渲染方式&#xff0c;正在逐渐改变我们对图形处理的看法。相较于传统的本地渲染&#xff0c;实时云渲染在便捷性、成本、协同能力、物理稳定性等多个方面都表现出独特的优势&#xff0…

【考研】数据结构(更新到双链表)

声明&#xff1a;所有代码都可以运行&#xff0c;可以直接粘贴运行&#xff08;只有库函数没有声明&#xff09; 线性表的定义和基本操作 基本操作 定义 静态&#xff1a; #include<stdio.h> #include<stdlib.h>#define MaxSize 10//静态 typedef struct{int d…

云原生正在重塑软件的整个生命周期(内附资料)

随着企业数字化转型进程的发展&#xff0c;企业面临着新旧商业形态的剧变&#xff0c;颠覆和重构时刻都在发生。 企业需要更加快速地感知用户侧的需求变化并做出调整&#xff0c;才有可能在竞争中持续积累优势。业务的个性化、敏捷化、智能化需求日益突显&#xff0c;数字化应…

新的按人口比例的邮政编码

上次写信是什么时候&#xff1f;已经多久没用过邮政编码了&#xff1f;随着科技的进步&#xff0c;现在的人们似乎已经不再写信了&#xff0c;取而代之的是电子邮件、微信等。而且&#xff0c;手写字体识别功能&#xff0c;做为人工智能的入门级应用&#xff0c;也已经很成熟了…

高防服务器的工作原理

在当今互联网时代&#xff0c;网络安全问题日益突出&#xff0c;各种网络攻击层出不穷。为了保护企业的网络安全&#xff0c;高防服务器应运而生。那么&#xff0c;你是否了解高防服务器的工作原理呢&#xff1f;下面就让我们一起来探索一下。 高防服务器是一种能够有效抵御各种…

和田2023年群众舞蹈大赛总决赛圆满落幕!

11月19日&#xff0c;由中共和田地委宣传部主办&#xff0c;地区文旅局承办&#xff0c;地区文化馆、各县市文旅局协办&#xff0c;北京市援疆和田指挥部支持的和田地区2023年“大地欢歌 舞动和田”群众舞蹈大赛总决赛在和田市新夜市圆满落幕&#xff0c;比赛最终决出一等奖1名…

2023年约特干故城夜间演艺《万方乐奏有于阗》完美谢幕

11月19日&#xff0c;记者走进约特干故城看到演员在欢乐地跳着刀郎舞和古典舞&#xff0c;庆祝今年以来夜间演艺《万方乐奏有于阗》演出200场完美谢幕。 11月19日在约特干故城&#xff0c;演员正在表演迎宾乐舞。阿卜力克木依卜拉依木摄 当天晚上&#xff0c;城楼上旌旗猎猎&am…

助力企业前行——ScalaSpark最佳实践课程

时间飞逝&#xff0c;转眼间我们的Scala&Spark培训课程已经圆满结束&#xff01;在这段精彩的学习旅程中&#xff0c;你们展现了坚韧、决心和追求卓越的品质。 scala(Scalable Language)是一种多范式的编程语言&#xff0c;其设计的初衷是要集成面向对象编程和函数式编程的…

t检验(连续变量)和卡方检验(分类变量)

目录 情形 不同种类的萼片差异 数据类型查看&#xff1a; 差异分析&#xff1a; 不同萼片的种类差异 数据准备 二分类卡方检验 绘图 情形 &#xff1a;当有两列数据进行分析比较时&#xff0c;一列为连续变量&#xff0c;一列数据为分类变量。 rm(list ls()) libra…

私域电商模式全解析:掌握这些方法,让你的生意不再难做!

私域电商是指利用微信、QQ等社交平台将客户流量转化和沉淀&#xff0c;并促使其进行重复购买的电商模式。私域电商具备两个主要特点&#xff0c;分别是“私域”和“电商”。 “私域”指的是将客户添加为好友&#xff0c;并利用微信、QQ、微博等社交平台进行联系和营销的模式。…

【广州华锐互动】昆虫3D虚拟动态展示:探索神奇的微观世界

在这个充满科技魅力的时代&#xff0c;我们可以通过各种方式去了解和探索自然界的奥秘。而昆虫作为地球上最为丰富多样的生物群体之一&#xff0c;其独特的生活习性和形态特征一直吸引着人们的目光。 由广州华锐互动开发的昆虫3D虚拟动态展示系统&#xff0c;成为了一种全新的科…

【101011011序列检测_2023.11.20】

源文件 tb文件in输入&#xff1a;01010‘1011011’0 VCS仿真结果 当next_state为s9时&#xff0c;out置为1

灾备建设中,跨主机集群恢复技术应用

在介绍跨主机集群恢复之前&#xff0c;要了解到虚拟化主机集群是什么&#xff1f; 虚拟化主机集群是一种把一组主机组合起来形成一个整体&#xff0c;向用户提供资源方式&#xff08;计算存储、存储资源、网络资源&#xff09;的技术。 虚拟化集群具有以下特性&#xff1a; …

chrome内置路径合集

设置黑夜模式&#xff1a; 输入网址&#xff1a;chrome://flags/ 搜索dark 改为enable 实验项目路径 chrome://flags/ 可用来启用或者关闭某些 Chrome 的实验功能 chrome://settings 将快速打开 Chrome 浏览器的设置页面&#xff0c;页面的内容分类划分为基础和高级设置选项 …

9.Docker的虚悬镜像-Dangling Image

1.虚悬镜像的概念 虚悬镜像 (Dangling Image) 指的是仓库名 (镜像名) 和标签 TAG 都是 的镜像。 2.构建本地虚悬镜像 这里我以unbuntu为例来说明。 2.1 编写Dockerfile文件 FROM ubuntu:22.042.2 根据Dockerfile文件构建虚悬镜像 docker build .上面这段命令&#xff0c…

div中添加el-loading(局部loading的使用)

效果&#xff1a;在div中实现el-loading <div class"content-main">{{ hotList }}</div>getHotList(columnType) {this.$nextTick(() > {var loading this.$loading({lock: true,text: "努力加载中...",spinner: "el-icon-loading&qu…

『亚马逊云科技产品测评』活动征文|Amazon RDS创建并连接到 MySQL 数据库实例

&#xff08;授权声明&#xff1a;本篇文章授权活动官方亚马逊云科技文章转发、改写权&#xff0c;包括不限于在 Developer Centre, 知乎&#xff0c;自媒体平台&#xff0c;第三方开发者媒体等亚马逊云科技官方渠道&#xff09; 1. 前言 本文将带您深入了解亚马逊云科技的Am…

科技界年度大戏剧情终结:Open AI宣布ChatGPT创始人奥特曼回归

就在刚刚&#xff0c;在Sam Altman在X平台表示&#xff1a; 我喜欢 Openai&#xff0c;过去几天我所做的一切都是为了让这个团队及其使命保持一致。当我决定在周日晚上加入微软时&#xff0c;很明显这对我和团队来说是最好的道路。在新董事会和 w satya 的支持下&#xff0c;我…

深信服技术认证“SCSA-S”划重点:渗透测试工具使用

为帮助大家更加系统化的学习网络安全知识&#xff0c;尽快通过深信服安全服务认证工程师认证&#xff0c;深信服推出“SCSA-S认证备考秘笈”共十期内容&#xff0c;“考试重点”内容框架&#xff0c;帮助大家快速get重点知识~ 划重点来啦 深信服安全服务认证工程师&#xff08;…