2.1 Процесс расчета вибронагруженности кузова автомобиля
Для определения характеристик вибронагруженности кузова автомобиля в программном комплексе EULER необходимо выполнить следующе действия:
− Подготовка и расчет модели динамики движения автомобиля;
− Формирование результатов расчета ММС;
− Определение параметров вибронагруженности автомобиля;
− Графическое представление оценки вибронагруженности кузова автомобиля.
Пример расчета приведен ниже.
Пример расчета плавности хода автомобиля
// Тип модели испытания: "Плавность_хода"
// *Модель для определения параметров вибронагруженности при движении по дороге с микропрофилем
// *Участок 0 - ровный участок.
// *Участок 1 - переходный участок микропрофиля.
// *Участок 2 - участок микропрофиля для выхода машины на установившийся режим.
// *Участок 3 - участок микропрофиля для замера виброускорений
//
// Исходные данные модели
// КМ (колесная машина)
string string_M "файл КМ"="../../КМ/КМ1/УАЗ-3151.elr";
// параметры испытания
scalar V0 "начальная скорость движения"=30 [ km/h ];
scalar flagV "флаг регулировки скорости ( 1 - поддерживается прогр. движением; 2 - автомат на сектор газа)"=1;
scalar T0 "время на уравновешивание"=5 [ s ];
scalar S1 "длина участка 1"=10 [m];
scalar S2 "длина участка 2"=45 [m];
scalar S3 "длина участка 3"=100 [m];
// датчики вибрации на несущем модуле машины
list nameVibr "имена датчиков вибрации"=list( "датчик 1", "датчик 2" );
list xVibr=list( 0 [mm], -2380 [mm] );
list yVibr=list( 410 [mm], 410 [mm] );
list zVibr=list( 200 [mm], 200 [mm] );
// площадка
string string_MP "файл микропрофиля"="../../_road/profile/ISO_8608_21/cobblestone_35mm.elr";
scalar mu_s "коэффициент трения скольжения"=0.75;
scalar k_r "отношение трения покоя к трению скольжения"=1.4;
scalar B "ширина площадки"=20 [m];
scalar dx "шаг изображения микропрофиля по координате X"=0.1 [m];
// параметры управления сектором газа
scalar f_RV "частота регулятора скорости"=1.5 [Hz];
scalar ksi_RV "коэфф. затухания регулятора скорости"=0.5;
scalar dAdT "производная ускорения по положению сектора газа"=2.0 [m/s2];
scalar uA0 "начальное положение сектора газа"=0.01;
// параметры интегрирования
scalar intMethod "метод интегрирования(1 - RK4_c; 2 - RKF5_a)"=1;
scalar stepStandard "стандартный шаг интегрирования"=0.0005 [s];
scalar stepMin "минимальный шаг интегрирования"=0.0001 [s];
scalar stepMax "максимальный шаг интегрирования"=0.02 [s];
scalar errorInt "допустимая погрешность интегрирования"=0.005;
///////////////////////////////////////////////////////////////////////////////////
// Машина
scalar typeMTire "параметр выбора расчетной модели шин"=0;
sensor uS "управляющий сигнал угла поворота руля"=var( 0 [deg] );
sensor uA "положение сектора газа"=var( 0 );
sensor uB "положение сектора тормоза"=var( 0 );
scalar S01 "расстояние от исх. положения до начала переходного участка"=V0*T0;
scalar tVibr_begin "время начала расчета вибронагруженности"=(S01+S1+S2)/V0;
scalar tVibr_end "время окончания расчета вибронагруженности"=tVibr_begin+S3/V0;
node node_M=nodePoint( point( 0 [ m ], 0 [ m ], 0 [ m ] ) );
assembly aM=assembly( string_M, node_M, filter = filterOff:, #uS = uS, #uA = uA, #uB = uB, #tVibr_begin = tVibr_begin, #tVibr_end = tVibr_end );
//
// Дорога
// микропрофиль
scalar BK "колея КМ для расчета микропрофиля"=fixValue( abs(localY(aM.nGauge, aM.pWT[1]))*2 );
node node_MP=nodePoint( point( 0 [ m ], 0 [ m ], 0 [ m ] ) );
assembly aMP=assembly( string_MP, node_MP, #BK = BK );
// площадка
scalar LM "база машины"=fixValue( localX(aM.nRoad, aM.pWT[1])-localX(aM.nRoad, aM.pWT[aM.pWT.size]) );
scalar S0 "длина плоского участка"=LM*2+S01;
scalar SM "длина основного участка с микропрофилем"=S2+S3+LM*2;
string string_R "файл площадки"="_parts\road_v.elr";
point p0_Road=pointN( aM.nRoad, -LM*2, 0 [m], 0 [ m ] );
node node_R=nodePN( p0_Road, aM.nRoad );
assembly aR=assembly( string_R, node_R, visible = hide:, #mu_s = mu_s, #k_r = k_r, #B = B, #S0 = S0, #S0M = S1, #SM = SM, #dx = dx, #h_L = aMP.h_L, #h_R = aMP.h_R, #hMax = aMP.hMax );
set ground = aR.Road;
joint rigid_RM=rigid( list( aR.Road, aM.Road ) );
gravity gravity1=parallel( reverse( projectZ ) );
node nodeRBase "базовая система координат дороги (Z-вертикаль)"=nodePoint(aM.nGauge);
//
// Остановка сборки при несоответствии длин микропрофиля в файле испытания и в файле микропрофиля
scalar Lmp "общая длина участка с микропрофилем"=SM+S1;
scalar model_crash=Lmp<=aMP.Lmp -> 0, 1/0;
//
point pCamera=pointToPlane( aM.nGauge, planePV( aM.nRoad, vectorZ( aM.nRoad ) ) );
node cameraR=nodeYX( pCamera, vectorZ( aM.nRoad ), vectorX( aM.nRoad ) );
node cameraF=nodeYX( pCamera, vectorZ( aM.nRoad ), vectorX( aM.nGauge ) );
//
// Шины
scalar NWT "количество шин"=aM.WT.size;
list tire=listT( forceElement:, "tire( aR.SRoad, aM.WT[~], aM.pWT[~], aM.vWT[~], aM.templWT[~], tireRing = aM.TRing[~] )", NWT );
//
// Параметры движения машины
string string_G="../../_parts/gauge_base.elr";
assembly aG=assembly( string_G, node_M, #nodeRBase = nodeRBase, #nodeGauge = aM.nGauge );
joint rigid_RG=rigid( list( aR.Road, aG.Road ) );
joint joint_GG=rigid( list( aM.Gauge, aG.Gauge ) );
//
// Начальные условия
condition condition_V=transVelocity( aR.Road, vectorX( aM.nGauge ), aM.Gauge, aM.nGauge, V0 );
condition condition_W=rotVelocity( aR.Road, vectorZ(aM.nGauge), aM.Gauge, 0 [rad/s]);
list condition_tire=listT( condition:, "wheelNoSlip( tire[~] )", NWT );
//
// Стабилизация курса и бокового отклонения
joint joint_stab0=user( aR.Road, aM.Gauge, aM.nGauge, yesX:, noY:, yesZ:, yesFiX:, yesFiY:, noFiZ: );
//
// Поддержание скорости
// программное движение
sensor Vx1 "проекция скорости на продольную ось машины"=transVelocity( aR.Road, vectorX( aM.nGauge ), aM.Gauge, aM.nGauge, bodyFixVector = secondBody: );
list list_flag1=list( on:, off: );
flag flag1=list_flag1[flagV+0];
motion motion_Vx1=ideal2( V0, Vx1, time, work = flag1 );
// автомат на сектор газа
scalar k1_RV=-12.6*ksi_RV*f_RV/dAdT;
scalar k2_RV=-39.4*f_RV*f_RV/dAdT;
sensor deltaV=aG.Vx-V0;
sensor S_deltaV=integral( deltaV );
sensor uA_real=currentValue( uA, flagV == 2 -> k1_RV*deltaV+k2_RV*S_deltaV+uA0, 0 );
//
// Датчики вибрации на раме машины
color color_BVibr=RGB( 255, 128, 0 );
scalar NVibr "число датчиков"=xVibr.size;
list nodeVibr=listT(node:, "nodePN(point( xVibr[~], yVibr[~], zVibr[~]), aM.nGauge)", NVibr);
scalar rVibr=10 [mm];
scalar hVibr=100 [mm];
list solidX_Vibr=listT( solid:, "cylinder( move( nodeVibr[~], projectX, hVibr ), move( nodeVibr[~], projectX, -hVibr ), rVibr )", NVibr );
list solidY_Vibr=listT( solid:, "cylinder( move( nodeVibr[~], projectY, hVibr ), move( nodeVibr[~], projectY, -hVibr ), rVibr )", NVibr );
list solidZ_Vibr=listT( solid:, "cylinder( move( nodeVibr[~], projectZ, hVibr ), move( nodeVibr[~], projectZ, -hVibr ), rVibr )", NVibr );
list BVibr=listT( body:, "body( bodyGC = nodeVibr[~], color = color_BVibr )", NVibr);
list BVibr < ( nodeVibr, solidX_Vibr, solidY_Vibr, solidZ_Vibr );
list rigid_Vibr=listT( joint:, "rigid2( BVibr[~], aM.Frame )", NVibr );
list Vibration "виброускорения"=listT(sensor:, "vibration2(BVibr[~], nodeVibr[~])", NVibr);
event event_Vibr_begin=reformsBySensor( list( startProcess( Vibration ) ), time, tVibr_begin );
event event_Vibr_end=reformsBySensor( list( finishProcess( Vibration ) ), time, tVibr_end );
//
// Команды интегрирования
scalar TInterval=tVibr_end+0.1[s];
command dynam_RK4_c=constRK4( TInterval, stepStandard );
command dynam_RKF5_a=autoRKF5( TInterval, stepStandard, stepMin, stepMax, errorInt, errorInt);
// Дополнительные датчики
list h "ход подвески по центрам шин"=listT( sensor:, "bodyDisplacement( aM.Gauge, aM.pWT[~], projectZ, aM.WT[~], aM.pWT[~] )", NWT );
/\///////////////////////////////////////////////////////////////////////////////////
/\ Единицы измерения;
set units = SI;
|