预订演示
前页 后页

用JavaScript进行动态仿真

Enterprise Architect的企业版、统一版和终极版提供了使用JavaScript评估仿真时间内的守卫、效果和其他方面的行为的上下文。这为您的状态或活动模型提供了完全自动化、智能的执行,并对断点、执行速度和仿真变量进行了精细控制。

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

  • sim.logger
  • sim.顾客.姓名
  • 这个.count
  • this.账户.金额
推荐的约定是将所有未在 owning类中声明的全局变量或控制变量添加到sim object 。相反,将拥有分类器的属性添加到this object是正常的。

此处提供了一些使用JavaScript设置仿真行为的位置和方式的示例。 Enterprise Architect附带的 EAExample.eap模型中提供了更多示例。

使用JavaScript

环境

行动

也见

分析器脚本

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

Configuring simulation runtime using Analyzer Script in Enterprise Architect

转移
和控件流卫士

这是仿真功能的主力。由于Enterprise Architect在仿真中评估每个节点的可能前进路径,它会测试 Guards 的传出转换和控制流,并且只有在有一条真实路径可遵循时才会前进 - 否则仿真被认为是“阻塞”和人工干预是必须的。您必须使用“==”运算符来测试是否相等。

Specifying a Guard on a Control Flow

元素行为

可以为状态定义进入和退出行为。此类代码将在适当的时间执行,并可用于更新仿真变量和进行其他分配。

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

调用行为

使用 COM

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

this.name="奇偶";

var logger = new COMObject("MySim.Logger");

记录器.Show();

logger.Log("仿真开始");

使用求解器

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

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

作为JavaScript引擎的一部分,这些 Solver 类也可以立即被插件

访问插件

作家创建基于模型的JavaScript插件。

有关详细信息,请参阅Octave Solver、 MATLAB SolverSolvers帮助主题。

GNU Octave求解器 MATLAB 求解器 求解器

有信号行动

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

BroadcastSignal("CancelPressed");

注记记名为 CancelPressed 的触发器必须存在于当前仿真环境中,并且必须具有唯一的名称。

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

广播信号(“{996EAF52-6843-41f7-8966-BCAA0ABEC41F}”);

IS_IN()

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

if (IS_IN("WaitingForInput"))

广播信号(“取消按下”)

注记该名称在所有上下文中必须是唯一的。

跟踪()

跟踪(语句)方法允许您在仿真中的任意点打印出跟踪语句。这是在执行期间用附加输出信息补充仿真log的极好方法。

JavaScript仿真将截断超过定义的跟踪消息最大长度的字符串。

了解更多