定义 RIMB 状态图和它们的执行

可以使用状态图来描述 Rhapsody® 实现块 (RIMB) 的行为。

关于此任务

在“由运行时环境管理”方式下,到达 AUTOSAR 接收方端口的数据元素将变换为触发式操作。 当数据元素到达时,运行时环境 (RTE) 将调用相应的活动操作,该操作将直接触发状态图过渡。 运行时环境在 AUTOSAR 数据元素的级别执行排队。 在此方式下,只有由于 AUTOSAR 数据元素到达而引发的触发式操作才能触发状态图过渡。

在“由 Rhapsody 管理”方式下,到达 AUTOSAR 接收方端口的数据元素将变换为 Rhapsody 事件。数据元素到达时,将调用一项活动操作,该操作将使相应事件在 Rhapsody 实现块的事件队列中排队。该实现块的 doExecute 命令将运行,并且会将事件逐个分派到状态图中,从而模仿典型的 Rhapsody 机制。 此方式设计双重排队:通过运行时环境进行排队以及通过 Rhapsody 进行排队。

RIMB 的状态图可以按以下两种方式之一执行:
  • 由 RTE 管理 – 在此方式下,到达 AUTOSAR 接收方端口的数据元素变换为触发式操作。数据元素到达时,RTE 将调用相应的活动操作,该操作将直接触发状态图过渡。 该 RIMB 既不处于活动状态也不是执行管理器,并且 RHP 事件队列不存在。排队通过 AUTOSAR 数据元素级别的 RTE 来完成。在此方式下,只有由于 AR 数据元素到达而引发的触发式操作才能触发状态图过渡。 不允许调用 RicGEN。
  • 由 RHP 管理 – 在此方式下,到达 AUTOSAR 接收方端口的数据元素变换为 RHP 事件。 数据元素到达时,将调用一项操作,该操作将使相应事件在 RIMBO 的事件队列中排队。RIMB 需要进行定期活动并且是执行管理器。该实现块的 doExecute 将定期运行,并且会将事件逐个分派到状态图中,从而模仿典型的 RHP 机制。这涉及通过 RTE 并通过 RHP 进行的双重排队。

在“由运行时环境管理”方式下定义 Rhapsody 实现块 (RIMB) 的状态图

过程

  1. 将 RIMB 定义为“顺序”。
  2. 对于数据到达时将会触发过渡的实现块接收方端口 p 上的每个属性 x,定义名为 evP_x 的触发式操作。
  3. x 的访问方式设置为显式阻塞显式非阻塞(即,非隐式)。 访问方式的类型将由常规 C 类型来确定,而不是由 Rhapsody 事件确定。
  4. 创建一个使用触发式操作作为过渡触发器的状态图。
  5. 对于每个这样的 p.x,可以定义一个活动操作用作 p.x 的分派器。 实现活动操作是为了调用 receiveAndHandleData_p_x()。 无论是在“由运行时环境管理”方式下还是在“由 Rhapsody 管理”方式下,此步骤都相同。 区别在于,Rhapsody 为 receiveAndHandleData_p_x() 生成的代码有所不同。
  6. 将状态图的所有分派器都设置为受防护,以确保各个分派器之间互相排斥。

在“由 Rhapsody 管理”方式下定义 Rhapsody 实现块 (RIMB) 的状态图

过程

  1. 将 RIMB 定义为具有“定期”执行策略的“活动”。
  2. 创建一个将 Rhapsody 事件用作过渡触发器的状态图。
  3. 使用这些事件来确定 Rhapsody 实现块接收方接口类型化端口上的属性的类型。如果接收方端口 p 上 AUTOSAR 数据元素 x 的到达应该触发事件 ev,请通过 ev 来确定 Rhapsody 实现块接收方接口类型化端口 p 上的 x 的类型。 与上一组步骤中描述的触发式操作不同,ev 是状态图上的事件的名称,而不是通过组合 px 创建的名称。 evp.x 绑定是通过使 x 的类型由 ev 确定实现的。
  4. 对于每个这样的 p.x,定义一个活动操作用作 p.x 的排队器。 实现活动操作是为了调用 receiveAndHandleEvent_p_x()。 无论是在“由运行时环境管理”方式下还是在“由 Rhapsody 管理”方式下,此步骤都相同。 区别在于,Rhapsody 为 receiveAndHandleEvent_p_x() 生成的代码有所不同。

反馈