【问题标题】:How to handle stream of inputs and generate output based on input combination in UML State machine diagram如何在 UML 状态机图中根据输入组合处理输入流并生成输出
【发布时间】:2021-10-12 12:57:29
【问题描述】:

以下是具有输入和输出的安全控制器 下面给出了设计状态机的条件: 这里SignalOkSignalWeakSignalLost是测量转向角的信号质量。 SteeringAngle 信号本身包含原始转向数据。如果连续3次SignalOk,系统控制器将输出ValidSignal和转向角数据。在其他情况下,信号将被视为CorrputSignal。我正在使用 UML 2 状态图(Harel 图表)。到目前为止,这是我所做的:

注意:尚不支持并行状态和广播,但支持嵌套状态。 我不知道如何在状态机中对这种输入流进行建模,任何形式的帮助都将不胜感激。

【问题讨论】:

  • 我想不通,你想用图表表达什么。 RmtSteeringSignalOk 是什么?从您的文字中,我认为可能的信号是SignalOkSignalWeakSignalLost。或者这些是测量的可能结果吗?何时进行此测量?通过谁?为什么单独的 SteeringAngle 信号会触发转换?如果 SteeringSignal 不正常,SteeringAngle 不应该触发任何东西。
  • @AxelScheithauer 请将 RmtSteeringSignalOk 视为信号正常。这些信号由 pwm 解码器生成,并馈送到上述安全控制器,以做出有效或损坏信号的决定。
  • @AxelScheithauer 当驾驶员按下遥控器上的转向按钮时,PWM 解码器会生成关于转向信号强度的 signalok、signalweak 和 signalloss。 SteeringAngle 信号是包含转向角量的原始信号,无符号整数。
  • 好的,那么这个pwm解码器会同时发送SignalOkSteeringAngle。由于Ready 和“CheckFirstSignal”对这两个信号都有反应,状态机将立即进入CheckSecondSignal。我认为您应该删除 SteeringAngle 的转换。您甚至对前两个转向角都不感兴趣。只有第三个将被传输。由于我们不知道先处理哪个信号,我将在CheckSecondSignal 中推迟SteeringAngle,并在CheckThirdSignal 中通过内部转换SteeringAngle/ValidSignal 对其作出反应。
  • @AxelScheithauer,我认为你是对的。您可以输入此作为“答案”。请使用“评论”功能要求澄清。

标签: embedded uml state-machine statechart


【解决方案1】:

首先,我建议重命名状态,这样它们就不会像操作。我建议将它们命名为First Ok receivedSecond Ok receivedOk confirmed

由于SteeringAngle 应在前两次被忽略,唯一由它触发的转换应该是Ok confirmed 中的内部转换。此转换还将调用ValidSignal

没有指定SteeringAngleSignalOk 的顺序。因此,SteeringAngle 应在Second Ok received 中延迟。这样,即使它先出现,它也会留在事件池中。

任何SignalWeakSignalLost 的接收都应返回Ready。您可以通过 OperationalReady 的本地转换来做到这一点。

另外一个建议:在Operational 中定义一个初始状态,并将SystemOk 转换定位到Operational。效果是一样的,但它导致两个顶级状态更好的分离。

【讨论】:

  • 非常感谢您的解决方案。我有一个问题。在 SignalWeakSignalLost 的情况下,我必须调用 CorruptSignal。这可以建模为 SignalWeakSignalLost 在其转换路径中的影响吗?
  • 我用于状态机验证的工具目前不支持 内部转换。我不确定如何对转向角信号进行建模。到目前为止,我已经想出了模型State Machine
  • 是的,SignalWeakSignalLost 过渡的效果可以是CorruptSignal。而且您只需要一个转换,因为每个转换都可以定义许多触发器。当然,当你定义两个过渡时,效果是一样的。这只是更多的工作。
  • 如果不能使用内部转换,如果没有定义进入、退出或执行行为,则可以将其替换为外部转换。然后外部转换具有相同的效果。所以我会简单地使用SteeringAngle/SignalOk;ValidSignal 创建一个从Ok confirmed 到自身的外部转换。
猜你喜欢
  • 2023-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-05
  • 1970-01-01
  • 2021-11-13
  • 2022-06-13
  • 1970-01-01
相关资源
最近更新 更多