Инструкция по переводу проектов EULER из версии 12 в версию 13
В версии 13 ПК EULER были существенно переработаны некоторые объекты, что может привезти к проблемам при открытии старых проектов. Для открытия проектов, созданных в версии 12 необходимо изменить или создать заново объекты, приведенные в таблице ниже. Для удобства переработанные объекты разделены на категории правок. Далее в каждом разделе будет описание переработки конкретного объекта.
| 1. Незначительные изменения в семантики создания объектов | |||
| № | Объект | Краткое описание | Стр. |
| 1.1 |
Событие (event). Методы:
|
Введен именованный метод (logical(“…”)) создания ключевого (необязательного) параметра (logCondition) при создании объекта. | 4 |
| 1.2 |
Шкала спектра (spectralScale). Методы:
|
Изменены имена ключевых (необязательных) параметров с upperBound на spectrUpperBound и с upperBound_rel на spectrUpperBoundRel. | 4 |
| 1.3 |
Шарнир (joint). Методы:
|
Удален ключевой (необязательный) параметр (linkType) при создании объекта. | 5 |
| 1.4 |
Силовой элемент (force) аэродинамического воздействия. Методы:
|
Изменено имя внутреннего системного датчика с alfa на alpha. | 6 |
| 1.5 |
Силовой элемент (force) контактного взаимодействия. Методы:
|
Удален ключевой (необязательный параметр (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 |
Теперь датчики замеряющие скорости, ускорения, силы, моменты и датчики значения которых зависят от значений датчиков на предыдущих шагах интегрирования в режиме редактирования имеют значение – «нет значения», е не «ноль». Примеры таких датчиков:
|
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.
Для конвертации файла нужно выполнить следующую последовательность действий:
- Открыть пустой проект в EULER или приложение без проекта;
- На верхней панеле выбрать пункт «Архив»;
- Выбрать пункт «Импорт…»;
- В появившемся окне выбрать конвертируем файл и указать путь и имя создаваемого файла;
- Нажать «Конвертировать».
В следствие этого, геометрия добавляется в проект как объект 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). В прошлой версии число шагов на начале расчета адаптировалось под число рассчитанных шагов интегрирования.