You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Simulink中如何为数据日志设置可变采样时间?

动态设置测试步骤对应的Simulink数据记录采样率

可以实现针对测试计划每行设置不同采样时间记录数据,以下是可行的解决方案,同时解释你之前方法失效的原因:

一、核心问题解析

你之前的尝试失败的根源:

  • MATLAB Function写工作区:Simulink在编译阶段会固化To Workspace模块的采样时间参数,运行时修改工作区变量无法改变已编译模块的配置,因此只有第一行的采样时间生效。
  • Rate Transition模块:该模块仅用于不同固定采样率信号间的同步转换,无法动态调整数据记录的触发间隔。

二、可行解决方案

1. 触发子系统+Stateflow计数器控制

利用触发子系统实现按需记录,通过Stateflow根据当前测试步骤的采样时间控制触发时机:

  • 把To Workspace模块放入函数调用触发子系统(推荐使用函数调用触发,更灵活)。
  • 在Stateflow中维护一个计数器:
    • 模型基础采样时,计数器自增1。
    • 根据当前测试步骤的采样时间Ts_step,计算与基础采样率Ts_base的倍数N = Ts_step / Ts_base(确保为整数)。
    • 当计数器达到N时,触发子系统执行数据记录,随后重置计数器。
  • 示例Stateflow动作代码(在基础采样触发的状态迁移中):
    counter = counter + 1;
    if counter == current_step.N
        trigger_record(); % 触发子系统的函数调用事件
        counter = 0;
    end
    

适合实时应用的灵活方案,无需依赖To Workspace模块:

  • 预先在模型中配置好需要记录的信号,启用SDI记录并设置为可编程控制模式。
  • 在Stateflow切换测试步骤时,调用MATLAB命令动态设置SDI记录速率:
    % Stateflow动作中执行
    Ts_step = current_test_step.sample_time;
    Simulink.sdi.setRecordRate('YourModelName', Ts_step);
    
  • 测试完成后,可直接通过SDI导出数据到工作区或文件。

3. 多采样率To Workspace模块+开关选择

预先创建对应所有可能采样率的To Workspace模块,通过Stateflow控制启用:

  • 为测试计划中所有可能的采样率分别创建To Workspace模块,每个模块设置固定采样率。
  • 使用Multiport Switch模块将待记录信号路由到当前步骤对应的To Workspace模块。
  • 配合使能子系统,由Stateflow控制当前采样率对应的To Workspace模块是否启用记录。

三、注意事项

  • 确保所有测试步骤的采样时间都是基础采样率的整数倍,避免异步采样导致的数据丢失或同步问题。
  • 实时应用中,优先选择触发子系统或SDI方案,减少运行时配置的性能开销。
  • 使用SDI时,提前在模型配置中指定要记录的信号,避免运行时动态添加信号带来的延迟。

内容的提问来源于stack exchange,提问作者Fabi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 12:40:08