预订演示

请注意 : 本帮助页面不适用于最新版本的Enterprise Architect. 最新的帮助文档在这里.

前页 后页

使用JavaScript进行动态仿真

Enterprise Architect的Corporate和Suite版本提供了使用JavaScript评估Simulation上下文中的防护措施,效果和行为的其他方面的功能。这提供了对状态或活动模型的全自动,智能执行,并且可以精确控制断点,执行速度和模拟变量。

您可以编写使用任何变量的JavaScript。为了使您能够通过用户界面显示此类变量的值,定义了两个内置对象simthis ,它们的成员可以显示在Local Variables窗口(也称为Locals窗口)中。可以显示的变量示例如下:

  • Sim.logger
  • sim.Customer.name
  • this.count
  • this.Account.amount
建议的约定是将未在所属类中声明的任何全局变量或控制变量添加到sim对象。相反,将拥有分类器的属性添加到此对象是正常的。

这里提供了一些示例,说明了在何处以及如何使用JavaScript设置模拟行为。 Enterprise Architect附带的EAExample.eap模型中提供了更多示例。

使用JavaScript

设置

行动

也可以看看

分析器脚本输入

如果在“执行分析器”窗口的“输入”字段中输入JavaScript代码,则此代码将注入到Simulation中并在Simulation开始之前执行。这对于建立COM变量,全局计数器,函数和其他初始化很有用。

Configuring simulation runtime using Analyzer Script in Enterprise Architect

过渡和控制流防护

这是“仿真”功能的主力军。当Enterprise Architect评估模拟中每个节点上可能的前进路径时,它会在传出的转换和控制流上测试Guards,并且仅在有一条真实的路径可遵循时才向前移动-否则,模拟被视为“受阻”且需要人工干预是必须的。您必须使用'=='运算符测试是否相等。

Specifying a Guard on a Control Flow

元素行为

可以为国家定义进入和退出行为。这样的代码将在适当的时间执行,对于更新Simulation变量和进行其他分配很有用。

您还可以通过类的对象实例和模型中的活动来模拟类的行为。

通话行为

使用COM

在Enterprise Architect的模拟器中实现JavaScript的一个非常重要的功能是,它支持创建COM对象。这提供了将正在运行的模拟与几乎任何其他本地或远程进程连接的能力,并且可以基于外部数据影响模拟,或者根据当前模拟状态可能更改外部世界中的数据或行为(例如,更新机械Enterprise Architect外部的模型或软件仿真)。创建COM对象的语法如下所示:

this.name =“单数奇数”;

var logger = new COMObject(“ MySim.Logger”);

logger.Show();

logger.Log(“模拟已开始”);

使用解算器

现在,在Enterprise Architect中具有JavaScript代码的任何地方(例如在Dynamic Simulation中),您都可以使用称为“ Solver”(Solver类)的JavaScript构造与外部工具集成,并直接使用每个工具中的功能来简单直观地进行操作。执行复杂的数学和图表功能。这些调用可帮助您轻松地在内置JavaScript引擎和每个环境之间交换变量。支持的两个数学库是MATLAB和Octave。

要使用规划求解类,您需要了解首选数学库中可用的功能以及它们使用的参数,如产品文档中所述。

作为JavaScript引擎的一部分,这些求解器类也立即访问Add-In作家创建基于JavaScript模型Add-Ins 。

有关更多详细信息请参见Octave解算器, MATLAB解 算器 和解算 器类帮助主题。

八度解算器 MATLAB解算器 解算器

信号动作

可以直接使用JavaScript引发信号事件(触发)。 BroadcastSignal()命令用于引发一个命名触发器,该触发器可能会影响模拟的当前状态。例如,此片段引发名为“ CancelPressed”的信号(触发)。

BroadcastSignal(“ CancelPressed”);

请注意,名为CancelPressed的触发器必须存在于当前的模拟环境中,并且必须唯一地具有该名称。

您也可以使用其GUID调用信号。例如:

BroadcastSignal(“ {996EAF52-6843-41f7-8966-BCAA0ABEC41F}”);

IS_IN()

如果当前模拟在任何与传入名称匹配的线程中处于活动状态,则IS_IN(state)运算符将返回True。例如,要有条件地控制执行,可以编写如下代码:

如果(IS_IN(“ WaitingForInput”))

BroadcastSignal(“ CancelPressed”)

请注意,该名称在所有上下文中必须唯一。

跟踪()

Trace(statement)方法允许您在模拟中的任何任意点打印出跟踪语句。这是在执行期间用附加输出信息补充仿真日志的一种极好的方法。

学到更多