Engee 文档

Engee物理建模语言事件

页面进行中。

在Engee物理建模语言中,事件用于描述系统状态随时间的突然变化,例如模式切换,约束触发或状态之间的转换。

条件构造

要编写条件方程,根据变量的值,使用函数 ifelse(。..)gt;gt, lt, 通用电气, , 情商, neq.

有关工作示例和功能的详细描述,请参阅文章 Enee物理建模语言的枚举、分支、循环和模块

离散事件

构造用于描述条件更改时触发的离散事件。 @何时. 它允许您指定在切换逻辑表达式时要执行的操作。

条件使用运算符 边缘. 允许以下条件条目:

  • 边缘(cond) --当条件改变时触发事件 康德错误真的.

  • 缘(!cond) --当条件改变时触发事件 康德真的错误.

  • 边缘(cond1)&边缘(cond2) --事件在同时发生更改时触发 公寓1公寓2错误真的.

  • 边缘(cond1)及cond2 --更改时触发事件 公寓1错误真的 并满足条件 公寓2.

  • 边缘(cond1|/边缘(cond2) --当条件改变时触发事件 公寓1公寓2错误真的.

它们的组合也是可能的。: (边缘(cond1)及边缘(cond2))/边缘(cond3).

@when edge(x > 3) begin
    event_var1 ~ expr1
    event_var2 ~ expr2
end

满足条件时同时发生的分配在块内指定。 在每个赋值中,只应在左侧部分指定事件值(事件=真)的变量。

可以在赋值中使用相同事件变量的先前值。:

@when (x > 3) begin
    event_var1 ~ event_var1 + 1
end

此外,您可以使用以下方法指定其他条件 @elsewhen. 如果在同一时间开始满足多个条件,则会触发与其中第一个条件对应的事件。

@when edge(x > 1) begin
    event_var1 ~ expr1
    ...
    @elsewhen edge(y < 0)
    event_var2 ~ expr2
    ...
end

可以使用标识符初始化事件变量 初始值,初始值:

@when initialevent begin
    V ~ x + 3
    @elsewhen edge(z > 0.9)
    V ~ 1
end

使用离散事件的组件示例:

@engeemodel example begin
    @outputs begin
        out = 0
    end
    @variables begin
        x = 0
    end
    @equations begin
        der(x) ~ K
        out.u ~ x
    end

    @variables [event = true] begin
        K = 1
        V = 2
    end

    @when edge(x > 1) begin
        K ~ 12
    end
    @when edge(t >= 1.5) begin
        V ~ 5
        @elsewhen edge(K > 3)
        V ~ 12
    end
end

此刻当 x 从下到上与1的值相交,变量 K 值将设置为12。 马上 V 值将设置为12。 此刻 t==1.5 变量 V 它将成为等于5。

混合自动机

混合自动售货机(@modecharts)是概念的延伸 有限自动机。 与有限自动机一样,它们包含离散状态和它们之间的转换,但与此同时,它们自己的连续微分方程在每个状态下被求解。

建筑工程 @modecharts 可以在里面使用 物理组件与其他结构(@变量, @方程 等等)。

因此,混合自动机结合了离散逻辑和连续物理动力学:当状态发生变化时,求解器被重新初始化,系统开始使用新的方程组进行计算。

建筑工程 @modecharts 设置混合自动机并启用:

  • @modechart -混合自动售货机公告;

  • @模式 -一组模式(状态);

  • @模式 -包含其自身方程的单独模式 @方程;

  • @过渡 -国家之间过渡的规则。

此外:

  • @条目 -设置进入模式时的动作;

  • @初始 -定义初始模式(如果未指定,则机器在列表中的第一个模式下初始化)。

条件中的所有参数 @初始 必须包裹在 违约(). 使用变量和端口参数 @初始 不能。

混合自动售货机的一个例子

@parameters begin
    x0 = 0.5
    lower_bnd = 0.0
    upper_bnd = 1.0
    threshhold = 0.01
    e = 0.7
end

@variables begin
    x = x0, [priority = "high"]
    v = 0.0
    F = 0.0
    v_old = 0, [event=true]
end

@nodes begin
    flange = EngeePhysicalFoundation.Mechanical.Translational.Flange
end

@equations begin
    v ~ flange.v
    der(x) ~ v
end

@branches begin
    F:(flange.F,*)
end

@modecharts begin
    m = @modechart begin
        @modes begin
            @mode FREE begin
                @equations begin
                    F ~ 0
                end
            end

            @mode (IMPACT, BIG_IMPACT) begin
                @entry begin
                    v_old ~ v
                end
                @equations begin
                    v ~ -e * v_old
                end
            end
        end

        @transitions begin
            (FREE, IMPACT, FREE) => x <= lower_bnd
            (FREE, IMPACT, FREE) => x >= upper_bnd
        end

        @initial begin
            BIG_IMPACT => (default(x0) < (default(lower_bnd) - default(threshhold))) ||
                          (default(x0) > (default(upper_bnd) + default(threshhold)))
            #如果满足此条件,则机器从BIG_IMPACT状态启动
        end
    end

    # m2 = ...
end

这里:

  • 在街区里 @modecharts 正在创建混合自动机 m,描述离散的行为模式。

  • 在模式 免费 方程得到满足 F~0 -权力 F 它等于零。

  • 在复合模式下 (影响,BIG_IMPACT):

    • @条目 入时,存储之前的速度值。 v_old~v.

    • @方程 正在设置新的速度值 v~-e*v_old,即速度变化符号并按因子缩放 e.

  • @过渡 转换的规则被定义:

    • (免费,冲击,免费)⇒x⇐lower_bnd -减少时 x 下面 n.下位,下位 正在过渡到 影响,然后返回到 免费.

    • (免费,冲击,免费)⇒x>=upper_bnd -同样,当超过 上一级.

  • @初始 状态开始的条件进行设定 大的影响 如果初始值为 x 超越一切 n.下位,下位上一级 考虑到 特雷什霍尔德.

  • m2=。.. 显示您可以添加第二个。 @modechart 在同一物理组件中。

实用建议

  • 如果转换不能按预期工作,请减少块中的*最大步长*、*绝对容差*和*相对容差*参数。 Solver Configuration.

  • 声明构造的顺序 @何时@modechart 在组件的代码中,它可以影响组件在事件链中的行为,尽管物理建模语言具有一般的声明性。