В базу знаний

Инструкция по переводу проектов EULER из версии 12 в версию 13

В версии 13 ПК EULER были существенно переработаны некоторые объекты, что может привезти к проблемам при открытии старых проектов. Для открытия проектов, созданных в версии 12 необходимо изменить или создать заново объекты, приведенные в таблице ниже. Для удобства переработанные объекты разделены на категории правок. Далее в каждом разделе будет описание переработки конкретного объекта.

28 мин чтения
1.      Незначительные изменения в семантики создания объектов
№ Объект Краткое описание Стр.
1.1 Событие (event). Методы:
  • Изменения механизма по значению датчика (reformsBySensor);
  • Изменения механизма по локальному экстремуму датчика (extremum);
  • Регулярное событие (regularEvent).
Введен именованный метод (logical(“…”)) создания ключевого (необязательного) параметра (logCondition) при создании объекта. 4
1.2 Шкала спектра (spectralScale). Методы:
  • Линейная шкала спектра (linear);
  • Логарифмическая шкала спектра (logarithmic).
Изменены имена ключевых (необязательных) параметров с upperBound на spectrUpperBound и с upperBound_rel на spectrUpperBoundRel. 4
1.3 Шарнир (joint). Методы:
  • Жесткое соединение звеньев (rigid);
  • Выборочное жесткое соединение звеньев (rigid2).
Удален ключевой (необязательный) параметр (linkType) при создании объекта. 5
1.4 Силовой элемент (force) аэродинамического воздействия. Методы:
  • Осесимметричная аэродинамическая сила (aerodynamics1);
  • Осесимметричная аэродинамическая сила 2 (aerodynamics2);
  • Аэродинамическая сила крыла (aerodynamics3);
  • Аэродинамическая сила (aerodynamics4).
Изменено имя внутреннего системного датчика с alfa на alpha. 6
1.5 Силовой элемент (force) контактного взаимодействия. Методы:
  • Силовое взаимодействие точка-поверхность (contactPS2);
  • *Силовое взаимодействие точка-линия в плоскости (contactPLplane);
  • *Силовое взаимодействие линия-линия в плоскости (contactLLplane);
  • Силовое взаимодействие точка-линия «шарик в трубе» (contactPLpipe);
  • Силовое взаимодействие точка-линия «цилиндр-паз» (contactPLgroove).
Удален ключевой (необязательный параметр (D_max) при создании объекта.

Для методов с меткой * исключены позиционные (обязательные) параметры: «Точка, которая используется для определения внутренней стороны поверхности».
7-8
2.      Изменения при создании списков (list)
№ Краткое описание Стр.
2.1 При создании списка перечислением (метод list) теперь нельзя объединять объекты типа point и node. 9
2.2 При создании списка перечислением (метод list) теперь первый объект не может быть создан «по месту» с помощью методов: move, mirror, copy. 9
2.3 Введены новые типы, создаваемых объектов при создании списка по шаблону (метод listT). А именно: sensor_array, scalar_array, function_array, pair. 10
3.      Изменения в позиционных (обязательных) параметрах объектов
№ Объект Краткое описание Стр.
3.1 Линия (line). Метод:
Параметрическая линия (functionParam)
Теперь параметр S безразмерный, ранее он имел размерность длины [length]. 11
3.2 Программное движение (motion). Метод:
Идеальный канал (ideal2).
Теперь в качестве параметра SensorX (датчик, значение которого используется как аргумент в программе регулирования) нельзя задавать объектом типа scalar. 11
3.3 Все объекты. Теперь в объектах, где строго необходимо задать параметр объектом типа scalar больше нельзя задавать параметр объектом типа sensor с постоянным значением. 12
4.      Существенные переработки в комплексных командах анализа
№ Команда анализа Краткое описание Стр.
4.1 Параметрический анализ Изменен метод создания команды с plotFx() на parametricSweep().

Помимо этого, был введен позиционный (обязательный) параметр «начальное значение» для варьируемых параметров.
13
4.2 Исследование методом Монте-Карло (MonteCarlo) Был введен позиционный (обязательный) параметр «Число расчетов».

Изменена семантика при создании распределений варьируемых параметров.
14
4.3 Краевая задача (boundaryProblem) Существенно переработана семантика метода. Теперь настройки варьируемых параметров группируются в специализированные объекты designVariable. 15
4.4 Идентификация (identification) Команда полностью переработана. 16
4.5 Покоординатная оптимизация (optimizeCoord) Команда анализа удалена.

Взамен создана альтернативная команда «Оптимизация методом Хука-Дживса» (optimizeHookeJeeves).
16
4.6 Оптимизация методом скользящего допуска (optimizeCoord) Команда анализа удалена.

Взамен создана альтернативная команда «Комплексная оптимизация с ограничениями» (optimizeComplex).
17
4.7 Цикл команд (cycle) Команда анализа удалена. 17
4.8 Расчет траектории положения (posTrace) Удален ключевой (необязательный параметр) time1step.

Изменена семантика параметров варьирования условий состояния.
17
5.      Изменение работы с некоторыми файлами
№ Объект Краткое описание Стр.
5.1 Геометрия, импортированная из STEP/IGES (файл c расширением EBG) Отключена поддержка файла EBG.

Теперь геометрия, импортированная из из STEP/IGES конвертируется в файл ECT. В EULER есть возможность конвертировать EBG в ECT.

В следствие этого, геометрия добавляется в проект как объект structure, вместо assembly.
18
5.2 Удалена поддержка комплексных объектов (complex). Теперь комплексные объекты перешли в блок «типовые модели» и добавляется в проекты в виде агрегатов. 18
6.      Изменения в логики вычисления некоторых датчиков
№ Краткое описание Стр.
6.1 Теперь датчики замеряющие скорости, ускорения, силы, моменты и датчики значения которых зависят от значений датчиков на предыдущих шагах интегрирования в режиме редактирования имеют значение – «нет значения», е не «ноль». Примеры таких датчиков:
  • Проекция скорости точки в системе координат проекта на вектор (componentVelocity);
  • Проекция ускорения точки в системе координат проекта на вектор (componentAcceleration);
  • Значение скорости точки в системе координат проекта (velocity);
  • Значение ускорения точки в системе координат проекта (acceleration);
  • Проекция скорости точки звена относительно другого звена на вектор (transVelocity);
  • Проекция ускорения точки звена относительно другого звена на вектор (transAcceleration);
  • Проекция угловой скорости звена относительно другого звена на вектор (rotVelocity);
  • Проекция углового ускорения звена относительно другого звена на вектор (rotAcceleration);
  • Производная датчика по времени (derivative);
  • Модуль силы (magnitudeF);
  • Модуль момента (magnitudeM);
  • Проекция силы (projectionF);
  • Проекция момента (projectionM);
  • Усреднение значения датчика (sensorMean);
  • Значение датчика с задержкой (sensorDelay);
  • Значение датчика c предыдущего шага (prevValue);
  • Проекция перегрузки точки звена на вектор (loadFactor);
  • Силовые факторы, действующие на звено (forces);
  • Численное дифференцирование датчика (numDerivative);
  • Кинетическая энергия всех звеньев проекта (kEnergy);
  • и тп.
19-20
6.2 Теперь датчик «Численное дифференцирование датчика» (numDerivative)» принимает значение – «нет значения», пока число шагов интегрирования не достигнет значения ключевого (необязательного) параметра «Число шагов для расчета производной датчика» (stepsN). В прошлой версии число шагов на начале расчета адаптировалось под число рассчитанных шагов интегрирования. 19-20

1. Незначительные изменения в семантики создания объектов

1.1 Изменения в событиях (event)

Методы:

  • Изменения механизма по значению датчика (reformsBySensor);
  • Изменения механизма по локальному экстремуму датчика (extremum);
  • Регулярное событие (regularEvent).

Введен именованный метод (logical(“…”)) создания ключевого (необязательного) параметра (logCondition=…) при создании объекта.

Версия Код
12 sensor sinA=sin(2*PI*10 [Hz]*time); event eventStop=reformsBySensor( list( stop( ) ), sinA, 0, logCondition = list(( "time > 0.5 [s]" )) );
13 sensor sinA=sin(2*PI*10 [Hz]*time); event eventStop=reformsBySensor( list( stop( ) ), sinA, 0, logCondition = logical( "time > 0.5 [s]" ) );

1.2 Изменения в шкале спектра (spectralScale).

Методы:

  • Линейная шкала спектра (linear);
  • Логарифмическая шкала спектра (logarithmic).

Изменены имена ключевых (необязательных) параметров с upperBound на spectrUpperBound и с upperBound_rel на spectrUpperBoundRel.

Версия Код
12 spectralScale spectralScale1=linear( bounds:, 1, upperBound = 1000, bandsN = 100 ); spectralScale spectralScale2=linear( bounds:, 1, upperBound_rel = 10, bandsN = 100 );
13 spectralScale spectralScale1=linear( bounds:, 1, spectrUpperBound = 100, bandsN = 100 ); spectralScale spectralScale2=linear( bounds:, 1, spectrUpperBoundRel = 10, bandsN = 100 );

1.3 Изменения в Шарнирах (joint).

Методы:

  • Жесткое соединение звеньев (rigid);
  • Выборочное жесткое соединение звеньев (rigid2).

Удален ключевой (необязательный) параметр (linkType = …) при создании объекта. Этот параметр определяет можно ли разрушать данный шарнир. В версии 13 любая жесткая связка шарниров может быть разрушена.

Версия Код
12 point point1=point( 0 [ m ], 0 [ m ], 0 [ m ] ); point point2=point( 1 [ m ], 0 [ m ], 0 [ m ] ); solid solid1=sphere( point1, 1 [ m ], mass = 1 [ kg ] ); solid solid2=sphere( point2, 1 [ m ], mass = 1 [ kg ] ); body body1=body( ); body body1 < ( solid1 ); body body2=body( ); body body2 < ( solid2 ); joint joint1=rigid( list( body1, body2 ), linkType = yesDelete: ); event event1=reformsBySensor( list( jointsDelete( list( joint1 ) ) ), time, 0.5 [s] );
13 point point1=point( 0 [ m ], 0 [ m ], 0 [ m ] ); point point2=point( 1 [ m ], 0 [ m ], 0 [ m ] ); solid solid1=sphere( point1, 1 [ m ], mass = 1 [ kg ] ); solid solid2=sphere( point2, 1 [ m ], mass = 1 [ kg ] ); body body1=body( ); body body1 < ( solid1 ); body body2=body( ); body body2 < ( solid2 ); joint joint1=rigid( list( body1, body2 ) ); event event1=reformsBySensor( list( jointsDelete( list( joint1 ) ) ), time, 0.5 [s] );

1.4 Изменения Силовых элементах (force) аэродинамического воздействия.

Методы:

  • Осесимметричная аэродинамическая сила (aerodynamics1);
  • Осесимметричная аэродинамическая сила 2 (aerodynamics2);
  • Аэродинамическая сила крыла (aerodynamics3);
  • Аэродинамическая сила (aerodynamics4).

Изменено имя внутреннего системного датчика с alfa на alpha. Теперь везде в подобных элементах одинаковое название alpha.

Версия Код
12 point point1=point( 0 [ m ], 0 [ m ], 0 [ m ] ); solid solid1=sphere( point1, 1 [ m ], mass = 1 [ kg ] ); body body1=body( ); body body1 < ( solid1 ); // medium medium1=mediumV( 1.2 [kg/m3], 340 [m/s], projectX, 0 [m/s] ); force force1=aerodynamics1( medium1, body1, point1, projectX, 1 [m2], 1, 1, 1 [m], list( ) ); // sensor cosA=cos(force1.alfa);
13 point point1=point( 0 [ m ], 0 [ m ], 0 [ m ] ); solid solid1=sphere( point1, 1 [ m ], mass = 1 [ kg ] ); body body1=body( ); body body1 < ( solid1 ); // medium medium1=mediumV( 1.2 [kg/m3], 340 [m/s], projectX, 0 [m/s] ); force force1=aerodynamics1( medium1, body1, point1, projectX, 1 [m2], 1, 1, 1 [m], list( ) ); // sensor cosA=cos(force1.alpha);

1.5 Изменения Силовой элемент (force) контактного взаимодействия.

Методы:

  • Силовое взаимодействие точка-поверхность (contactPS2);
  • *Силовое взаимодействие точка-линия в плоскости (contactPLplane);
  • *Силовое взаимодействие линия-линия в плоскости (contactLLplane);
  • Силовое взаимодействие точка-линия «шарик в трубе» (contactPLpipe);
  • Силовое взаимодействие точка-линия «цилиндр-паз» (contactPLgroove).

Удален ключевой (необязательный параметр (D_max) при создании объекта. Этот параметр был нужен для определения правильного направления входа в контакт. В новой версии это направление определяется автоматически.

Для методов с меткой * исключены позиционные (обязательные) параметры: «Точка, которая используется для определения внутренней стороны поверхности». В новой версии для определения нормали линии в контакте используется направление нормали к плоскости контакта. Для удобства направление нормали контактирующей линии отображается на виде проекта при выборе силового элемента. Именно поэтому в примере снизу в 13-й версии в качестве нормали к плоскости контакта используется reverse(projectZ), а не projectZ.

Помимо этого, были произведены правки в шаблонах контактных взаимодействий. При этом старые шаблоны поддерживаются. В новой версии параметры нормального взаимодействия и трения разведены по разным шаблонам. В 12-й версии использовалась только одна модель трения – «щеточная» с поправками для точек с радиусом по скорости (для реализации качения), а в 13-й версии реализованы две модели трения: щеточная (без поправки по скорости) и Кулоновская (больше подходит для моделирования качения). В новой версии шаблон контакта состоит из позиционного (обязательного) параметра «Шаблон нормального взаимодействия» и ключевого (необязательного) параметра «Шаблон модели трения».

В новой версии шаблон контактного взаимодействия для примера ниже может выглядеть так:

// щеточная модель трения template templNorm=kelvinVoigt2( 100 [N/mm], 1 [kg], 0.2 ); template templFrict=brush( 0.3 ); template templCont=contactParameters( templNorm, frictionParameters = templFrict ); force forceCont=contactPLplane( point1, line1, reverse( projectZ ), templCont, RC = 0.1 [ m ] );

Или так:

// Кулоновская модель трения template templNorm=kelvinVoigt2( 100 [N/mm], 1 [kg], 0.2 ); template templFrict=coulomb( 0.3, 0.001 [m/s], 0.01 [m/s] ); template templCont=contactParameters( templNorm, frictionParameters = templFrict ); force forceCont=contactPLplane( point1, line1, reverse( projectZ ), templCont, RC = 0.1 [ m ] );
Версия Код
12 point point1=point( 0 [ m ], 1 [ m ], 0 [ m ] ); point point2=point( -1 [ m ], 0 [ m ], 0 [ m ] ); point point3=point( 1 [ m ], 0 [ m ], 0 [ m ] ); line line1=polyLine( list( point2, point3 ) ); solid solid1=sphere( point1, 0.1 [ m ], mass = 1 [ kg ] ); // body body1=body( color = RGB( 204, 204, 204 ) ); body body1 < ( solid1, point1 ); body BASE=body( color = RGB( 153, 153, 255 ) ); body BASE < ( line1 ); // gravity gravity1=parallel( reverse( projectY ) ); // template templCont=contactParams2( 100 [N/mm], 1 [ kg ], 0.2, 0.3 ); point point4=point( 0 [m], -0.1 [m], 0 [m] ); force forceCont=contactPLplane( point1, line1, projectZ, point4, templCont, D_max = 1 [ m ], RC = 0.1 [ m ] ); // set ground = BASE;
13 point point1=point( 0 [ m ], 1 [ m ], 0 [ m ] ); point point2=point( -1 [ m ], 0 [ m ], 0 [ m ] ); point point3=point( 1 [ m ], 0 [ m ], 0 [ m ] ); line line1=polyLine( list( point2, point3 ) ); solid solid1=sphere( point1, 0.1 [ m ], mass = 1 [ kg ] ); // body body1=body( color = RGB( 204, 204, 204 ) ); body body1 < ( solid1, point1 ); body BASE=body( color = RGB( 153, 153, 255 ) ); body BASE < ( line1 ); // gravity gravity1=parallel( reverse( projectY ) ); // template templCont=contactParams2( 100 [N/mm], 1 [ kg ], 0.2, 0.3 ); force forceCont=contactPLplane( point1, line1, reverse(projectZ), templCont, RC = 0.1 [ m ] ); /\//////////////////////////////////////////////////////////////////// set ground = BASE;

2. Изменения при создании списков (list)

2.1 При использовании списка перечислением (метод list) теперь нельзя объединять объекты типа point и node.

В предыдущей версии при создании списка точек перечислением можно было добавлять объекты типа узел (node).

Версия Код
12 node n0=nodePoint( point( 0 [m], 0 [ m ], 0 [ m ] ) ); point p1=pointN( n0, 1 [m], 1 [ m ], 0 [ m ] ); point p2=pointN( n0, 2 [ m ], 1 [m], 0 [ m ] ); point p3=pointN( n0, 3 [m], 0 [m], 0 [ m ] ); line lXS=polyLine( list( n0, p1, p2, p3 ) );
13 point p0=point ( 0 [m], 0 [ m ], 0 [ m ] ); node n0=nodePoint( p0 ); point p1=pointN( n0, 1 [m], 1 [ m ], 0 [ m ] ); point p2=pointN( n0, 2 [ m ], 1 [m], 0 [ m ] ); point p3=pointN( n0, 3 [m], 0 [m], 0 [ m ] ); line lXS=polyLine( list( p0, p1, p2, p3 ) );

2.2 При создании списка перечислением (метод list) теперь первый объект не может быть создан «по месту» с помощью методов: move, mirror, copy.

В новой версии первый объект списка перечислением задает тип объектов, которые будут содержаться в списке. Такие методы создания объектов, как move, mirror, copy могут использоваться для создания объектов разного типа (node, point, plane и тп). В следствие этого возникает конфликт при определении типа объектов в списке.

Версия Код
12 point p1=point( 1 [ m ], 1 [ m ], 0 [ m ] ); point p2=point( 2 [ m ], 0 [ m ], 0 [ m ] ); line l1=polyLine( list( move( p1, projectX, -1 [ m ] ), p1, p2 ) );
13 point p1=point( 1 [ m ], 0 [ m ], 0 [ m ] ); point p2=point( 2 [ m ], 0 [ m ], 0 [ m ] ); point p0=move( p1, projectX, -1 [ m ] ); line l1=polyLine( list( p0, p1, p2 ) );

2.3 Введены новые типы, создаваемых объектов при создании списка по шаблону (метод listT). А именно: sensor_array, scalar_array, function_array, pair.

В старой версии при создании списка по шаблону объектов типа массив датчиков (sensor_array:) нужно было указывать тип sensor:. Аналогично с подобными массивами скаляров и функций.

В новой версии объект пара (pair) стал самостоятельным типом, что отразилось на создании списка таких объектов по шаблону. Этот объект используется при создании функции по точкам (pieceLine) и функции интерполяции по функциям (pieceLineF).

Также изменилась семантика создания пары в виде отдельного объекта.

Версия Код
12 list P = list( ( X, Y ) );
13 pair P = ( X, Y ) ;
Версия Код
12 Пример 1: node n0=nodePoint( point( 0 [m], 0 [m], 0 [m] ) ); list lP=listT( point:, "point( (~-1)*1[m], 0 [m], 0 [m] )", 4 ); list lN=listT( node:, "node(lP[~], ~*10 [deg], ~*14[deg], ~*25 [deg])",4); list lS=listT( solid:, "sphere(lP[~], 1 [m], mass=1[kg])", 4 ); list lSens=listT( sensor:, "orientation( n0, lN[~], axisZ:, axisY:, axisX:)", 4 ); Пример 2: list listPair=listT( list:, "list((~-1, sin(2*PI*~/10)))", 10 ); function func1=pieceLine( listPair );
13 Пример 1: node n0=nodePoint( point( 0 [m], 0 [m], 0 [m] ) ); list lP=listT( point:, "point( (~-1)*1[m], 0 [m], 0 [m] )", 4 ); list lN=listT( node:, "node(lP[~], ~*10 [deg], ~*14[deg], ~*25 [deg])",4); list lS=listT( solid:, "sphere(lP[~], 1 [m], mass=1[kg])", 4 ); list lSens=listT( sensor_array:, "orientation( n0, lN[~], axisZ:, axisY:, axisX: )", 4 ); Пример 2: list listPair=listT( pair:, "(~-1, sin(2*PI*~/10))", 10 ); function func1=pieceLine( listPair );

3. Изменения в позиционных (обязательных) параметрах объектов

3.1 Изменена размерность позиционного параметра S параметрической линии (functionParam).

В новой версии параметр S безразмерный, ранее он имел размерность длины [length].

Версия Код
12 node node1=nodePoint( point( 0 [m], 0 [m], 0 [m] ) ); function X (s [mm]) = 1[m]*#s/1[m]; function Y (s [mm]) = 0.1[m]*sin(2*PI*#s/1[m]); line line1=functionParam( node1, X, Y, 0 [m], 0 [m], 1 [m], lineN = 40 );
13 node node1=nodePoint( point( 0 [m], 0 [m], 0 [m] ) ); function X (s []) = 1[m]*#s; function Y (s []) = 0.1[m]*sin(2*PI*#s); line line1=functionParam( node1, X, Y, 0 [m], 0, 1, lineN = 40 );

3.2 Изменен тип принимаемого параметра идеального канала (ideal) при создании программного движения.

В новой версии в качестве параметра SensorX (датчик, значение которого используется как аргумент в программе регулирования) нельзя задавать объектом типа scalar.

Версия Код
12 scalar A=1; scalar V=1 [m/s]; point p1=point( 0 [m], 0 [m], 0 [m] ); solid s1=sphere( p1, 0.1 [m], mass = 1 [kg] ); body B=body( ); body B < ( s1 ); body BASE=body( ); joint joint1=translational( BASE, B, p1, projectX ); sensor vel=derivative( joint1.s ); // motion motion1=ideal2( V, vel, A );
13 scalar V=1 [m/s]; point p1=point( 0 [m], 0 [m], 0 [m] ); solid s1=sphere( p1, 0.1 [m], mass = 1 [kg] ); body B=body( ); body B < ( s1 ); body BASE=body( ); joint joint1=translational( BASE, B, p1, projectX ); sensor vel=derivative( joint1.s ); // motion motion1=ideal2( V, vel, time );

3.3 Теперь в объектах, где строго необходимо задать параметр объектом типа scalar больше нельзя задавать параметр объектом типа sensor с постоянным значением.

Версия Код
12 Пример 1: sensor A=1; scalar A2=A*A; Пример 2: sensor v=1[m/s]; medium medium1=mediumV( 1.2 [ kg / m3 ], 340 [ m / s ], projectX, v );
13 Пример 1: scalar A=1; scalar A2=A*A; Пример 2: scalar v=1[m/s]; medium medium1=mediumV( 1.2 [ kg / m3 ], 340 [ m / s ], projectX, v );

4. Существенные переработки в комплексных командах анализа

При переводе проектов из 12-й версии в 13-ю рекомендуем закомментировать в текстовом редакторе, а затем создать эту команду заново уже в новой версии через интерфейс. В новой версии разработаны новые удобные окна создания таких команд. Помимо этого, в новой версии многие команды получили дополнительные настройки, которые могут быть полезны в ваших проектах.

4.1 Параметрический анализ.

Изменен метод создания команды с plotFx() на parametricSweep().

Помимо этого, был введен позиционный (обязательный) параметр «начальное значение» для варьируемых параметров.

Версия Код
12 scalar teta0=20 [deg]; scalar V0=10 [m/s]; point point1=point( 0 [m], 0 [m], 0 [m] ); vector vector1=rotate( projectX, projectZ, teta0 ); solid solid1=sphere( point1, 0.1 [m], mass = 1 [kg] ); body body1=body( color = RGB( 168, 168, 168 ) ); body body1 < ( solid1 ); body BASE=body( color = RGB( 51, 153, 255 ) ); set ground = BASE; condition condition1=transVelocity( BASE, vector1, body1, point1, V0 ); gravity gravity1=parallel( reverse( projectY ) ); sensor X=bodyDisplacement( BASE, point1, projectX, body1, point1 ); sensor Y=bodyDisplacement( BASE, point1, projectY, body1, point1 ); event eventStop=reformsBySensor( list( stop( ) ), Y, 0 [m], logCondition = list( ( "time > 0 [s]" ) ) ); // command RK4_1m2=constRK4( 1000 [s], 0.01 [s] ); command parametric=plotFx( list( teta0 ), list( 40 [ deg ] ), list( 5 ), list( X, Y ), RK4_1m2 );
13 scalar teta0=20 [deg]; scalar V0=10 [m/s]; point point1=point( 0 [m], 0 [m], 0 [m] ); vector vector1=rotate( projectX, projectZ, teta0 ); solid solid1=sphere( point1, 0.1 [m], mass = 1 [kg] ); body body1=body( color = RGB( 168, 168, 168 ) ); body body1 < ( solid1 ); body BASE=body( color = RGB( 51, 153, 255 ) ); condition condition1=transVelocity( BASE, vector1, body1, point1, V0 ); gravity gravity1=parallel( reverse( projectY ) ); sensor X=bodyDisplacement( BASE, point1, projectX, body1, point1 ); sensor Y=bodyDisplacement( BASE, point1, projectY, body1, point1 ); event eventStop=reformsBySensor( list( stop( ) ), Y, 0 [m], logCondition = logical( "time > 0 [s]" ) ); // command RK4_1m2=constRK4( 1000 [s], 0.01 [s] ); command parametric=parametricSweep( list( teta0 ), list( teta0 ), list( 40 [deg] ), list( 5 ), list( X, Y ), RK4_1m2 ); /\/////////////////////////////////////////////////////////////////////////////////// set ground = BASE;

4.2 Исследование методом Монте-Карло (MonteCarlo)

Был введен позиционный (обязательный) параметр «Число расчетов».

Изменена семантика при создании распределений варьируемых параметров.

Версия Код
12 scalar teta0=20 [deg]; scalar V0=10 [m/s]; // point point1=point( 0 [m], 0 [m], 0 [m] ); vector vector1=rotate( projectX, projectZ, teta0 ); solid solid1=sphere( point1, 0.1 [m], mass = 1 [kg] ); // body body1=body( color = RGB( 168, 168, 168 ) ); body body1 < ( solid1 ); body BASE=body( color = RGB( 51, 153, 255 ) ); set ground = BASE; // condition condition1=transVelocity( BASE, vector1, body1, point1, V0 ); // gravity gravity1=parallel( reverse( projectY ) ); // sensor X=bodyDisplacement( BASE, point1, projectX, body1, point1 ); sensor Y=bodyDisplacement( BASE, point1, projectY, body1, point1 ); // event eventStop=reformsBySensor( list( stop( ) ), Y, 0 [m], logCondition = list( ( "time > 0 [s]" ) ) ); // command RK4_1m2=constRK4( 1000 [s], 0.01 [s] ); command MK=MonteCarlo( list( equilibrium( teta0, 10 [deg] ), normal( V0, 0.1 [ m / s ] ) ), list( X, Y ), "res.mcr", RK4_1m2 );
13 scalar teta0=20 [deg]; scalar V0=10 [m/s]; // point point1=point( 0 [m], 0 [m], 0 [m] ); vector vector1=rotate( projectX, projectZ, teta0 ); solid solid1=sphere( point1, 0.1 [m], mass = 1 [kg] ); // body body1=body( color = RGB( 168, 168, 168 ) ); body body1 < ( solid1 ); body BASE=body( color = RGB( 51, 153, 255 ) ); // condition condition1=transVelocity( BASE, vector1, body1, point1, V0 ); // gravity gravity1=parallel( reverse( projectY ) ); // sensor X=bodyDisplacement( BASE, point1, projectX, body1, point1 ); sensor Y=bodyDisplacement( BASE, point1, projectY, body1, point1 ); // event eventStop=reformsBySensor( list( stop( ) ), Y, 0 [m], logCondition = logical( "time > 0 [s]" ) ); // command RK4_1m2=constRK4( 1000 [s], 0.01 [s] ); command MK=MonteCarlo( 10, list( uniform( teta0, 15 [deg], 25 [deg] ), normal( V0, V0, 0.1 [m/s] ) ), list( X, Y ), " res.mcr ", RK4_1m2 ); /\/////////////////////////////////////////////////////////////////////// set ground = BASE;

4.3 Краевая задача (boundaryProblem)

Существенно переработана семантика метода. Теперь настройки варьируемых параметров группируются в специализированные объекты designVariable. Эти специализированные объекты могут использоваться и при создании других новых команд анализа.

Версия Код
12 scalar teta0=20 [deg]; scalar V0=10 [m/s]; point point1=point( 0 [m], 0 [m], 0 [m] ); vector vector1=rotate( projectX, projectZ, teta0 ); solid solid1=sphere( point1, 0.1 [m], mass = 1 [kg] ); // body body1=body( color = RGB( 168, 168, 168 ) ); body body1 < ( solid1 ); body BASE=body( color = RGB( 51, 153, 255 ) ); // condition condition1=transVelocity( BASE, vector1, body1, point1, V0 ); // gravity gravity1=parallel( reverse( projectY ) ); // sensor X=bodyDisplacement( BASE, point1, projectX, body1, point1 ); sensor Y=bodyDisplacement( BASE, point1, projectY, body1, point1 ); // event eventStop=reformsBySensor( list( stop( ) ), Y, 0 [m], logCondition = list( ( "time > 0 [s]" ) ) ); // command RK4_1m2=constRK4( 1000 [s], 0.01 [s] ); command kray=boundaryProblem( list( teta0 ), list( 1 [ deg ] ), list( X ), list( 1.5 [ m ] ), 0.001, 0.0001, 100, RK4_1m2 ); // set ground = BASE;
13 scalar teta0=20 [deg]; scalar V0=10 [m/s]; point point1=point( 0 [m], 0 [m], 0 [m] ); vector vector1=rotate( projectX, projectZ, teta0 ); solid solid1=sphere( point1, 0.1 [m], mass = 1 [kg] ); // body body1=body( color = RGB( 168, 168, 168 ) ); body body1 < ( solid1 ); body BASE=body( color = RGB( 51, 153, 255 ) ); // condition condition1=transVelocity( BASE, vector1, body1, point1, V0 ); // gravity gravity1=parallel( reverse( projectY ) ); // sensor X=bodyDisplacement( BASE, point1, projectX, body1, point1 ); sensor Y=bodyDisplacement( BASE, point1, projectY, body1, point1 ); // event eventStop=reformsBySensor( list( stop( ) ), Y, 0 [m], logCondition = logical( "time > 0 [s]" ) ); // command RK4_1m2=constRK4( 1000 [s], 0.01 [s] ); command kray=boundaryProblem( list( designVariable( teta0, teta0, 1, lowerBound = 5 [deg], upperBound = 85 [deg] ) ), list( X ), list( 1.5 [m] ), list( 1 [mm] ), 0.01, 100, RK4_1m2 ); /\/////////////////////////////////////////////////////////////////////// set ground = BASE;

4.4 Идентификация (identification)

Команда полностью переработана. Осталось только старое название метода создания команды анализа. Поэтому даже сравнение похожих проектов не имеет смысла. При переносе проекта создайте команду с нуля.

4.5 Покоординатная оптимизация (optimizeCoord)

Команда анализа удалена.

Взамен создана альтернативная команда «Оптимизация методом Хука-Дживса» (optimizeHookeJeeves).

Версия Код
12 scalar teta0=20 [deg]; scalar V0=10 [m/s]; point point1=point( 0 [m], 0 [m], 0 [m] ); vector vector1=rotate( projectX, projectZ, teta0 ); solid solid1=sphere( point1, 0.1 [m], mass = 1 [kg] ); body body1=body( color = RGB( 168, 168, 168 ) ); body body1 < ( solid1 ); body BASE=body( color = RGB( 51, 153, 255 ) ); condition condition1=transVelocity( BASE, vector1, body1, point1, V0 ); gravity gravity1=parallel( reverse( projectY ) ); sensor X=bodyDisplacement( BASE, point1, projectX, body1, point1 ); sensor Y=bodyDisplacement( BASE, point1, projectY, body1, point1 ); event eventStop=reformsBySensor( list( stop( ) ), Y, 0 [m], logCondition = list( ( "time > 0 [s]" ) ) ); // command RK4_1m2=constRK4( 1000 [s], 0.01 [s] ); command optima=optimizeCoord( maximum:, X, list( teta0 ), list( 10 [ deg ] ), list( 80 [ deg ] ), list( 1 [deg] ), 1, 100, RK4_1m2 ); // set ground = BASE;
13 scalar teta0=20 [deg]; scalar V0=10 [m/s]; point point1=point( 0 [m], 0 [m], 0 [m] ); vector vector1=rotate( projectX, projectZ, teta0 ); solid solid1=sphere( point1, 0.1 [m], mass = 1 [kg] ); body body1=body( color = RGB( 168, 168, 168 ) ); body body1 < ( solid1 ); body BASE=body( color = RGB( 51, 153, 255 ) ); condition condition1=transVelocity( BASE, vector1, body1, point1, V0 ); gravity gravity1=parallel( reverse( projectY ) ); sensor X=bodyDisplacement( BASE, point1, projectX, body1, point1 ); sensor Y=bodyDisplacement( BASE, point1, projectY, body1, point1 ); event eventStop=reformsBySensor( list( stop( ) ), Y, 0 [m], logCondition = logical( "time > 0 [s]" ) ); // command RK4_1m2=constRK4( 1000 [s], 0.01 [s] ); command optima=optimizeHookeJeeves( list( designVariable( teta0, teta0, 1, lowerBound = 10 [deg], upperBound = 80 [deg] ) ), X, maximum:, 0.01, 100, RK4_1m2 ); /\/////////////////////////////////////////////////////////////////////// set ground = BASE;

4.6 Оптимизация методом скользящего допуска (optimizeCoord)

Команда анализа удалена.

Взамен создана альтернативная команда «Комплексная оптимизация с ограничениями» (optimizeComplex).

Команды очень сильно различаются по набору параметров, поэтому даже сравнение похожих проектов не имеет смысла. При переносе проекта создайте команду с нуля.

4.7 Цикл команд (cycle)

Команда анализа удалена.

4.7 Расчет траектории положения (posTrace)

Удален ключевой (необязательный параметр) time1step.

Изменена семантика параметров варьирования условий состояния. Теперь они имеют именованный метод condValue.

В новой версии появилась возможно на каждом шаге расчета траектории положения производить расчет другой команды, например: расчет равновесного положения, расчет сил и ускорений, динамический анализ и др.

Версия Код
12 point point1=point( 0 [m], 0 [m], 0 [m] ); point point2=point( 1 [m], 0 [m], 0 [m] ); solid solid1=cylinder( point1, point2, 0.01 [m], mass = 1 [kg] ); body BASE=body( color = RGB( 168, 168, 168 ) ); body body1=body( color = RGB( 51, 153, 255 ) ); body body1 < ( solid1 ); joint joint1=rotational( BASE, body1, point1, projectZ ); // scalar N=10; scalar alfa1=20 [deg]; scalar alfa2=-40 [deg]; condition condition1=sensorValue( joint1.gamma, alfa1 ); command comTrace2=posTrace( N, list( ( condition1, alfa2, dataType = totalIncrement: ) ), time1step = 0.1 [s] ); // set ground = BASE;
13 point point1=point( 0 [m], 0 [m], 0 [m] ); point point2=point( 1 [m], 0 [m], 0 [m] ); solid solid1=cylinder( point1, point2, 0.01 [m], mass = 1 [kg] ); body BASE=body( color = RGB( 168, 168, 168 ) ); body body1=body( color = RGB( 51, 153, 255 ) ); body body1 < ( solid1 ); joint joint1=rotational( BASE, body1, point1, projectZ ); // scalar N=10; scalar alfa1=20 [deg]; scalar alfa2=-40 [deg]; condition condition1=sensorValue( joint1.gamma, alfa1 ); command comTrace2=posTrace( N, list( condValue( condition1, alfa2, dataType = totalIncrement: ) ) ); /\////////////////////////////////////////////////////////////////////// set ground = BASE;

5. Изменение работы с некоторыми файлами

5.1 Геометрия, импортированная из STEP/IGES (файл c расширением EBG)

В новой версии отключена поддержка файла EBG.

Теперь геометрия, импортированная из из STEP/IGES конвертируется в файл ECT. В EULER есть возможность конвертировать EBG в ECT.

Для конвертации файла нужно выполнить следующую последовательность действий:

  1. Открыть пустой проект в EULER или приложение без проекта;
  2. На верхней панеле выбрать пункт «Архив»;
  3. Выбрать пункт «Импорт…»;
  4. В появившемся окне выбрать конвертируем файл и указать путь и имя создаваемого файла;
  5. Нажать «Конвертировать».

В следствие этого, геометрия добавляется в проект как объект structure, вместо assembly.

Версия Код
12 string strGeom = "геометрия.ebg"; assembly geom = assembly2( strGeom );
13 string strGeom = "геометрия.ect"; structure geom = geometry( strGeom );

5.2 Удалена поддержка комплексных объектов (complex)

Теперь комплексные объекты перешли в блок «типовые модели» и добавляется в проекты в виде агрегатов.

Пока типовые модели не реализованы в EULER. А пока можно добавить комплексные объекты в виде агрегата. Текстовое представление моделей в Приложениях А-О (стр. 21 - 48).

Версия Код
12 point point1=point( 0 [m], 0 [m], 0 [m] ); solid solid1=sphere( point1, 0.1 [m], mass = 1 [kg] ); body body1=body( color = RGB( 168, 168, 168 ) ); body body1 < ( solid1 ); body BASE=body( color = RGB( 51, 153, 255 ) ); complex complex1=complex( "rotJoint_frict", #point p0 = point1, #vector vectorA = projectZ, #scalar Mconst = 1 [N m], #scalar mu = 0.4, #body S = body1, #body B = BASE );
13 point point1=point( 0 [m], 0 [m], 0 [m] ); solid solid1=sphere( point1, 0.1 [m], mass = 1 [kg] ); body body1=body( color = RGB( 168, 168, 168 ) ); body body1 < ( solid1 ); body BASE=body( color = RGB( 51, 153, 255 ) ); assembly complex1=assembly2( "rotJoint_frict.elr", #point p0 = point1, #vector vectorA = projectZ, #scalar Mconst = 1 [N m], #scalar mu = 0.4, #body S = body1, #body B = BASE );

6. Изменения в логики вычисления некоторых датчиков

Для решения проблем с датчиками, описанными в этом разделе, при открытии проекта или при переходе в режим исследования в версии 13 следует ввести дополнительные датчики regular, которые определяют значение датчика в момент, когда датчик не может быть вычислен. В старой версии эти датчики принимались равными нулю.

Версия Код
12 point point1=point( 0 [m], 0 [m], 0 [m] ); solid solid1=sphere( point1, 0.1 [m], mass = 1 [kg] ); body body1=body( color = RGB( 168, 168, 168 ) ); body body1 < ( solid1 ); body BASE=body( color = RGB( 51, 153, 255 ) ); gravity gravity1=parallel( projectY ); joint joint1=translational( BASE, body1, point1, projectX ); sensor pvR=prevValue( joint1.s ); solid solid2=sphere( point1, 0.1[m]+pvR, mass = 1 [kg] ); /\/////////////////////////////////////////////////////////////////////// set ground = BASE;
13 point point1=point( 0 [m], 0 [m], 0 [m] ); solid solid1=sphere( point1, 0.1 [m], mass = 1 [kg] ); body body1=body( color = RGB( 168, 168, 168 ) ); body body1 < ( solid1 ); body BASE=body( color = RGB( 51, 153, 255 ) ); gravity gravity1=parallel( projectY ); joint joint1=translational( BASE, body1, point1, projectX ); sensor pvR=prevValue( joint1.s ); sensor regR=regular(pvR, 0 [m]); solid solid2=sphere( point1, 0.1[m]+regR, mass = 1 [kg] ); /\/////////////////////////////////////////////////////////////////////// set ground = BASE;

6.1 Теперь датчики замеряющие скорости, ускорения, силы, моменты и датчики значения которых зависят от значений датчиков на предыдущих шагах интегрирования в режиме редактирования имеют значение – «нет значения», е не «ноль». Примеры таких датчиков:

  • Проекция скорости точки в системе координат проекта на вектор (componentVelocity);
  • Проекция ускорения точки в системе координат проекта на вектор (componentAcceleration);
  • Значение скорости точки в системе координат проекта (velocity);
  • Значение ускорения точки в системе координат проекта (acceleration);
  • Проекция скорости точки звена относительно другого звена на вектор (transVelocity);
  • Проекция ускорения точки звена относительно другого звена на вектор (transAcceleration);
  • Проекция угловой скорости звена относительно другого звена на вектор (rotVelocity);
  • Проекция углового ускорения звена относительно другого звена на вектор (rotAcceleration);
  • Производная датчика по времени (derivative);
  • Модуль силы (magnitudeF);
  • Модуль момента (magnitudeM);
  • Проекция силы (projectionF);
  • Проекция момента (projectionM);
  • Усреднение значения датчика (sensorMean);
  • Значение датчика с задержкой (sensorDelay);
  • Значение датчика c предыдущего шага (prevValue);
  • Проекция перегрузки точки звена на вектор (loadFactor);
  • Силовые факторы, действующие на звено (forces);
  • Численное дифференцирование датчика (numDerivative);
  • Кинетическая энергия всех звеньев проекта (kEnergy);
  • и тп.

6.2 Теперь датчик «Численное дифференцирование датчика» (numDerivative)» принимает значение – «нет значения», пока число шагов интегрирования не достигнет значения ключевого (необязательного) параметра «Число шагов для расчета производной датчика» (stepsN). В прошлой версии число шагов на начале расчета адаптировалось под число рассчитанных шагов интегрирования.