在Simulink中使用单个变量

时间:2017-12-15 17:52:49

标签: matlab simulink

我是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

1 个答案:

答案 0 :(得分:1)

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

enter image description here

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