2401_84146461 2024-04-20 14:17 采纳率: 69.6%
浏览 0
已结题

MATLAB的simulink

系统为以下图片,输出和输入都为正弦波 但是输出会存在延时。
第一个问题,怎么获取当前时刻输出信号的值并存入数据缓存区。
第二个问题,怎么获取输入信号,第一秒到当前时刻,所有值存在数据缓存区。
上面步骤如果实时的获取,该怎么弄,谢谢大家

img

  • 写回答

2条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-04-20 14:17
    关注

    引自免费微信小程序:皆我百晓生

    在MATLAB Simulink中,要解决你提到的问题,我们需要利用Simulink的数据线和数据缓存功能。以下是详细的步骤:

    第一个问题:获取当前时刻输出信号的值并存入数据缓存区

    1. 创建数据线:首先,在你的模型中找到输出信号的端口,通常是一个信号源(如Sine Wave Generator)的输出。右键点击这个端口,选择"Create Data Bus",为输出信号创建一个数据线。

    2. 添加数据缓存块:在模型中搜索并插入一个"Data Store Memory"块,将其命名为"OutputCache"。

    3. 连接信号到数据缓存:在数据线和"OutputCache"之间创建连线。将数据线的输出连接到"OutputCache"的"Input port",并在连线属性中设置数据线的名称作为"Tag"。

    4. 编写代码(如果你需要实时读取)

      % 获取当前时刻
      t = now;
      
      % 从数据缓存中读取当前输出值
      output_value = OutputCache.Value;
      

    第二个问题:获取输入信号,第一秒到当前时刻的所有值存入数据缓存区

    1. 创建数据线和缓存输入信号:对于输入信号,重复第一步和第二步,为输入信号创建数据线并添加一个名为"IncomingInputCache"的数据缓存块。

    2. 连接信号到输入缓存:确保你的输入信号已经通过数据线连接到"IncomingInputCache"的"Input port"。

    3. 定时更新输入缓存:如果你的输入信号是连续的,可以使用simulink.util.Queue或者simulink.util.QueueSampledTime来存储历史值。例如,每经过一秒,你可以读取并添加新的输入值:

      function mdlInitializeSizes(~, ~)
          % 创建一个队列,大小等于一秒钟内的采样点数
          queueLength = getSimTimeUnitInfo('seconds') * getSampleTime(mdl);
          queue = simulink.util.Queue(queueLength);
      end
      
      function mdlPreStep(~, ~, ~)
          % 读取输入信号并添加到队列
          input_value = ... % 从输入端口获取值
          queue.enqueue(input_value);
      end
      
      function data = mdlGetNextInputSourceQueueValue(~, ~)
          % 在预步骤中,获取并返回一秒钟内的输入值
          if queue.empty()
              data = [];
          else
              data = queue.dequeue();
          end
      end
      

      这里假设mdlGetNextInputSourceQueueValueSimulink.Sinks.QueueSampledTime块中的回调函数。

    记得在模型的开始处调用mdlInitializeSizes函数初始化队列。这样,每当执行到mdlPreStep时,就会更新输入缓存。

    以上步骤将允许你在运行时获取和存储信号值。如果你需要实时操作,确保模型的仿真设置允许实时数据获取。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 4月28日
  • 已采纳回答 4月20日
  • 创建了问题 4月20日

悬赏问题

  • ¥20 需要帮我远程操控一下,运行一下我的那个代码,我觉得我无能为力了
  • ¥20 有偿:在ubuntu上安装arduino以及其常用库文件。
  • ¥15 请问用arcgis处理一些数据和图形,通常里面有一个根据点划泰森多边形的命令,直接划的弊端是只能执行一个完整的边界,但是我们有时候会用到需要在有很多边界内利用点来执行划泰森多边形的命令
  • ¥30 在wave2foam中执行setWaveField时遇到了如下的浮点异常问题,请问该如何解决呢?
  • ¥750 关于一道数论方面的问题,求解答!(关键词-数学方法)
  • ¥200 csgo2的viewmatrix值是否还有别的获取方式
  • ¥15 Stable Diffusion,用Ebsynth utility在视频选帧图重绘,第一步报错,蒙版和帧图没法生成,怎么处理啊
  • ¥15 请把下列每一行代码完整地读懂并注释出来
  • ¥15 寻找公式识别开发,自动识别整页文档、图像公式的软件
  • ¥15 为什么eclipse不能再下载了?