解决Engee和Euler积分问题
我们正在研究如何组织在两个系统中同时计算的计算任务:Engee动态建模平台和Euler软件包。
欧拉是一个软件包,旨在分析机械系统的操作,包括复杂的运动学,大的运动,刚性和可变形的结构元件,液压,气动和电气系统,控制系统和其他组件。 [1]
Engee.集成-Engee平台的子系统;消除了访问操作系统低级接口的问题,允许Engee连接到外部设备,接口,协议和软件环境。 [2]
工程师准备工作
要在欧拉软件包中围绕一个模型创建一个计算环境,我们可以组装任何模型并在其中放置一个块。 Euler Cosimulation.
让我们打开附加到此示例的模型。:
cd(@__DIR__)
engee.open( "example_Euler.engee" )
在组件的输入端,信号与总线组装在一起,总线是一条结构化的信号线,其中各个信号有自己的名字。 让我们看看这些信息以及其他设置应该在块设置中指定的位置。 Euler Cosimulation:
在配置了块并指定了我们将在欧拉环境中运行的示例的路径后,您需要打开Engee程序。整合(Host-Device-Manager),可以使用以下命令获得:
engee.package.install("Engee-Device-Manager")
该程序在运行Euler软件包的Engee(云平台)和本地资源之间接收和传输信息。 有关安装和运行此程序的详细信息,请参阅[2]。
通过在程序中键入配对 Host-Device-Manager 前面的命令给出的地址,并点击"连接"按钮。 要将块设置传输到Euler,请单击"生成配置文件"按钮。
该文件将与示例一起出现在指定的文件夹中。 它的内容对应于块设置:
MODEL_NAME OscillatorExample \
INPUT_SIGNAL_COUNT 3 \
OUTPUT_SIGNAL_COUNT 3 \
MODEL_PARAM_COUNT 3 \
INPUT_SIGNAL_NAMES dX dY dZ \
OUTPUT_SIGNAL_NAMES Fx Fy Fz \
MODEL_PARAM_NAMES Cx Cy Cz \
INIT_MODEL_PARAM 2000 2000 2000 \
DIAGNOSTIC 1
最后一个诊断参数负责将传输和接收的数据保存到日志文件中以用于调试目的。 您还将在计算后在目标平台上的Euler项目目录中找到此文件。
现在已经安装了接口,并且Euler软件包已经收到了有关传输数据结构的说明,我们将从标准交付开始进行培训项目的配置。
在LOGOS中准备任务
我们将要进行的项目叫做 Pendulum 在目录里。 Euler/Samples/Projects/Beginner.
在这个项目中,我们将使用几个"传感器"对象作为模型输入数据的端口。
例子
Pendulum严格地说,它不允许我们更新任何重要的系统参数,因为摆锤的质量,重力和长度的设置不是使用传感器或其他元素"带出"的,摆锤的角度被欧拉求解器复盖。 但我们将看到在仿真过程中,数据传输如何反映在输入值图中。
让我们创建一个用于与Engee协同仿真的新"传感器"(在Euler的早期版本中,这可以通过用于与MATLAB/Simulink协同仿真的传感器来完成)。 第一个参数是设置这个传感器的名称,第二个是指定一个可以从Engee技术支持获得的DLL文件。 此DLL文件包含用于将欧拉与程序接口的函数。 Host Controller.
在下一个字段中,我们将看到与Engee交换信息的参数,下面我们将能够配置哪些模型变量将通过通信通道接收来自Engee的结构的哪些参数的值。
选择任何可用选项,然后单击"接受"。 现在Euler项目代码如下所示:
point point1=( 0 [ m ], 0 [ m ], 0 [ m ] );
point point2=( 1 [ m ], -0.8 [ m ], 0 [ m ] );
solid solid1=cylinder( point1, point2, 0.1 [ m ], mass = 1 [ kg ] );
solid solid2=sphere( point2, 0.3 [ m ], mass = 0 [kg] );
body Стойка=body( color = index( 4 ) );
body Маятник=body( color = index( 45 ) );
body Маятник < ( solid1, solid2 );
MIP MIP1=massPoint( point2, 2 [kg] );
body Маятник < ( MIP1 );
joint joint1=rotational( Стойка, Маятник, point1, projectZ );
gravity gravity1=parallel( reverse( projectY ) );
sensor_array engee_connector=simulink( "C:/Users/nkapyrin/Downloads/Engee_Euler.dll", "joint1.gamma [rad],maxRelAVDelta_IIM [ ],maxRelAV_IIM [],",
"sensor1 [ ],sensor2 [ ],sensor3 [ ],", "", 0.01 [s], integrMethod = constRK4: );
set ground = Стойка;
/\///////////////////////////////////////////////////////////////////////////////////
/\ Единицы измерения;
set units = SI;
我们创建了一个对象 engee_connector 现两个计算平台的接口设置。
启动联合解决方案
在两种环境中进行计算之前,您需要指定相同的仿真时间,关联积分步骤(Euler中的步骤应小于或等于Engee中的积分步骤),并配置图形的显示。
启动联合计算的过程如下:
- 检查主机控制器程序是否仍在配对。 如果连接断开或显示错误消息,请单击"重新连接"。
- 在Engee中运行计算并等待窗口中的消息
Host Controller建议在欧拉侧开始计算。 - 在欧拉侧运行计算。
使用旧版本的Euler软件包时,要重新启动计算,必须删除以前创建的"传感器"(在项目配置文件中)并重新创建它。 如果您的工作流程中出现此类问题,则应更新Euler版本。
结论
Engee和Euler软件包的集成使得简化机构活动部分的建模成为可能,可以将部分计算转移到简化的一维模型中,或者简单地用web界面围绕机构模型,并为预处理和后处理实验结果提供另一个强大的机制。