当前位置: 首页 > news >正文

Scade 状态机 - 同步迁移

在 Scade 控制流状态机结构支持的迁移中,迁移类型除了强迁移与弱迁移外,还支持一类被称为同步(Synchro)迁移的迁移类型。在同步迁移特性中,涉及到两项关键字,分别为 state 修饰符 final 与迁移类型 synchro。相关的文法如下

state_decl ::= [[ initial ]] [[ final ]] state ID
                [[ unless {{ transition ; }}+ ]]
                data_def
                [[ until {{ transition ; }}
                [[ synchro [[ actions ]] fork ; ]] ]]

为了更好地说明同步迁移的概念,将从说明以下例子开始

node SynchroTrTest(i1, i2, i3: int8)
  returns (o: int8)
automaton SM
  initial state State1
    automaton InnerSM
      initial state InnerState1
        unless
          if i2 > 42 restart InnerState2;
        o = i1;

      final state InnerState2
        o = i2;
    returns ..;
    until synchro resume State4;

  state State4
    o = i3;
returns ..;

在该例子中,状态机 SM 中的状态 State1 内,data_def 部分包含的内容同样包含了一项状态机,InnerSM。在状态机 InnerSM 中,有一项状态为 final 状态。在InnerSM状态机中,若控制转移至 final 状态,则synchro有资格被评估是否激发。在本例中,synchro resume State4 意味着总是激发。

所以同步迁移的目的是为了这样的场景:当状态机中某状态内,所有的内部状态机都达到了 final 状态,则该状态的 synchro 迁移才会被评估是否激发。

若干边界情况

在使用synchro 迁移过程中,需要注意一些边界情况。

1)当状态内没有状态机,但状态有synchro迁移。

syncrho迁移的定义中,需要状态内的状态机都达到final状态,迁移才开始被评估。若状态内无状态机,在该情况下,同步迁移总是会被评估,其行为如同常规的弱迁移。

例子如下。在该例子中,迁移 synchro restart State2; 总是会激发。

node AutomatonTest(i1, i2: int8)
returns (o: int8)
  automaton SM
    initial state State1
      o = i1;
    until synchro restart State2;

    state State2
      o = i2;
  returns ..;
  1. 当状态内的状态机,没有 final 状态,但状态包含同步迁移。

由于同步迁移的被评估条件为,状态内部的状态机都转移至 final 状态。因此,当存在状态机无法进入 final 状态的场景下,同步迁移在任何情况下都无法被激发。

该场景如下例子所示。在该例子中,由于状态机 SM3 无 final 状态,因此,状态 S1 的同步迁移在任何情况下都不会被激发。

node smTest() returns () 
automaton SM
initial state S1 
let
  automaton SM2
  initial state S3
  let
  tel 
  until if true restart S4;

  final state S4 
  let 
  tel 
  returns ..;

  -- SM3 has no final state.
  automaton SM3
  initial state S5
  let
  tel
  until if true restart S6

  state S6
  let
  tel
  returns ..;
tel 
until synchro restart S2;

state S2
let
tel

returns ..;

相关文章:

  • Maven安装和配置详细教程
  • 第十五届蓝桥杯省赛电子类单片机学习过程记录(客观题)
  • 游戏引擎学习第145天
  • 基于昇腾MindIE与GPUStack的大模型容器化部署从入门到入土
  • GPU编程实战指南01:CUDA编程极简手册
  • 以太网口的协议与电路波形
  • Python SQLite3 保姆级教程:从零开始学数据库操作
  • 进制的理解与转换
  • Visual-RFT视觉强化微调:用「试错学习」教会AI看图说话
  • 中性点不接地系统单相接地故障Matlab仿真
  • 工程化与框架系列(25)--低代码平台开发
  • 开放充电点协议(OCPP)技术解析:架构演进与通信机制 - 慧知开源充电桩平台
  • upload-labs文件上传
  • JavaWeb学习——HTTP协议
  • 打造智能聊天体验:前端集成 DeepSeek AI 助你快速上手
  • Jmeter接口测试详解
  • torch 中 model.eval() 和 model.train() 的作用
  • 肿瘤检测新突破:用随机森林分类器助力医学诊断
  • 【JAVA架构师成长之路】【Redis】第18集:Redis实现分布式高并发加减计数器
  • 小程序事件系统 —— 33 事件传参 - data-*自定义数据
  • 做网站推广业务怎么样/推广获客
  • 网站开发的现状及研究意义/线下推广100种方式
  • 小型企业网站开发价格/百度手机助手app下载官网
  • 重庆平台网站建设推荐/上海网络营销seo
  • 网站后台模板 仿cnzz/百度一下官网搜索引擎
  • 如何制作网站策划书/平台软件定制开发