Engee 文档

在有限自动机中处理数据

页面进行中。

Engee有限状态机是控制逻辑,转换和状态的独立实体,但与通常的实体隔离。 区块图书馆工程 block library icon 而且,作为一个结果,建立经典模型的可能性。

为了使状态机与外部块交换数据,使用块数据。 图表 及其对应的端口。 例如:

  • 创建输出数据时,输出端口会自动出现在*Chart*块中,该块可以连接到模型的其他元素。

  • 同样,在创建输入数据时,出现用于从外部接收信息的输入端口。

  • 本地数据仅存在于状态机内部(在*Chart*块内部),并且不创建端口。

因此,数据充当有限自动机和模型其余部分之间的连接接口:没有它们,自动机模型仍然是一个独立的实体,但有了它们,它就成为系统的完整部分。

要在*Engee*中使用有限状态机数据,窗口" 信号 "-它允许您集中管理有限状态机模型的所有数据。 在它的帮助下,它们被结合在一起:

state machines variables cn

  • 所有状态机数据列表;

  • 数据类别(输入、输出、参数);

  • 数据类型、维度和复杂性的设置。

所有状态机数据的单窗口方法简化了调试并使模型更加透明:所有定义都集中在一个地方,而不是分散在各地 国家 stateflow state过渡 stateflow default transition.

数据类别

在窗口" 信号 "支持以下数据类别:

state machines variables 1 cn

  • 入场 --从外部模型进入状态机的数据。

  • 输出 --状态机导出到外部的数据。

  • 本地变量 --仅在状态机内部可用的数据(在*Chart*块内)。 它们用于存储中间计算并控制状态和转换的逻辑。

  • 参数 -在模拟启动时从同名工作区变量复制的固定值(参数数据),并且在模拟期间不会更改。

来自*图表*块的数据不显示在 可变窗口 variables article 2 1. 与此窗口的唯一连接是通过工作区变量,可以通过*图表内的*参数*引用*:

例如,如果在*Chart*中使用名称设置了*参数* [医]脚,而是一个变量 [医]脚 如果它不存在于工作区中(以及变量窗口中),则在编译/模拟模型时会发生错误。

如果给变量赋值 [医]脚 在工作区中(例如通过 命令提示符 img 41 1 2),则:

  • 变量 [医]脚 它将出现在变量窗口中;

  • 变量的值将在模拟期间对所有*Chart*块可用,其中在窗口中" 信号 "*参数*是指 [医]脚.

创建数据

创建新数据:

  1. 打开窗户" 信号 »;

  2. 点击按钮 state machines variables icon;

  3. 在打开的窗口中输入数据的名称和特征,然后单击" 添加。 »:

    state machines variables panel cn

    窗口中的数据名称" 信号 "必须匹配有限状态机模型中这些数据的名称。

符号助手

运行模拟时 start button 或汇编 compile button 1 Engee*验证有限状态机模型的正确性。 如果其中有未定义的数据,则打开" *符号助理 ". 在里面你可以:

  • 查看找到的未定义名称;

  • 为它们分配一个类别(例如,"退出");

  • 确认添加到*信号*列表中。

state symbol wizard cn

设置数据类型

必须指定每种数据类型。 这决定了在仿真过程中如何存储和使用它。 支持与Julia语言类型系统一致的类型。:

  • 继承:自动 --数据类型继承;

  • Int8, Int16, Int32, Int64, Int128 --有符号整数;

  • UInt8, UInt16, UInt32, UInt64, UInt128 --无符号整数;

  • 漂浮物16, 漂浮物32, 漂浮64 --浮点数;

  • 布尔 --逻辑类型;

  • 定点 --固定点(以优化计算)。

假设在面板" 信号 "*图表块*您已创建输出数据 , , , . 然后在状态里面你可以这样写:

# 在活动状态(进入/期间/退出)期间执行的代码
s = [1, 2, 3, 4, 5]         # ,长度5
a = [1, 2, 3, 4, 5, 6, 7]   # ,长度7

# 将数组的部分分配给输出端口
q = s[1:4]   # q == [1, 2, 3, 4]
w = a[1:4]   # w == [1, 2, 3, 4]

# 二维输出(2×3)
M = reshape(collect(1:6), 2, 3)   # 矩阵 2×3
# 如果需要,可以指定类型:
# M = Float32.(reshape(collect(1:6), 2, 3))

如果要在没有初始化的情况下创建给定类型/大小的矩阵,则使用显式数组创建。:

B = Array{Float64,2}(undef, 3, 3)  # 具有未初始化值的3×3÷(任意内存内容)
# 在使用它之前,请务必分配值,例如:
B .= 0.0
# 或者立即创建一个初始化的数组。:
# B = zeros(Float64, 3, 3)
# B = fill(1.0, 3, 3)
unef 不使用零填充数组。 内容取决于以前使用的内存,因此必须在读取其元素之前初始化这样的数组。

结果是有限状态机的以下模型:

  • 图表块内:

    state machines variables example ru

  • *工程师*模型(在*图表*块外):

    state machines variables example 2

维度和复杂性

除了数据类型之外,您还可以设置维度(标量、矢量或数组)和复杂性。

  • 尺寸-在窗口中显示" 信号 "作为用逗号分隔的整数序列:

    • -1 (默认值)-尺寸不是固定的,是自动确定的。:

      • 对于输入/输出,它取自外部模型的连接端口;

      • 对于参数,它取自同名的工作区变量(工作区,外部*Chart*);

      • 对于本地数据,它取自图表代码中实际分配的值。

        如果形状可以改变,这种模式很方便。

    • 显式形式是输入用逗号分隔的数字。:

      • n -来自 n 元素;

      • n,m -矩阵 n×m;

      • n,m,k -三维阵列 n×m×k.

        序列 n[,m[,k…​]] 在*Dimension*字段中,它对应于Julia数组构造函数的数值参数。 例如, n,m矩阵{Float32}(undef,n,m) (= 数组{Float32,2}(undef,n,m)).

  • 复杂性 --确定数据是否可以包含复杂值。:

    • Inherit:auto--值从外部模型中的关联变量或信号自动继承。 例如,如果在工作区或输入块中使用复杂类型,那么状态机中的数据将是复杂的。

    • Off--禁用继承,数据始终有效。

    • On--禁用继承,数据总是复杂的。

使用建议

  • 使用" 入场 "和" 输出 "将有限状态机连接到外部模型。

  • 显式指定数据类型。 这增加了状态机的可预测性并有助于避免错误。

  • 申请" 参数 "对于常数和系数,使模型更具可读性。

  • 处理复数时,启用" 复杂性 ":启用。

有用的连结