使用事件侦听器和 MATLAB GUI 查看 Simulink 信号研究

简介: 使用事件侦听器和 MATLAB GUI 查看 Simulink 信号研究

💥1 概述

该模型可以作为标准仿真执行,也可以在构建到通用实时目标后执行(适用于具有 RTW 许可证的用户)。在后一种情况下,RTW 的外部模式和 TCP/IP 用于将数据从正在运行的可执行文件传输到模型,然后再传输到 UI。


使用侦听器来查看信号而不是编写自定义 S 功能块的传统方法至少具有 2 个优点:首先,模型不会因必须添加任何特殊的查看块而“损坏”(如果模型也要与 RTW 一起使用,这尤其有利);其次,相同的UI可用于查看来自不同模型的信号。


要使用事件侦听器和 MATLAB GUI 查看 Simulink 信号,按照以下步骤进行操作:


1. 打开 MATLAB:

  启动 MATLAB 软件并等待其加载完毕。


2. 打开 Simulink 模型:

  在 MATLAB 命令窗口中输入 `simulink` 命令以打开 Simulink 应用程序。然后,选择或创建一个 Simulink 模型。


3. 添加事件侦听器:

  在 Simulink 模型中,右键点击您要监视的信号所连接的线条或块,然后选择 "Add Signal Logging" 或 "Add To Watch List" 选项。这将创建一个事件侦听器对象来获取该信号。


4. 创建 MATLAB GUI:

  在 MATLAB 命令窗口中输入 `guide` 命令以打开 MATLAB GUI 生成器。在该界面中,您可以创建用户界面来查看和分析 Simulink 信号。


5. 设计 GUI 界面:

  使用 MATLAB GUI 生成器的工具栏添加控件(如按钮、图表、文本框等),并将它们与 Simulink 模型中的信号、事件侦听器对象或其它功能函数关联起来。您可以根据需要自定义界面布局和外观。


6. 编写回调函数:

  为每个控件编写回调函数,以定义其交互行为。例如,可以编写一个回调函数以在按钮点击时更新信号数据或激活事件侦听器。


7. 运行 GUI:

  在 MATLAB GUI 生成器中点击 "运行" 按钮以启动用户界面。此时,您可以通过操作界面控件来查看 Simulink 信号、分析数据、显示图表等。


通过以上步骤,您可以使用事件侦听器和 MATLAB GUI 查看 Simulink 信号并进行相关的研究。根据具体的需求,您还可以进一步扩展和优化界面功能,以满足特定的分析要求。


📚2 运行结果

部分代码:

% Create a panel for operations that can be performed
    hop = uipanel('Parent',hf,...
        'Units','normalized',...
        'Position',[0.02 0.1 0.21 0.27],...
        'Title','Operations',...
        'BackgroundColor',get(hf,'Color'),...
        'HandleVisibility','callback',...
        'Tag','tunePanel');
    strings = {'Build','Start','Stop'};
    positions = [0.7 0.45 0.2];
    tags = {'buildpb','startpb','stoppb'};
    callbacks = {@localBuildPressed, @localStartPressed, @localStopPressed};
    enabled ={'off','on','off'};
    for idx = 1:length(strings)
        uicontrol('Parent',hop,...
            'Style','pushbutton',...
            'Units','normalized',...
            'Position',[0.15 positions(idx) 0.7 0.2],...
            'BackgroundColor',get(hf,'Color'),...
            'String',strings{idx},...
            'Enable',enabled{idx},...
            'Callback',callbacks{idx},...
            'HandleVisibility','callback',...
            'Tag',tags{idx});
    end
    % Create some application data storing the UI handles and various
    % pieces of information about the model's original state.
    % Can only do the following if a Simulink License is available
    simulinkLicenceAvailable = license('test','Simulink');
    if simulinkLicenceAvailable
        try
            % Load the simulink model
            ad = localLoadModel(modelName);
            % The gain value needs to be poked into the UI
            set(hte,'String',ad.gainValue);
            % Put an empty line on the axes for each signal that will be
            % monitored
            % Save the line handles, which will be useful to have in an
            % array during the graphics updating routine.
            nlines = length(ad.viewing);
            hl = nan(1,nlines);
            colourOrder = get(ha,'ColorOrder');
            for idx = 1:nlines
                hl(idx) = line('Parent',ha,...
                    'XData',[],...
                    'YData',[],...
                    'Color',colourOrder(mod(idx-1,size(colourOrder,1))+1,:),...
                    'EraseMode','xor',...
                    'Tag',sprintf('signalLine%d',idx));
            end
            ad.lineHandles = hl;
        catch ME %#ok
            simulinkLicenceAvailable = false;
        end
    end
    if ~simulinkLicenceAvailable
        % If no Simulink license available then disable all UI controls
        % Not all uicomponents (e.g. figure, axes,...) have an Enable
        % property so do this in a loop.  The loop catches those widgets
        % without an Enable property and does nothing for them.
        allHandles = findall(hf);
        arrayfun(@(h)set(h,'Enable','off'),allHandles,...
            'ErrorHandler',@(obj,evt)disp(''));
        % For the UI to be closed there needs to be a modelName field in
        % appdata so just create a dummy one
        ad.modelName = modelName;
        % Also pop-up a dialog telling the user what's happening
        str = sprintf('%s\n%s\n%s\n%s',...
            'A Simulink license isn''t available, or cannot be',...
            'checked out.  The UI is being rendered however all ',...
            'functionality is being disabled.  Check for an available',...
            'license then try again.');
        hedlg = errordlg(str,'Simulink License Error','modal');
        uiwait(hedlg);
    end

🎉3 参考文献

部分理论来源于网络,如有侵权请联系删除。

[1]王嵩. GSM侦听器的设计与实现[D].北京邮电大学,2010.


[2]宛世源,宋宝,唐小琦.基于FPGA的工业现场总线侦听器的设计与实现[J].组合机床与自动化加工技术,2014(01):93-95.DOI:10.13462/j.cnki.mmtamt.2014.01.026.

🌈4 Matlab代码、Simulink

相关文章
|
1月前
|
传感器 算法 vr&ar
六自由度Stewart控制系统matlab仿真,带GUI界面
六自由度Stewart平台控制系统是一种高精度、高稳定性的运动模拟装置,广泛应用于飞行模拟、汽车驾驶模拟、虚拟现实等领域。该系统通过六个独立的线性致动器连接固定基座与移动平台,实现对负载在三维空间内的六个自由度(三维平移X、Y、Z和三维旋转-roll、pitch、yaw)的精确控制。系统使用MATLAB2022a进行仿真和控制算法开发,核心程序包括滑块回调函数和创建函数,用于实时调整平台的位置和姿态。
|
2月前
|
存储 算法 数据可视化
基于 MATLAB的GUI信号处理界面设计 源码+运行截图
基于 MATLAB的GUI信号处理界面设计 源码+运行截图
95 2
|
5天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于yolov4深度学习网络的公共场所人流密度检测系统matlab仿真,带GUI界面
本项目使用 MATLAB 2022a 进行 YOLOv4 算法仿真,实现公共场所人流密度检测。通过卷积神经网络提取图像特征,将图像划分为多个网格进行目标检测和识别,最终计算人流密度。核心程序包括图像和视频读取、处理和显示功能。仿真结果展示了算法的有效性和准确性。
52 31
|
4天前
|
供应链 算法 调度
排队算法的matlab仿真,带GUI界面
该程序使用MATLAB 2022A版本实现排队算法的仿真,并带有GUI界面。程序支持单队列单服务台、单队列多服务台和多队列多服务台三种排队方式。核心函数`func_mms2`通过模拟到达时间和服务时间,计算阻塞率和利用率。排队论研究系统中顾客和服务台的交互行为,广泛应用于通信网络、生产调度和服务行业等领域,旨在优化系统性能,减少等待时间,提高资源利用率。
|
15天前
|
算法
超市火灾烟雾蔓延及人员疏散的matlab模拟仿真,带GUI界面
本项目基于MATLAB2022A开发,模拟了大型商业建筑中火灾发生后的人员疏散与烟雾扩散情况。算法通过设定引导点指导人员疏散,考虑视野范围、随机运动及多细胞竞争同一格点的情况。人员疏散时,根据是否处于烟雾区调整运动策略和速度,初始疏散采用正态分布启动。烟雾扩散模型基于流体方程,考虑了无风环境下的简化。
|
17天前
|
存储 算法 数据安全/隐私保护
基于方块编码的图像压缩matlab仿真,带GUI界面
本项目展示了基于方块编码的图像压缩算法,包括算法运行效果、软件环境(Matlab 2022a)、核心程序及理论概述。算法通过将图像划分为固定大小的方块并进行量化、编码,实现高效压缩,适用于存储和传输大体积图像数据。
|
1月前
|
运维 算法
基于Lipschitz李式指数的随机信号特征识别和故障检测matlab仿真
本程序基于Lipschitz李式指数进行随机信号特征识别和故障检测。使用MATLAB2013B版本运行,核心功能包括计算Lipschitz指数、绘制指数曲线、检测故障信号并标记异常区域。Lipschitz指数能够反映信号的局部动态行为,适用于机械振动分析等领域的故障诊断。
|
2月前
|
算法 决策智能
基于禁忌搜索算法的VRP问题求解matlab仿真,带GUI界面,可设置参数
该程序基于禁忌搜索算法求解车辆路径问题(VRP),使用MATLAB2022a版本实现,并带有GUI界面。用户可通过界面设置参数并查看结果。禁忌搜索算法通过迭代改进当前解,并利用记忆机制避免陷入局部最优。程序包含初始化、定义邻域结构、设置禁忌列表等步骤,最终输出最优路径和相关数据图表。
|
3月前
|
机器学习/深度学习 算法
基于心电信号时空特征的QRS波检测算法matlab仿真
本课题旨在通过提取ECG信号的时空特征并应用QRS波检测算法识别心电信号中的峰值。使用MATLAB 2022a版本实现系统仿真,涵盖信号预处理、特征提取、特征选择、阈值设定及QRS波检测等关键步骤,以提高心脏疾病诊断准确性。预处理阶段采用滤波技术去除噪声,检测算法则结合了一阶导数和二阶导数计算确定QRS波峰值。
|
4月前
|
存储 算法 Serverless
【matlab】matlab基于DTW和HMM方法数字语音识别系统(源码+音频文件+GUI界面)【独一无二】
【matlab】matlab基于DTW和HMM方法数字语音识别系统(源码+音频文件+GUI界面)【独一无二】