我有个问题。
模拟 simulink 模型后,我需要使用 MATLAB 命令获取每条线的信号维度。
我通过以下方式获得线路句柄
line_h = find_system(gcs, 'FindAll', 'on','SearchDepth', 1, 'Type', 'Line')
那么我如何从线句柄中获取信号尺寸
** 当在格式菜单 -> 端口/信号显示中选中“信号尺寸”时,模拟后,信号尺寸的型号将显示在非标量线上。我需要使用 MATLAB 命令来获取它。
对不起我的英语水平
谢谢
或者,您可以使用以下方法找到它们源自的每个块的信号维度和信号宽度:
get_param(<block_path>,'CompiledPortDimensions')
get_param(<block_path>,'CompiledPortWidths')
<block_path>为每个感兴趣的块替换适当的块路径。必须先编译模型,然后才能运行这些命令,但是由于您指示在运行模型后执行此操作,所以这应该不是问题。
您可以通过以下方式解决它。
signalone.Limit data points to last为1,这样您就可以避免存储未使用的数据。logsoutlogsout在工作区中获得一个数据集现在评估这个数据集如下:
% returns data, if data limit is set to 1 it's a coloumn
% vector with just the last value
data = logsout.get('signalone').Values.Data
你现在可以只使用这个向量的大小并且你知道信号的维度
[~,dim]=size(data)
或在一行中:
[~,dim]=size(logsout.get('signalone').Values.Data)
如果您有很多信号并且想要一次评估它们,请为您的信号提供方便的输出名称,并使用循环来遍历具有所有信号名称的字符串向量。
正如您所说,您想要“所有”(您确定吗?)信号的维度,我认为在每个信号属性中检查“启用信号记录”并在您有列表的 Simulink 首选项中进行所有进一步定义会更方便管理所有信号。
如果您的 find_system 命令有一组线句柄,则可以使用以下命令将模块连接到信号。
hblkSrc = get_param(h(k),'SrcBlockHandle');
然后,您可以get_param(hblkSrc,'CompiledPortDimensions')按照 am304 的建议使用来获取尺寸。