【问题标题】:Using single variables in Simulink在 Simulink 中使用单个变量
【发布时间】:2018-05-29 23:14:03
【问题描述】:

我是 Simulink 的新手,但是我有很多编程经验,所以我不习惯用 Simulink 的思维方式思考问题。要么我遗漏了一些非常明显的东西,要么遗漏了一些非常深刻的东西。

我想根据以下方程实现一个简单的线性滑台模型:

v  = model input = table velocity
dt = simulation timestep
x  = internal displacement variable = initially zero
x at current timestep = (x at last timestep) + v*dt

在 C 或 C++ 中,我会声明一个变量 x 并显式更新它,但我不知道如何在 Simulink 中实现这种持久状态变量。我的模型是具有固定时间步长的离散时间模型。

我知道我可以读取 MATLAB 工作区中设置的变量 - 在每个仿真步骤中读取/写入 matlab 工作区一次的正确方法是什么?如果是这样,我该怎么做?如果没有,这样做的“Simulink 方式”是什么?

谢谢。

编辑 1 以回应评论:

我将在 MATLAB 中为上述任务编写的代码如下,在 MATLAB 工作区中声明 x 和 dt,然后每个时间步调用一次 update() 函数。为了方便起见,该函数更新了 MATLAB 工作区中的变量并返回了新值。

function xNew = update( v )
    global x;
    global dt;
    x = x + v*dt;
    xNew = x;
end

编辑 2:我真正想要实现的是一个简单的模拟和反馈 PID 控制实验,但除了我在这里和那里学到的一些东西之外,我在控制理论方面的经验为零。我只是想提出一个简单的、有代表性的问题供我解决。我在下面附上了我的模型的图片。该表是位移控制的,目标位移为正弦波。

基本上我的问题是关于实现突出显示的“电机模型”块。

【问题讨论】:

  • 展示如何在 MATLAB 或伪代码(或 C/C++,如果它足够容易“阅读”)中执行此操作可能会很有用。听起来你只是想要一个积分器块。感谢您对每个变量含义的解释,但示例值/输入/预期输出总是很方便。每个时间步从工作区读取和写入几乎肯定不是解决方案。
  • @Wolfie 我添加了更多上下文。再次感谢!
  • 这个添加的信息非常有用,并且使问题变得清晰。不幸的是,我家里没有 Simulink,所以如果没有其他人有的话,我会在下周回答。

标签: matlab simulink


【解决方案1】:

这样的内存是使用Unit Delay 块(或Integrator 块,如果连续工作)实现的。在下图中,需要有一个名为 dt 的 MATLAB Workspace 变量(以使 Gain 模块工作),并且 Unit Delay 模块的 Sample Time 也需要设置为 dt

在使用 Simulink 时,几乎没有任何情况下在每个时间步写入工作区都是正确的方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-03
    • 1970-01-01
    • 1970-01-01
    • 2020-07-11
    相关资源
    最近更新 更多