【发布时间】: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,所以如果没有其他人有的话,我会在下周回答。