simulink mask、sfunction和tlc的联动、接口

article/2025/6/18 2:30:06

这里全部是讲的level2 sfunction(用m语言编写),基于matlab 2020a。

1.mask的参数操作

1)mask通过set_param和get_param这2个函数接口对mask里面定义的Parameters&Dialog的参数的大部分属性进行读写,一般是Value值,但是有例外:

例如 Popup控件,除了Value还有一个列表框内容的属性,如果需要动态填充,需要操作Simulink.MaskParameter 类,见MATLAB帮助“以编程方式控制封装”

例如Popup写入TyepOptions参数,如果使用set_param写的Value值,写入TypeOptions的值,需要获得指针后获得成员写入。

aMaskObj = Simulink.Mask.get(gcbh);
cnt = 5;%这里替换为你自己的赋值
myCellArray = cell(1, cnt);
%这里你需要给你的myCellArray 内容赋值
msgList_obj = aMaskObj.getParameter('PopupName');
msgList_obj.TypeOptions = myCellArray;%这里只是设置PopupName这个Popup控件的Value值为myCellArray的第一个元素(matlab从1开始)
set_param(gcbh,'PopupName',myCellArray{1});

2)一般使用gcbh对本模块进行访问,获得本模块的函数指针,但是偶尔有些属性不支持,需要用gcb,这个有不确定性,当一个不行的时候,试另外一个,matlab帮助文档没有直说。

2.mask 与sfunction的参数传递

1.)所有mask的回调函数无法直接通过set_param函数操作block的端口数量、类型,其他方法也没试出来,唯一可以操作的是端口的名字,而且只能通过mask的port_label函数在Icon&Ports中修改。

2).所有mask的数据只能通过参数传递给sfunction。

就是在mask中定义的Parameter数据,而且如果Parameter设置为不可见Visible=false,就不能同步(apply无效),切记切记。

3).Parameter的控件名字就是参数的名字

在Initialization的选项卡中,可以看到所有有效参数的名字(容器这些Name并不是有效参数)

4).先在mask中定义好参数名,然后在普通视图下,填写参数名,顺序可以与Initialization的选项卡中的不一致。

5).在sfunction中按照这个顺序取数即可

例如下面这个句子是在sfunction中的某个函数中,定义了一个变量变量outNumSF,它对应mask参数列表中的第4个参数outNum。

 outNumSF= block.DialogPrm(4).Data;

6).sfunction不能反过来操作mask的Parameter显示,只能是自己改了block的属性,然后mask通过get_param函数回读。

3.sfunction与tlc的数据传递

1)首先需要知道,level2 sfunction的m语言版 的几个必要的回调函数,是必须注册的,不然要么无法仿真,要么无法生成代码。其中WriteRTW这个函数就是负责tlc的数据传递,在模型CTRL+B执行编译或用户点击“代码生成”时,就会调用这个函数。

    block.RegBlockMethod('Outputs', @Outputs);
    block.RegBlockMethod('SetInputPortDimensions', @SetInpPortDims);
    block.RegBlockMethod('SetOutputPortDimensions', @SetOutPortDims);  
    block.RegBlockMethod('SetInputPortSamplingMode', @SetInpPortFrameData);
    block.RegBlockMethod('SetInputPortDimensionsMode', @SetInputPortDimensionsMode);
    block.RegBlockMethod('WriteRTW', @WriteRTW);

2)WriteRTW中主要是调用block.WriteRTWParam这个函数写入参数,写入的必须是字符数组!!。

本人对tlc语言理解还不够深刻,本来想直接写入一个二维数组,但是写进去了到tlc这边不知道怎么拆,只有做了一个循环拆成了很多一维字符数组,到tlc这边来拆。

一维数组这边,自己定义一个参数名,然后把循环的index与参数名拼接写入.

function WriteRTW(block) for i=1:nblock.WriteRTWParam('string',strcat('sigInfo_',num2str(i-1)), '112233');end

模型编译后,可以在rtw文件中找到自己定义的参数(如果没有生成rtw文件,可以在模型配置里面勾选)。

上述rtw中可以看到, 生成的参数在ParamSettings这个记录下面,名字是关键字+序号的拼接,注意rtw 和tlc的下标是从0开始,与matla从1开始不同,2者注意转换一下。

3)编写tlc文件,生成代码

tlc文件的文件名,一定要与sfunction的m文件名一致,并且在同一个目录下。

通过字符串拼接的方法取数,原理见:

matlab/simulink TLC语法基础练习实例-CSDN博客

%function Outputs(block, system) Output  %foreach loopIdentifier = 3%assign sigInfoStr = "ParamSettings.sigInfo_"+ STRING(loopIdentifier)%%字符串拼接%assign varStr = %<sigInfoStr>      %%输出端口字符串 与 取数后的字符串再拼接 %<LibBlockOutputSignal(loopIdentifier, "", "", 0)> = %<varStr> %endforeach   %endfunction


http://www.hkcw.cn/article/JEEGxOCrgl.shtml

相关文章

【数据结构】图的存储(邻接矩阵与邻接表)

图的存储结构 因为图中既有节点&#xff0c;又有边(节点与节点之间的关系)&#xff0c;因此&#xff0c;在图的存储中&#xff0c;只需要保存&#xff1a;节点和边关系即可。 节点保存比较简单&#xff0c;只需要一段连续空间即可&#xff0c;那边关系该怎么保存呢&#xff1…

C++修炼:unordered_map和unordered_set的使用和封装

Hello大家好&#xff01;很高兴我们又见面啦&#xff01;给生活添点passion&#xff0c;开始今天的编程之路&#xff01; 我的博客&#xff1a;<但凡. 我的专栏&#xff1a;《编程之路》、《数据结构与算法之美》、《题海拾贝》、《C修炼之路》 欢迎点赞&#xff0c;关注&am…

Centos环境下安装/重装MySQL完整教程

目录 一、卸载残留的MySQL环境&#xff1a; 二、安装MySQL&#xff1a; 1、下载MySQL官方的yum源&#xff1a; 2、更新系统yum源&#xff1a; 3、确保系统中有了对应的MySQL安装包&#xff1a; 4、安装MySQL服务&#xff1a; 5、密钥问题安装失败解决方法&#xff1a; …

【机器学习基础】机器学习入门核心算法:决策树(Decision Tree)

机器学习入门核心算法&#xff1a;决策树&#xff08;Decision Tree&#xff09; 一、算法逻辑1.1 基本概念1.2 算法流程 二、算法原理与数学推导2.1 特征选择指标信息熵&#xff08;ID3算法&#xff09;信息增益&#xff08;Information Gain&#xff09;信息增益率&#xff0…

基于晶体塑性有限元(CPFEM)的钛合金圆棒拉伸过程模拟

作者&#xff1a;辞殇 关键词&#xff1a;CPFEM&#xff1b;钛合金&#xff1b;单轴拉伸&#xff1b;织构极图&#xff1b;孪晶 晶体塑性有限元是一种结合了晶体塑性理论和有限元方法的数值模拟技术‌。这种方法考虑了晶体材料的各向异性、滑移系统的开动和相互作用、以及变形…

开源是什么?我们为什么要开源?

本片为故事类文章推荐听音频哦 软件自由运动的背景 梦开始的地方 20世纪70年代&#xff0c;软件行业处于早期发展阶段&#xff0c;软件通常与硬件捆绑销售&#xff0c;用户对软件的使用、修改和分发权利非常有限。随着计算机技术的发展和互联网的普及&#xff0c;越来越多的开…

帕金森带来的生活困境

当这种健康状况出现&#xff0c;行动不再自如成为最明显的改变。日常行走时&#xff0c;步伐会逐渐变小、变慢&#xff0c;甚至会出现 “小碎步” 往前冲&#xff0c;难以停下&#xff0c;简单的起身、转身都可能变得艰难。手部也会不受控制地颤抖&#xff0c;拿水杯、系纽扣这…

第3期:PCB设计教程:自动布线与导出制版文件详解

第3期&#xff1a;PCB设计教程&#xff1a;自动布线与导出制版文件详解 一、前言 本篇教程主要聚焦于PCB设计中的自动布线功能及文件导出步骤。通过本教程&#xff0c;您将学习如何&#xff1a; 使用自动布线工具高效完成线路连接处理自动布线失败的情况进行DRC检查确保设计…

NACOS 动态配置

1.引入Nacos 配置中心依赖 <!-- nacso 配置中心--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency> 2.在application.properties 配置…

【清晰教程】查看和修改Git配置情况

目录 查看安装版本 查看特定配置 查看全局配置 查看本地仓库配置 设置或修改配置 查看安装版本 打开命令行工具&#xff0c;通过version命令检查Git版本号。 git --version 如果显示出 Git 的版本号&#xff0c;说明 Git 已经成功安装。 查看特定配置 如果想要查看特定…

C语言 — 动态内存管理

目录 1.malloc和free函数1.1 malloc函数1.2 free函数1.3 malloc函数的使用 2.calloc函数2.1 calloc函数2.2 calloc函数的使用 3.realloc函数3.1 realloc函数3.2 realloc函数的使用 4.动态内存管理笔试题4.1 笔试题&#xff08;1&#xff09;4.2 笔试题&#xff08;2&#xff09…

动态规划算法

简称 DP&#xff0c;是一种求解多阶段决策过程最优化问题的方法。在动态规划中&#xff0c;通过把原问题分解为相对简单的子问题&#xff0c;先求解子问题&#xff0c;再由子问题的解而得到原问题的解。 一、概念 动态规划最早由理查德 贝尔曼于 1957 年在其著作「动态规划&…

Qt -使用OpenCV得到SDF

博客主页&#xff1a;【夜泉_ly】 本文专栏&#xff1a;【暂无】 欢迎点赞&#x1f44d;收藏⭐关注❤️ 目录 cv::MatdistanceTransform获得SDF 本文的目标&#xff0c; 是简单学习并使用OpenCV的相关函数&#xff0c; 并获得QImage的SDF(Signed Distance Field 有向距离场) 至…

【小米拥抱AI】小米开源 MiMo-7B-RL-0530

更新日志 [2025.05.30] 在强化学习训练过程中&#xff0c;通过持续扩大训练窗口尺寸&#xff08;从32K提升至48K&#xff09;&#xff0c;MiMo-7B-RL-0530模型在AIME24基准测试上的表现持续提升&#xff0c;最终超越DeepSeek R1模型的性能水平。 BenchmarkMiMo-7B-RLMiMo-7B-…

俄布良斯克州桥梁坍塌致列车脱轨事故造成3死28伤

△图片来源:莫斯科交通检察院总台记者当地时间6月1日获悉,据俄罗斯紧急情况部初步统计,布良斯克州桥梁坍塌致火车脱轨事故共造成31人伤亡,其中3人不幸遇难,28人已送往医疗机构救治。此前据俄罗斯BAZA网站报道,事件造成4人死亡,至少44人受伤。俄紧急情况部称,救援人员正…

JDK17 与JDK8 共同存在一个电脑上

官网下载JDK17 官网链接 &#xff1a;https://www.oracle.com/java/technologies/downloads/#java17-windows 下载这个 安装 环境变量设置 因为之前设置过JDK 8这里为了使 两者共存&#xff0c;采用设置变量方式来实现具体操作如下 1、进入高级系统环境设置 1.1先建一个关…

打开NRODIC SDK编译不过怎么处理,keil与segger studio

打开NRODIC SDK编译不过怎么处理,以下是keil处理. 1,如图,不要安装安装也不会过 2. 不要安装点击否 3.点击确定后进来这个样子 4.这里选择这个勾,OK后就不会再有后面的pack_license 5.去掉勾后这里要选择自己SDK对应的pack版本,我的是8.27.0 6.OK后弹出个界面也要反复选择…

每日八股文5.31

每日八股-5.31 Go1.切片是值传递还是引用传递&#xff1f;2.切片的深拷贝与浅拷贝3.切片的底层实现4.切片的扩容机制5.Map是线程安全的吗&#xff1f;6.哪些类型可以作为map的key&#xff1f;7.Map删除一个key内存是否会释放&#xff1f;8.Map为什么是无序的&#xff1f;9.如何…

智能重塑连接:AI原生互联网的范式革命与未来十年

引言:互联网的下一幕——智能涌现与体验重塑 2024年初,OpenAI发布的文生视频模型Sora,以其惊人的逼真度和对物理世界的理解能力,再次将人工智能的魔力推向了全球聚光灯下。这不仅仅是一个技术演示,更像是一个强烈的信号:我们正加速驶向一个由AI深度重塑的未来。回望互联…

【深度学习相关安装及配环境】Anaconda搭建虚拟环境并安装CUDA、cuDVV和对应版本的Pytorch,并在jupyter notebook上部署

目录 1. 查看自己电脑的cuda版本2.安装cuda关于环境变量的配置测试一下&#xff0c;安装完成 3.安装cuDVV环境变量的配置测试一下&#xff0c;安装完成 4.创建虚拟环境先安装镜像源下载3.11版本py 5.在虚拟环境下&#xff0c;下载pytorch6.验证是否安装成功7.在jupyter noteboo…