先进的s函数技术:调度未来事件
今天,我将介绍如何使用一个变量样本时间功能计划在未来事件。这个话题是相当先进的,所以抓紧…或者我们说我是从哪里来的:Attachez vos双层编结御寒帽用d 'la织锦
这个问题
我收到的问题是:
我有一个模型与变量样本时间解决。在这个模型中,我有一个信号连续采样时间,但不连续振幅。信号的振幅变化,每次我需要触发一个子系统。但是我不想立即触发子系统。我需要固定的延迟后触发。
第一次尝试
用户尝试的第一件事就是延迟信号使用运输延迟块和检测延迟的变化信号。
当我在一个解释以前的文章顺利,传输延迟预计连续信号的变化。当美联储与不连续信号,传输延迟的输出不是输入延迟所抵消。这是我们遇到的情况如下面的图所示。
变量抽样时间
一为一块告诉模型解算器采取措施在未来是指定的一个特定的时刻金宝app变量抽样时间。例如,脉冲发生器只在需要时使用这种技术来运行。
如果我做一个模型与脉冲发生器块配置有一段5 s和脉冲宽度的40%,块会告诉变量一步解决者采取措施在乘以0,2 s, 5 s, 7 s, 10 s,……
变量样本时间功能
有一个功能,你可以做同样的事情!
对于一个基本的例子,看看演示模型sfcndemo_vsfunc.mdl。这个模型展示了如何使用mdlGetTimeOfNextVarHit指定块下次应该运行。
解决方案
在此基础上,我们想要编写一个函数,将着眼于其输入每一个模拟的主要步骤。当检测到的变化将是,我们将在一个缓冲区存储时间价值。每次将生成一个事件,我们将调查这个缓冲区和安排下一个事件。
功能具体而言,这意味着:
- 在mdlInitializeSizes使用,我们指定缓冲区的大小ssSetNumRWork。我们还定义一个整数向量使用工作ssSetNumIWork保持指数的事件到来的缓冲区。
- 在mdlInitializeSampleTimes,我们声明2样本*:固定小和变量。固定在小样本时间允许我们监视每个样本检测输入信号的变化和时间变量样本将用于生成事件。
- 在mdlUpdate,我们监控的输入。如果检测到更改,我们存储时间的向量。
- 每次一个变量样本时间,解算器调用mdlGetTimeOfNextVarHit获取下一个变量的样本时间。当这种情况发生时,我们的工作向量得到下一个事件的时间和使用ssSetTNext注册它。
- 在mdlOutputs,我们使用ssIsSampleHit知道变量的当前步骤是打样品的时间。如果是这种情况,我们生成一个函数调用使用ssCallSystemWithTid。
这一切实现的时候,我有一块可以安排在未来事件
现在轮到你了
你在模型中使用变量样本时间吗?离开我们这里的评论。
- 类别:
- 有趣,
- S-functions
评论
留下你的评论,请点击在这里MathWorks账户登录或创建一个新的。