欧拉支持包
要求
准备设置。[医]cfg
在欧拉中创建模拟对象之前,您必须准备 设置。[医]cfg 对于EULER中下载的DLL。
-
在 AnyMath 在画布上添加一个块 EULER协同仿真*并在其参数中设置一对UDP接收和发送端口。 它们将用于在 *AnyMath 和*欧拉*。 指定输入和输出信号的名称、数量和测量单位-见设置说明.cfg下面。
-
在参数中 Путь к Эйлер: 街区 EULER协同仿真 指定要在其中生成文件的文件夹的绝对路径。
设置。[医]cfg. 然后点击按钮 生成配置文件 . AnyMath 生成文件设置。[医]cfg根据块参数到这个文件夹。也得到一个图书馆
Engee_Euler.dll使用以下命令:engee.package.getdemos("Engee-Device-Manager")执行命令后,库将在 AnyMath 一路走来
/用户/工程师-设备管理器-演示/集成/欧拉. 下载档案Engee_Euler.dll从指定的文件夹到您的计算机,并将其保存在本地文件系统的任何方便的目录中。
在欧拉中创建模拟对象
创建模拟对象有两种方法:
*通过欧拉顶部面板上的特殊菜单; *在欧拉文本编辑器中手动操作。
用于创建模拟对象的面板
共仿真的对象 .elr,elr-档案(建筑) cosimulation engee_cosim=engee(…))是通过欧拉上部面板中的特殊菜单创建的。
*第1步。*启动*欧拉*并创建或打开现有项目 .elr,elr.
第2步。*在欧拉的上部菜单中,选择 *«[医]共仿真» → AnyMath → «要创建…»:

*第三步。*一扇窗户将打开 *«模拟设置 AnyMath»*顶部有三个空字段:

把它们填好:
模拟名称*是任意对象名称(例如, 工程师连接). 该名称将成为一个标识符 .elr,elr-文件。
DLL的路径 AnyMath* -通往 Engee_Euler.dll. 如果DLL位于以下位置,则可以指定相对路径 .elr,elr.
*配置文件的路径 AnyMath -通往 设置。[医]cfg. 您可以指定一个相对路径,如果 设置。[医]cfg 躺在旁边 .elr,elr.
之后,输入/输出传感器表将自动填充来自文件的数据。 设置。[医]cfg.
第4步。*点击 *«是的». 一个对象 工程师 它将在当前自动创建 .elr,elr-一个文件,并将在文本编辑器中可用。
第5步。*要查看或编辑已创建的对象,请选择 *«[医]共仿真» → AnyMath → «Cosimulations列表…»:

窗口中将出现带有对象名称的行(例如, 工程师_科西姆). 双击该行将打开窗口 «模拟设置 AnyMath»:

这意味着一个充满的窗口
窗户 «模拟设置 AnyMath»(带填充表)是一个可视化界面*链接*传感器(传感器)带信号的欧拉 AnyMath :
-
«输入参数»(列 «传感器名称», «测量单位»)是欧拉中的传感器,欧拉将从这些传感器接收数据。 AnyMath . 它们的名称和单位对应于字段
输出_SIGNAL_NAMES/输出_测量_UNITS在设置。[医]cfg(从 AnyMath 这些是*输出*信号)。 -
«输出参数»(列 «传感器名称», «测量单位»)是欧拉传感器,将数据传输到 AnyMath . 它们的名称和单位对应于
输入_SIGNAL_NAMES/INPUT_MEASURE_UNITS在设置。[医]cfg(从 AnyMath 这些是*输入*信号)。
|
«入口处» 和 «产出» 窗口从欧拉*的角度显示*,而不是 AnyMath . 检查时不要混淆方向:欧拉所说的 «入口处» (接受 AnyMath), AnyMath 认为这是他自己的 «出口;出口». 上面截图的匹配示例:
|
创建于 .elr,elr-档案
点击后 *«是的»*在EULER文本编辑器中(即在文件本身中 .elr,elr)像这样的行会自动出现:
cosimulation engee_cosim = engee("Engee_Euler.dll", "settings.cfg",
list((Sensor_F_frict, "[kgf]"), (V_G, "[m/s]"), (Pos_G, "[m]"), (V_M, "[m/s]")),
list(("pos_cmd", "[m]")));
第一个列表包含欧拉输出(事实是 AnyMath 从*欧拉*获取),第二个列表是欧拉输入(什么 AnyMath 传输到*欧拉*)。 在这两个列表中,每对都是 — (传感器名称,"测量单位"). Euler项目中必须存在传感器的名称。
如果通过双击并再次单击打开已创建的对象 «是的»,它将在更新 .elr,elr. 如果需要删除对象,在窗口中 «Cosimulations列表»*有一个按钮 *«移走».
手动创建模拟对象
或者,您可以在EULER文本编辑器中手动添加具有对象创建的行。 工程师. 例如:
cosimulation engee_cosim = engee("Engee_Euler.dll", "settings.cfg",
list((Sensor_F_frict, "[kgf]"), (V_G, "[m/s]"), (Pos_G, "[m]"), (V_M, "[m/s]")), list(("pos_cmd", "[m]")));
手动创建对象的语法 工程师 在欧拉文本编辑器中:
engee(DLLPath, SettingsPath, U, Y)
方法参数
string SimDLLName
包含DLL库的DLL模块的路径 Engee_Euler.dll.
-
弦U-一个字符串,描述输入传感器的名称和传递给模型的值的测量单位 AnyMath .行中的输入对象用逗号相互分隔,每个对象的测量单位在其名称后用方括号表示。 当前EULER项目中正在搜索与给定名称对应的标量或传感器类型对象。 如果未找到指定的对象名称或找到的对象的类型与标量或传感器不匹配,则诊断错误。 输入对象的名称与它们在DLL中的名称无关,映射按它们在字符串中提到的顺序执行。
描述输入传感器的字符串示例:
"sensor_U1 [kg], sensor_U2 [], sensor_U3 [m/s]" -
弦Y--一个字符串,描述输出传感器的名称及其从模型传输的值的测量单位 AnyMath 在*欧拉*软件包中。行中的传感器用逗号彼此分开,每个对象的测量单位在其名称后用方括号表示。 输出对象的名称与它们在DLL中的名称无关,映射按它们在字符串中提到的顺序执行。 生成的输出阵列中的传感器名称必须唯一。 具有指定名称的输出参数自动创建为子对象,其值根据模型而变化。 AnyMath .
描述输出传感器的字符串示例:
"sensor_Y1 [], sensor_Y2 [N], sensor_Y3 [m]"
首先推出 — AnyMath 或欧拉
在当前版本中,可以首先从侧面启动cosimulation AnyMath ,并从*欧拉*的一侧-具体的顺序并不重要。 在可配置超时期间,双方都在等待握手消息。
握手超时由参数*最大连接超时,ms*在块中设置 EULER协同仿真 (默认情况下 2 分钟)。
典型场景:
*首先启动欧拉, AnyMath 第二:切换到模式 «项目研究». 欧拉将开始期待握手。 AnyMath ,然后在 AnyMath . AnyMath 向EULER发送握手,之后握手完成-双方进行数据交换。
+

*推出 AnyMath 一、欧拉二:先运行模型 AnyMath . 她会期望从欧拉握手,那么你需要把欧拉进入项目研究模式,之后他立即接受并确认握手。 AnyMath .
如果在超时期间未收到握手,则模拟将失败,并且诊断消息中会显示一条错误消息。
在这种情况下,检查IP和UDP端口是否匹配 设置。[医]cfg 而在块参数 EULER协同仿真 ,以及OS级别端口的可用性。
模型时间同步 AnyMath 和欧拉
在模拟 AnyMath 和欧拉工作为*两个独立的模型*(黑盒子),每个都有自己的模型时间。 他们的时间不必在交换中的任何一点相匹配—这是一种正常情况。 之间的连接提供 Engee_Euler.dll. 在每一步调用DLL库的内部计算函数。 AnyMath 并将EULER计算的数据与当前模型时间对齐 AnyMath 根据以下规则。
场景2-欧拉 «不算数» (欧拉模型时间滞后 AnyMath)
欧拉还没有达到 AnyMath 要求的数据。 例如,欧拉阶跃比阶跃大10倍 AnyMath ,并且在从一个步骤请求数据时从 AnyMath 欧拉只走了每十步。 DLL库的计算函数不 «等待» 欧拉是同步调用。 那样的话 AnyMath 获取欧拉在他的*时间上的最后一个可用时刻*(即在欧拉的上一步)计算的信号的值,而不是在当前时刻 AnyMath .
此行为等效于*通过分段阶跃函数*外推:直到欧拉赶上, AnyMath 获取离散网格上的最后一个计算值(最接近其左侧当前时刻)。
场景3-欧拉 «重新计算» (欧拉领先于模型时间 AnyMath)
欧拉已经超越了自己, AnyMath 还在老台阶上。 例如,欧拉步骤比步骤小10倍 AnyMath ,并在提出要求时 AnyMath 欧拉设法采取了他内心的10个步骤。 在这种情况下,DLL库的计算函数从欧拉缓冲区中选择最接近时间点的值*。 AnyMath,但不超过它*。 即欧拉 «他跳回来» 此刻 AnyMath (用他计算的最后一步,这 ≤t_Engee).
实际影响
例子::
欧拉步骤和 AnyMath 匹配*(例如, st_euler=0.001 和 st_engee=0.001). 模型时间总是相等的,同步是微不足道的,并且没有外推。
欧拉步骤不止一步 AnyMath* (例如, st_euler=0.01 由 st_engee=0.001). 欧拉将落后1-10步 AnyMath . AnyMath 在其10个步骤中的每一个接收欧拉信号的分段常数值。
欧拉步长小于一步 AnyMath* (例如, st_euler=0.0001 由 st_engee=0.001). 欧拉重新计算, AnyMath 从离散欧拉网格中获取值(每10个欧拉步长),其余9个欧拉步长用于细化。 欧拉的步骤 AnyMath 细化到离散精度。
建议。*选择步骤,使他们的关系是完整的。 (1:1, 1:10, 10:1). 那就不会有 «浮动» 会有一个时间滞后,模型的行为将更加可预测。
基于模型块的多个欧拉共仿真块的共仿真
在一个 AnyMath -模型可以放置在多个块中 EULER协同仿真(多仿真)-它们中的每一个都与自己的实例通信 阿穆勒。exe文件 和他的 .elr,elr-项目。 还允许嵌套体系结构:主模型(父母。工程师)通过块 模型*调用辅助模型(子。工程师),而这反过来又包含了它自己的 *EULER协同仿真 ,它连接到欧拉的单独实例。
每个区块 EULER协同仿真 必须有自己描述的唯一的UDP端口对 设置。[医]cfg. 这也适用于通过块的嵌套共仿真。 模型 :为父模型和子模型选择不同的端口。
设置两对(父模型和子模型)的示例:
*父模型:
+
elr1/设置。[医]cfg -父模型的桥梁 AnyMath :
+
MODEL_NAME multicosim_parent2
INPUT_SIGNAL_COUNT 1
OUTPUT_SIGNAL_COUNT 1
INPUT_SIGNAL_NAMES dummy_out
INPUT_MEASURE_UNITS [m/s]
OUTPUT_SIGNAL_NAMES dummy_in
OUTPUT_MEASURE_UNITS [N]
IP 127.0.0.1
RCV_PORT 7479
SND_PORT 7959
MAX_RCV_BUFFER_SIZE 4096
MAX_SND_BUFFER_SIZE 4096
SRVCIO_TIMEOUT 20000.0
HANDSHAKE_TIMEOUT 120000.0
SAMPLE_TIME 0.001
DIAGNOSTIC 1
*儿童模型:
+
elr2/设置。[医]cfg -儿童模型的桥梁 AnyMath (通过块嵌套 模型):
+
MODEL_NAME multicosim_sub2
INPUT_SIGNAL_COUNT 1
OUTPUT_SIGNAL_COUNT 1
INPUT_SIGNAL_NAMES dummy_out
INPUT_MEASURE_UNITS [m/s]
OUTPUT_SIGNAL_NAMES dummy_in
OUTPUT_MEASURE_UNITS [N]
IP 127.0.0.1
RCV_PORT 7489
SND_PORT 7919
MAX_RCV_BUFFER_SIZE 4096
MAX_SND_BUFFER_SIZE 4096
SRVCIO_TIMEOUT 20000.0
HANDSHAKE_TIMEOUT 120000.0
SAMPLE_TIME 0.001
DIAGNOSTIC 1
注意不同的端口对(7479/7959 反对 7489/7919):这是两个桥之间的隔离。
具有两个欧拉共仿真块的共仿真中块的执行顺序
在通过块的多仿真项目中 模型 重要的是要了解*在欧拉的哪个实例中,您需要首先运行模型*。 AnyMath 按一定的顺序执行块:结果可能是里面的块是先执行的。 模型 (即在子模型中 子。工程师),然后才是父模型的块 父母。工程师. 这意味着与子模型的euler握手应早于与父模型的euler握手安装。
要在模型设置中查看此顺序 AnyMath ,启用选项 «模块执行顺序»*在设置:菜单 *«设置»→标签 «调试»→勾选框 «模块执行顺序».

启用该选项后,其在当前模型周期中的序列号将出现在每个块的右上角。
父模型 multicosim_parent。工程师 -块是可见的 模型 (上 multicosim_sub。工程师)和块 EULER协同仿真 . 在此示例中,父模型中的块被分配了编号。 7, 8, 9, 10, 11 — 也就是说,它们在*孩子之后被执行:

儿童模型 multicosim_sub。工程师 (通过双击块打开 «模型» 父模型中)。 在这里,块被编号为1,2,3,4—也就是说,它们比父模型的所有块更早*执行。:

根据这个顺序(子模型为1-4,父模型为7-11),经验法则如下:按照与块的执行顺序相对应的顺序运行欧拉 AnyMath -首先,在EULER实例中打开并运行计算。 子。工程师 (监听一对端口的那个 7489/7919 从 elr2/设置。[医]cfg),并且只有在与子模型的握手完成后,才在EULER实例中运行计算,用于 父母。工程师 (港口 7479/7959 从 elr1/设置。[医]cfg). 如果您以相反的顺序运行它们,父EULER将等待握手,直到超时到期(默认情况下为2分钟)并返回错误。
在设置中描述模型参数。[医]cfg
档案 设置。[医]cfg 描述用于交换的信号的模型和组成 AnyMath 和*欧拉*:名称、数量、物理单位、网络参数、超时和调试模式。
下表列出了DLL库识别的所有参数。 Engee_Euler.dll. 如果缺少文件中的相应行,则应用默认值。
| 钥匙 | 类型 | 资料描述 |
|---|---|---|
|
行 |
模型名称 AnyMath . 必须与传递到的打开模型的名称匹配 |
|
整个 |
信号的数量 AnyMath 从*欧拉*获取(即欧拉给出多少值 AnyMath 一步)。 |
|
整个 |
信号的数量 AnyMath 发送到*欧拉*(即欧拉接受多少个值 AnyMath 一步)。 |
|
姓名一览表 |
输入名称 AnyMath --这些是*欧拉*给出的信号的名称 AnyMath . 在 |
|
姓名一览表 |
输出名称 AnyMath --这些是*欧拉*接收到的信号的名称 AnyMath . 在 |
|
单位数组 |
输入的物理单位 AnyMath . 每个元素都写在由空格分隔的方括号中,例如: |
|
单位数组 |
产出的物理单位 AnyMath ,格式类似 |
|
IPv4 |
地址在哪里 AnyMath 和*欧拉*交换UDP数据包。 默认情况下 |
|
整个 |
DLL库所在的UDP端口 |
|
整个 |
DLL库所在的UDP端口。 |
|
字节 |
UDP接收缓冲区的大小。 默认情况下 |
|
字节 |
UDP传输缓冲区的大小。 默认情况下 |
|
女士 |
阻塞套接字上的I/O操作的超时。 默认情况下 |
|
女士 |
在cosimulation初始化期间等待握手消息的超时。 默认情况下 |
|
秒数 |
DLL交换信号的集成步骤。 必需*必须是 |
|
|
启用日志记录。 |
设置的例子。[医]cfg
一个完整的示例,具有最小的共仿真(一个输入和一个输出信号)。 信号和端口的名称是任意的,由用户从特定任务的块中生成。
MODEL_NAME multicosim_parent2
INPUT_SIGNAL_COUNT 1
OUTPUT_SIGNAL_COUNT 1
INPUT_SIGNAL_NAMES dummy_out
INPUT_MEASURE_UNITS [m/s]
OUTPUT_SIGNAL_NAMES dummy_in
OUTPUT_MEASURE_UNITS [N]
IP 127.0.0.1
RCV_PORT 7479
SND_PORT 7959
MAX_RCV_BUFFER_SIZE 4096
MAX_SND_BUFFER_SIZE 4096
SRVCIO_TIMEOUT 20000.0
HANDSHAKE_TIMEOUT 120000.0
SAMPLE_TIME 0.001
DIAGNOSTIC 1
任务的最小示例的相应行 `.elr,elr`在EULER项目中,使用DLL库声明连接器对象如下所示:
cosimulation engee_cosim = engee("Engee_Euler.dll", "settings.cfg",
list((fx_sensor, "")), // список датчиков → INPUT_SIGNAL_NAMES
list(("FX", ""))); // список Engee-сигналов → OUTPUT_SIGNAL_NAMES
日志记录
DIAGNOSTIC*参数控制将日志记录到文件 engee_logs.txt脧脗脭脴. 该文件被创建*旁边的项目 .elr,elr.
诊断1*-日志记录启用。 诊断0*-日志记录被禁用。
片段的例子 engee_logs.txt脧脗脭脴:
[2026-03-04 22:12:55] Euler model time: 0.053750
[2026-03-04 22:12:55] Engee model time: 0.054000
[2026-03-04 22:12:55] Received from Engee, signal dX: 0.400000
[2026-03-04 22:12:55] Received from Engee, signal dY: 0.300000
[2026-03-04 22:12:55] Received from Engee, signal dZ: 0.500000
[2026-03-04 22:12:55] Send from Euler, signal Fx: 0.305510
[2026-03-04 22:12:55] Send from Euler, signal Fy: 0.104000
[2026-03-04 22:12:55] Send from Euler, signal Fz: 0.524999
日志也显示在*Engee客户端程序窗口中。整合*。 在启动模型时 AnyMath 此窗口中显示消息,通知与EULER建立通信的进度:
INFO: Waiting for connection with EULER.
INFO: If the model inside EULER is not running, please start it.
INFO: Successfully interconnected with EULER!
前两行表示 AnyMath 已经发送了握手,正在等待EULER的确认;此时,用户需要在EULER中运行计算。 行 信息:与欧拉成功连接! 成功完成握手后出现。