当前位置: 首页 > news >正文

Matlab/Simulink几个开发小工具

1.数据记录功能实现

提供两个函数SgnDataLogOnSgnDataLogOff用于控制Simulink模型中所有信号线的数据记录状态。SgnDataLogOn通过find_system查找当前系统中的所有信号线,使用循环将每条线的DataLogging属性设置为1(启用)。SgnDataLogOff执行相反操作,将属性设置为0(禁用)。这种功能特别适用于仿真过程中需要观测特定信号数据时快速切换记录状态。

%%%%%%将当前页面的dataloging打开,可用于仿真观测数据 function SgnDataLogOn line = find_system(gcs,'FindAll','on','SearchDepth','1','Type','line'); for i=1:length(line) set(line(i),'DataLogging',1); end
%%%%%%将当前页面的dataloging打开,可用于仿真观测数据 function SgnDataLogOff line = find_system(gcs,'FindAll','on','SearchDepth','1','Type','line'); for i=1:length(line) set(line(i),'DataLogging',0); end

2.模块标准化

From/Goto模块标准化处理

通过BlockStandardization函数对模型中的From/Goto标签模块进行尺寸规范化。函数会获取所有From和Goto模块的位置信息,统一设置为宽度30像素、高度12像素的矩形区域。处理逻辑考虑了单模块和多模块的不同情况:当存在多个同类型模块时使用循环处理,单个模块时直接设置参数。这种标准化使得模型布局更加整洁统一。

端口模块视觉优化

对模型中的输入/输出端口进行视觉区分处理。将所有内层Inport和Outport模块尺寸固定为20x20像素的正方形,并将背景色设置为黑色,形成圆形外观。这种设计实现了层次化视觉区分:外层端口保持默认样式,内层端口通过黑色圆形标记,显著提升模型可读性。代码同样处理了单端口和多端口的差异情况。

输出端口自动命名

智能同步输出端口名称与连接信号线名称。通过获取输出端口连接线的名称,自动将端口名称更新为信号线名称。实现逻辑包括:获取端口句柄、定位连接线对象、比较名称差异等步骤。该功能确保端口名称始终与传输信号保持一致,避免人工命名可能产生的错误,特别适用于大型模型中频繁的信号传递场景。

function BlockStandardization(~) %FromGoto大小设置 FromBlock= find_system(gcs,'FindAll','on','SearchDepth','1','BlockType','From'); FromBlockPos=get_param(FromBlock,'Position'); GotoBlock= find_system(gcs,'FindAll','on','SearchDepth','1','BlockType','Goto'); GotoBlockPos=get_param(GotoBlock,'Position'); FromBlock_Length=length(FromBlock); GotoBlock_Length=length(GotoBlock); if FromBlock_Length>1 for i=1:length(FromBlock) set_param(FromBlock(i),'Position',[FromBlockPos{i}(1) FromBlockPos{i}(2) FromBlockPos{i}(1)+30 FromBlockPos{i}(2)+12]); end elseif FromBlock_Length==1 set_param(FromBlock,'Position',[FromBlockPos(1) FromBlockPos(2) FromBlockPos(1)+30 FromBlockPos(2)+12]); end if GotoBlock_Length>1 for i=1:length(GotoBlock) set_param(GotoBlock(i),'Position',[GotoBlockPos{i}(1) GotoBlockPos{i}(2) GotoBlockPos{i}(1)+30 GotoBlockPos{i}(2)+12]); end elseif GotoBlock_Length==1 set_param(GotoBlock,'Position',[GotoBlockPos(1) GotoBlockPos(2) GotoBlockPos(1)+30 GotoBlockPos(2)+12]); end %内层port规范化,小圆形黑色底,与最外层Port区分开 InportBlock=find_system(gcs,'FindAll','on','SearchDepth','1','BlockType','Inport'); OutportBlock=find_system(gcs,'FindAll','on','SearchDepth','1','BlockType','Outport'); InportBlockPos=get_param(InportBlock,'Position'); OutportBlockPos=get_param(OutportBlock,'Position'); InportBlock_Length=length(InportBlock); OutportBlock_Length=length(OutportBlock); if InportBlock_Length>1 for i=1:length(InportBlock) set_param(InportBlock(i),'Position',[InportBlockPos{i}(1) InportBlockPos{i}(2) InportBlockPos{i}(1)+20 InportBlockPos{i}(2)+20]); set_param(InportBlock(i),'BackgroundColor','black'); end elseif InportBlock_Length==1 set_param(InportBlock,'Position',[InportBlockPos(1) InportBlockPos(2) InportBlockPos(1)+20 InportBlockPos(2)+20]); set_param(InportBlock,'BackgroundColor','black'); end if OutportBlock_Length>1 for i=1:length(OutportBlock) set_param(OutportBlock(i),'Position',[OutportBlockPos{i}(1) OutportBlockPos{i}(2) OutportBlockPos{i}(1)+20 OutportBlockPos{i}(2)+20]); set_param(OutportBlock(i),'BackgroundColor','black'); end elseif OutportBlock_Length==1 set_param(OutportBlock,'Position',[OutportBlockPos(1) OutportBlockPos(2) OutportBlockPos(1)+20 OutportBlockPos(2)+20]); set_param(OutportBlock,'BackgroundColor','black'); end %将输出port名字自动改为线上的名字 for i=1:length(OutportBlock) OutportName = get_param(OutportBlock(i),'Name'); OutportHandle = get_param(OutportBlock(i),'Handle'); PortHandle = get(OutportHandle,'PortHandles'); OutputHandle = PortHandle.Inport; LineHandele = find_system(gcs,'SearchDepth',1,'FindAll','on','Type','Line','DstPortHandle',OutputHandle); LineName=get_param(LineHandele,'Name') if ~strcmp(OutportName,LineName) if ~isempty(LineName) set(OutportBlock(i),'Name',LineName); end end end

后面会将这些小的功能集成到一个app里面,更加方便快捷~

http://www.jsqmd.com/news/655992/

相关文章:

  • 上下文感知力决定AI编码生产力,从Token截断到意图延续:工程师必须掌握的4类动态上下文注入技术
  • 从零到Offer:一名计算机保研生的实战推免指南与心路剖析
  • 盘点2026年靠谱的驾校,探讨春申驾校的教学质量稳定吗 - myqiye
  • Motrix WebExtension终极指南:如何快速提升浏览器下载效率300%
  • 避坑指南:树莓派4B用RPi.GPIO控制舵机时,如何彻底解决抖动和信号延迟问题?
  • Windows音量弹窗终结者:HideVolumeOSD技术深度解析
  • ZYNQ双核通信避坑指南:如何用OCM共享内存和SGI中断实现高效数据交换
  • 2026年市场比较好的工业输送pp防静电管生产商推荐榜 - 品牌排行榜
  • 飞腾E2000平台u-boot定制化编译与固件打包实战
  • 政务内网大屏地图加载失败?手把手教你用Leaflet.js + 离线瓦片搞定高德地图
  • Git提交前还能做这些?pre-commit的5个超实用场景:从自动生成文档到安全扫描
  • 告别编译噩梦:在Windows上用Miniconda+Clang一步搞定OpenBLAS(附环境变量配置)
  • 从CTF实战出发:手把手教你利用C++对象虚表劫持实现堆溢出攻击(以CISCN 2025 anote为例)
  • 数智深耕垂直赛道,S2B重构产业生态——千匠网络垂直S2B产业电商系统,赋能千行百业数智化转型 - 圆圆小达人
  • PyTorch 2.8通用镜像全解析:预装环境、快速验证、实战应用一步到位
  • 终极解密指南:3步快速恢复Adobe JSXBIN脚本源码
  • 从NASNet到MnasNet:聊聊神经结构搜索(NAS)这几年是怎么‘卷’起来的
  • J1939多帧传输避坑指南:从BAM报文到数据重组,这些细节千万别忽略
  • adb实战指南(二)- 解锁安卓设备调试权限与建立adb稳定连接
  • Chrome画中画扩展终极指南:如何一键实现视频悬浮播放
  • MySQL 5.7 中如何模拟实现ROW_NUMBER()与PARTITION BY的分组排序查询
  • HideMockLocation完整指南:如何彻底隐藏Android模拟位置设置
  • ChineseOCR文字方向检测:如何解决四种角度文字识别难题?
  • 【参数辨识实战】六轴机械臂最小惯性参数集推导与辨识(上篇)
  • 市场比较好的国标pph管生产厂家推荐 - 品牌排行榜
  • 终极NCM文件解密指南:ncmdumpGUI让网易云音乐随处播放
  • 2026年性价比高的dyaco公司推荐,怎么选择看这里 - 工业设备
  • LVGL项目实战:手把手教你配置lv_conf.h,搞定屏幕颜色、内存与性能调优
  • 别再手动下载了!用Python+国信QMT自动拉取股票历史Tick数据(附完整代码与避坑点)
  • 终极指南:打造你的个人游戏中心,Playnite游戏库管理器全解析