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

NI HIL自动化测试19-Matlab-Simulink自动化建模

重复的复制、粘贴和修改,让人感觉到很是枯燥无味,对于有规律的Simulink 建模,可以通过M脚本来实现。下面以CAN解析为例,主要功能包括,根据信号名称的个数自动添加Constant、Convert等模块,然后自动连线。

第一步

第二步:选择要解析的信号名称

第三步 :运行脚本

function dbc = DBC()
%获取句柄
handle = gcbh;
%获取编辑模型Parent
path = get(gcbh,‘Parent’);
%获取信号信息,里面包含了一帧报文里面的所有信号名称
signals = get(handle,‘SignalInfo’)
%获取的位置,根据这个位置来确定信号的名称locatin=strfind(signals,′的位置,根据这个位置来确定信号的名称 locatin=strfind(signals,'的位置,根据这个位置来确定信号的名称locatin=strfind(signals,‘);
%获取信号名称的个数
number0fsignals = str2num(get(handle,‘NSignals’));
%定义一个字符向量元胞数组,长度根据信号名称的个数,用来存放信号名称
signal = {number0fsignals};
%提取信号名称
for i=1:number0fsignals
if i==1
%disp(signals(1:locatin(1)-1));
signal{i}=signals(1:locatin(1)-1);
else
%disp(signals(locatin((i-1)*11)+2:locatin(((i-1)*11)+1)-1));
signal{i}=signals(locatin((i-1)*11)+2:locatin(((i-1)*11)+1)-1);
end
end
%提取信号符号标识位、信号长度、转换因子、偏移量
signalinfmation={number0fsignals};
for k=1:number0fsignals
signalinf=[0,0,0,0];
for a=1:4
signalinf(1) = str2num(signals(locatin(2+(k-1)11)+1:locatin(3+(k-1)11)-1));%将 数据长度 添加到数组的第1个位置
signalinf(2) = str2num(signals(locatin(6+(k-1)11)+1:locatin(7+(k-1)11)-1));%将 有符号无符号 添加到数组的第2个位置
signalinf(3) = str2num(signals(locatin(7+(k-1)11)+1:locatin(8+(k-1)11)-1));%将 转换因子 添加到数组的第3个位置
signalinf(4) = str2num(signals(locatin(8+(k-1)11)+1:locatin(9+(k-1)11)-1));%将 偏移量 数据长度添加到数组的第4个位置
end
signalinfmation{k} = signalinf;
end
%删除CANPACK 模块,调试显示用,后期删除
%delete_block(‘m_control_mdl03/CAN Pack’);
%显示用,后期删除
%disp(str);
%添加模块,根据获得的信号个数number0fsignals和信号名称number0fsignals进行自动添加
for j=1:number0fsignals
%向指定的模型中增加Constant模块,并且指定控件的位置
add_block(‘simulink/Sources/Constant’,strcat(path,‘/’,signal{j}),‘Position’,[30 (100+60
(j-1)) 100 (100+60
(j-1))+30]);
%向指定模型中增加Data Type Conversion模块,并且指定控件的位置
add_block(‘simulink/Commonly Used Blocks/Data Type Conversion’,strcat(path,‘/’,‘Con’,signal{j}),‘Position’,[300 (100+60
(j-1)) 400 (100+60
(j-1))+30]);
%向指定模型中增加AM_HIL_Signal模块,并且指定控件的位置
add_block(‘dfdfd_ModleLib/TestBase_IO_LIB/AM_HIL_Signal’,strcat(path,‘/’,‘Switch’,signal{j}),‘Position’,[600 (100+60
(j-1)) 700 (100+60
(j-1))+30]);
%向指定模型中增加NIVeriStand Out1模块,并且指定控件的位置
add_block(‘NIVeriStandBlocks/NIVeriStand Out1’,strcat(path,‘/’,‘NI’,signal{j}),‘Position’,[1000 (100+60
(j-1)) 1080 (100+60
(j-1))+30]);
%自动连线
add_line(path,strcat(signal{j},’/‘,‘1’),strcat(‘Con’,signal{j},’/‘,‘1’));
add_line(path,strcat(‘Con’,signal{j},’/‘,‘1’),strcat(‘Switch’,signal{j},’/‘,‘1’));
add_line(path,strcat(‘Switch’,signal{j},’/‘,‘1’),strcat(‘NI’,signal{j},’/‘,‘1’));
%修改Data Type Conversion模块参数
set_param([path,strcat(’/‘,‘Con’,signal{j})],‘OutDataTypeStr’,strcat(‘fixdt(’, num2str(signalinfmation{j}(2)),’,‘,num2str(signalinfmation{j}(1)),’,‘,num2str(signalinfmation{j}(3)),’,‘,num2str(signalinfmation{j}(4)),’)'));
end
end

效果如下:

总结

原本一个项目,可能建模需要1天,现在几分钟就搞定了。还有优化的空间,以实际需求为向导,总有实现的方式。遗憾的是没有LIN解析模块。

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

相关文章:

  • 51单片机电子琴音乐播放器:从原理到实现的完整开发指南
  • Speechless:3分钟掌握微博内容永久保存的免费方案
  • Linux 内核参数:vmstat
  • AssetStudio实战指南:从Unity资源包提取音频并转换为MP3/WAV
  • 豆包智能体落地全链路拆解(企业级私有化部署实录)
  • Elden Ring FPS Unlock And More:内存补丁技术深度解析与高级配置指南
  • SpringBoot+Vue兼职平台全栈开发实践
  • Java IO与NIO核心技术解析与性能优化实践
  • 苏州地址挂靠到期迁移,工商税务变更先后顺序?
  • 视频下载助手终极指南:免费开源工具助你轻松保存网页视频资源
  • 权限系统笔记(一)、用户中心等
  • 朱雀 AIGC 检测官网是什么?正确入口查 AI 率,别进了山寨降 AI 率网站
  • 众智商学院CPPM授权资质怎么核验? - 众智商学院职业教育
  • 音乐解锁工具:3步让加密音乐重获自由,完全本地处理保护隐私
  • 为什么易连EDI–EasyLink是国外EDI软件信创国产化替代的最佳选择?
  • 郑州芬尼专卖店哪家专业:【芬尼】**认证 - 17328623207
  • 终极免费NVIDIA显卡优化神器:如何用NVIDIA Profile Inspector提升游戏性能
  • 泛型的使用、PECS原则
  • 别再迷信“参数越大越聪明“
  • 如何快速优化macOS鼠标体验:终极平滑滚动与按钮自定义指南
  • 论文答辩备考攒了12小时参考讲座视频2026实测免费视频总结工具免费额度够用吗
  • UEViewer:高效提取Unreal Engine游戏资源的终极解决方案
  • 【图像识别】基于模板匹配算法实现车辆出入库计时matlab系统
  • Unity热更新实战:YooAsset与HybridCLR双核框架搭建指南
  • 为什么新店开业要3个月?数字化中台实现“开箱即用”能力
  • qmcdump:3分钟掌握QQ音乐加密格式无损转换技术
  • 4步实现跨平台Steam创意工坊模组下载完整方案
  • 实测测评|新媒体营销方案 PPT 怎么做?智在 PPT 真实上手,不吹不黑
  • Unity图集切割实战:基于Texture2D.SetPixel的离线资源处理工具
  • 如何快速掌握绝区零一条龙:新手必备的完整使用教程