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