在Simulink中使用单个变量

问题描述 投票:0回答:1

我是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控制,但我没有控制理论的经验,除了我在这里和那里一路上采取的一些事情。我只是想为我提出一个简单,有代表性的问题。我在下面附上了我的模型图片。该表是位移控制的,目标位移是正弦波。

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

enter image description here

matlab simulink
1个回答
1
投票

像这样的记忆是使用Unit Delay块(或连续时间工作时的Integrator块)实现的。在下图中,需要一个名为dt的MATLAB工作空间变量(使增益块工作),单位延迟模块的采样时间也需要设置为dt

enter image description here

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

© www.soinside.com 2019 - 2024. All rights reserved.