从原子子图内部访问Simulink函数



由于远远超出我控制的原因,我现在已经被推入做MATLAB/Simulink/statflow工作。我已经完成了On-Ramp培训,并且我已经鄙视在任何基于文本的编程语言中做一些常见和简单的事情是多么不直观。

所以这是我的问题:我试图创建状态流子图,我可以像函数一样重用,就像从SPI总线请求一系列响应时要采取的一系列步骤。我希望能够在同一父状态流图中的其他子图中使用此子图。到目前为止,我的研究已经把我带到了原子子图。

问题是,我的子图依赖于许多Simulink函数,这些函数反过来调用S-Functions来与STM32目标通信。我可以使子图,没有问题,在根状态流图中的Simulink函数。但是,当我将子图转换为原子子图时,它不能再检测到Simulink函数,从而在子图中为它们提供错误。

我在一个库中做的所有这些都是我们在许多内部电路板上使用的特定芯片的通用代码。最后一个问题是,这整个东西是在一个更大的系统中使用的,并且使用了after()"状态之间的转换,这样RTOS就可以去做其他事情了。据我所知,我不能在Simulink或MATLAB函数内做同样的事情,并且必须在状态流中这样做,这意味着我不能只是做一个正常的"做所有SPI读取";函数,但需要一个"状态流函数"。

  • 是否有办法从原子函数内部访问Simulink函数?
  • 是否有其他的方法来重用一个状态流图像一个函数,这样我就可以更新根图,而不必修改相同的复制/粘贴图代码在多个地方?
  • 我也不能使用图形函数,因为这些图表有循环,显然你不能在图形函数内回溯。

所以我在处理这个问题时找到了一个答案,我比我更有状态流经验。他提到了"并行运行状态"的概念。

你要做的是,在根状态下,将你的正常状态分组到一个子图中。然后,对于您希望调用的任何可重用代码(如函数),将其创建为一个单独的状态机,并具有自己的子状态,默认为Idle状态。然后,您可以在主状态中声明一个本地事件来移动"函数"。状态,并让主状态等待"函数"。返回到空闲状态

你的函数调用"在你的主要状态中总是有两种状态这是你想要的函数状态先处于空闲状态,然后再次等待,直到它回到空闲状态,但如果你有一个足够复杂的子图,这比在多个子图中复制粘贴相同的行为,然后再修改要紧凑得多。此外,您还可以获得类似函数的行为,只需修改"函数"即可。修改整个状态流图中的行为。

关于如何创建并行运行状态的信息可以在这里找到:

https://www.mathworks.com/help/stateflow/gs/parallelism.htmlhttps://www.mathworks.com/help/stateflow/gs/events.html

最新更新