【问题标题】:How can I get signal dimensions in Simulink model如何在 Simulink 模型中获取信号维度
【发布时间】:2013-10-04 08:29:43
【问题描述】:

我有一个问题。

仿真一个 simulink 模型后,我需要使用 MATLAB 命令获取每条线的信号维度。

我通过关注获得线路句柄

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

那么我如何从线柄获取信号尺寸

** 在格式菜单中检查“信号尺寸”时 -> 端口/信号显示 模拟后,信号维度的模型编号将显示在非标量线上。 我需要使用 MATLAB 命令来获取它。

对不起我的英语水平

谢谢

【问题讨论】:

    标签: matlab simulink


    【解决方案1】:

    或者,您可以使用以下方法找到每个块的信号维度和信号宽度:

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

    &lt;block_path&gt; 替换为每个感兴趣块的适当块路径。必须先编译模型,然后才能运行这些命令,但由于您指示在运行模型后执行此操作,所以这应该不是问题。

    【讨论】:

      【解决方案2】:

      如果您有一组来自 find_system 命令的线句柄,则可以使用以下命令将模块连接到信号。

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

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

      【讨论】:

        【解决方案3】:

        你可以通过以下方式解决。

        1. 为所需信号启用信号记录(属性)。为了 示例将名称设置为自定义和signalone
        2. 如果您真的不想记录信号,请将Limit data points to last 设置为1,这样您就可以避免存储未使用的数据。
        3. 转到 SIMulink 首选项并启用信号记录,默认输出名称为 logsout
        4. 模拟后,您将在工作区中获得一个数据集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 首选项中进行所有进一步定义会更方便有一个管理所有信号的列表。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-11-20
          • 1970-01-01
          • 2012-02-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多