我是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控制实验,但除了我在这里和那里所采取的一些事情之外,我对控制理论没有任何经验。我只是想为我提出一个简单,有代表性的问题。我在下面附上了我的模型图片。该表是位移控制的,目标位移是正弦波。
基本上我的问题是关于实现突出显示的“电机模型”块。
答案 0 :(得分:1)
这样的内存使用Unit Delay块(或Integrator块实现,如果连续工作)。在下图中,需要一个名为dt
的MATLAB工作空间变量(使增益块工作),单位延迟模块的采样时间也需要设置为dt
。
在使用Simulink时,几乎没有任何情况下每次写入工作区都是正确的方法。