Concurrency simulink与matlab并行编程的实现

Concurrency simulink与matlab并行编程的实现,concurrency,buffer,simulink,Concurrency,Buffer,Simulink,我需要以下情况的帮助 我的项目是使用simulink来模拟机器人,simulink模型的输出是robbot在每个时间步的位置和扭矩。我的问题在于数据收集部分。我计划使用一个缓冲区来存储simulink输出,并使用antoher matalb函数来访问相同的缓冲区,以便从缓冲区中获取数据,用于在线数据分析。要求simulink模型和matlab数据分析功能同时运行。matalb数据分析函数决定何时从缓冲区中取出数据。这就像生产者-消费者问题,simulink是生产者,数据分析matlab函数作为消

我需要以下情况的帮助

我的项目是使用simulink来模拟机器人,simulink模型的输出是robbot在每个时间步的位置和扭矩。我的问题在于数据收集部分。我计划使用一个缓冲区来存储simulink输出,并使用antoher matalb函数来访问相同的缓冲区,以便从缓冲区中获取数据,用于在线数据分析。要求simulink模型和matlab数据分析功能同时运行。matalb数据分析函数决定何时从缓冲区中取出数据。这就像生产者-消费者问题,simulink是生产者,数据分析matlab函数作为消费者

我的问题是如何保护相互排斥的缓冲区。我不想使用工作区块,因为它只在simulink暂停或停止时更新数据。我没有发现matalb或simulink提供的任何smeaphore或类似互斥体的结构。我尝试了以下方法来解决问题,但没有一种有效:

  • 我曾尝试使用DSP工具箱中的队列和缓冲区块,这两个块提供互斥,但在模拟过程中输出数据的大小发生了变化。基本上,当matlab函数采集数据时,它会获取当前存储在缓冲区中的所有数据。然后,缓冲块似乎在每个simulink时间步逐个输出

  • 我曾尝试通过嵌入函数中的persist变量实现队列。当matalb函数想要收集数据时,它会翻转一个信号标志,告诉simulink将数据输出到工作区。但是在这种方法中,matalb函数必须通过两次调用来获取数据。第一次呼叫翻转旗帜,然后返回。接下来,第二个调用用于搜索工作区,以查找simulink输出的数据。我的导师否认这种方法,因为它不优雅

  • 我认为RTW可以解决这个问题,但是simulink模型和matalb分析功能代码经常会更改,因此出于调试目的,我计划不将simulink更改为C/C++。但我想知道是否可以用C实现互斥,并通过simulink和Matlab进行调用。如果答案是肯定的,那么怎么做呢

    我真的希望有人能帮我。如有任何建议,我们将不胜感激。顺便说一下,我使用的是Linux系统。

    请查看Simulink文档和文件交换。我想这会满足你的要求