我正在尝试使用Real-time Workshop在Simulink中运行实时模拟。目标是grt(我已经尝试过rtwin,但我的模拟拒绝为它编译)。我需要模拟实时运行,以便模拟中的一秒持续一秒实时。 Grt忽略实时并在尽可能短的时间内完成模拟。有没有办法同步它?
我已经尝试了http://www.mathworks.com/matlabcentral/fileexchange/3175但无法使其工作(不编译)。
感谢您提出任何建议。
答案 0 :(得分:0)
看起来不可能。我可以通过使用WinApi中的Sleep(以ms为单位)功能和time.h中的时钟功能来减慢执行速度,这对于低采样率看起来非常好。然而,当我增加采样率时,睡眠功能睡眠时间过长,导致错误,模拟中的一秒钟持续超过一个真实世界秒。
这个想法是说一段迭代应该持续,比方说200ms。然后计算使用时钟函数执行一次代码迭代所需的时间。然后调用Sleep(200 - u),其中u是迭代的长度。问题在于Sleep函数会在进程中休眠并在需要时将其唤醒,而不是在参数中告诉它。
我知道这不是一个解决方案,但发布这个,以便如果有人遇到与我相同的问题,他们将不会尝试这个死胡同的解决方案。我不得不重写rtwin的模拟,现在它工作正常。
另一个想法是以某种方式使用中断,但我想这将是非常复杂的,不值得麻烦。