我想从simulink during simulation 中检索数据,并使用串行网络功能将这些数据发送到另一个程序 . 因为我需要使用另一个程序来做一些技巧并将命令发送回simulink,所以我必须在运行期间从simulink获取数据,以便另一个程序可以做出正确的命令 .
我尝试使用To Workspace块导出数据 .
但是,我只能在模拟的最初阶段获得 Value .
我还尝试使用范围并更改了一些属性:选中将数据保存到工作区并取消选中限制数据到最后 .
首先,我开始模拟,我发现ScopeData没有出现在Workspace中 . 只有当我停止模拟时,ScopeData才会出现在工作区中 .
之后,我可以使用ScopeData.signals.values来获取值 .
但我想要的是:当我开始模拟时,ScopeData会出现在工作区中,以便我可以将这些数据发送到其他程序 .
有谁知道如何实现这一目标?
我发现this page可能会有帮助,但我仍然不知道在模拟过程中如何连续导出数据 .
3 回答
使用get_param仅从当前时间读取数据 . 也可以使用set_param的增益或其他块将数据发送回Simulink .
An example 的get_param
首先加载并开始模拟:
要读取simulink模型的任何行上的数据:
您可以在计时器回调中进行读取 .
这也许会有所帮助:Command Line Functionality for Simulink
在仿真期间,Simulink将记录的数据存储在内部缓冲区中,并仅在模拟暂停或停止时将数据写入工作区 . 听起来好像你真的需要编写一个S函数(它将在一个时间步长的基础上获得信号值)并以这种方式与Proteus进行通信 .
当然,Simulink是一个非实时模拟器,所以如果你在谈论做任何类似于实时控制的事情,那么你很可能完全采取错误的方法 .
在模拟过程中的任何时候,您都可以强制Simulink将模拟输出数据写入工作区:
我发现这个命令在我的Winlab的Matlab 2010a中非常不稳定 . 特别是当模拟停止时我必须避免它(即首先检查
get_param(bdroot,'SimulationStatus')
),否则Matlab会显示错误并要求重新启动 .