首页 文章

如何在Simulink模型中获取信号尺寸

提问于
浏览
3

我有个问题 .

在模拟simulink模型后,我需要使用MATLAB命令获取每条线的信号尺寸 .

我通过以下方式获得了行句柄

line_h = find_system(gcs, 'FindAll', 'on','SearchDepth', 1, 'Type', 'Line')

那我怎样才能从线条手柄中获取信号尺寸

**在格式菜单 - >端口/信号显示中检查'信号尺寸'后模拟模型数量的信号尺寸将显示在非标量线上 . 我需要使用MATLAB命令来获取它 .

对不起我的英语技能

谢谢

3 回答

  • 2

    如果find_system命令中有一组行句柄,则可以使用以下命令将块连接到信号 .

    hblkSrc = get_param(h(k),'SrcBlockHandle');
    

    然后,您可以按照am304的建议使用 get_param(hblkSrc,'CompiledPortDimensions') 来获取尺寸 .

  • 3

    或者,您可以使用以下命令找到它们源自的每个块的信号尺寸和信号宽度:

    get_param(<block_path>,'CompiledPortDimensions')
    get_param(<block_path>,'CompiledPortWidths')
    

    <block_path> 替换为每个感兴趣的块的相应块路径 . 在运行这些命令之前必须先编译模型,但由于您在运行模型后指示执行此操作,因此这不应该是一个问题 .

  • 2

    您可以通过以下方式解决它 .

    • 启用所需信号的信号记录(属性) . 例如,将名称设置为custom和 signalone .

    • 如果您实际上不想记录信号,请将 Limit data points to last 设置为 1 ,以避免存储未使用的数据 .

    • 转到SImulink首选项并启用信号记录,默认输出名称为 logsout
      模拟后

    • 您将在工作区中获得数据集 logsout

    现在评估此数据集如下:

    % 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首选项中进行所有进一步的定义,你有一个列表管理所有信号 .

相关问题