3.3 Движение поршня
В примере моделируется движение поршня под действием сжатого в цилиндре идеального газа (рис. 15). Теплообмен газа с окружающей средой отсутствует. До начала движения поршня параметры газа в цилиндре имеют начальные значения равные P0, V0, T0 – начальные давление, объем и температура газа. Начальная скорость поршня равна 0.
Давление на поршень со стороны газа в цилиндре создает усилие, действующее на поршень и вызывающее его перемещение относительно цилиндра. По мере движения поршня объем газа в цилиндре увеличивается и давление на поршень уменьшается.

Рис. 15. Расчетная схема движения поршня относительно цилиндра
Физические уравнения, описывающие состояние газа в цилиндре и движение поршня под действием давления газа в цилиндре:
,где
– давление газа в цилиндре,
Использование SimInTech для расчета состояния газа в цилиндре
Схема интегрирования описывающих состояние газа в цилиндре дифференциальных уравнений в SimInTech при помощи блока «Язык программирования» показана на рис. 16 и рис. 17 .
В DLL-библиотеке в качестве входного сигнала используем величину
Vt [ m3 / s ]– скорость изменения объёма газа, а в качестве выходного сигнала
из DLL-библиотеки величину FPa [ N ]– силу давления газа на поршень.
В рассматриваемом примере в модели SimInTech выполняется интегрирование дифференциальных уравнений, описывающих расширение идеального газа (рис. 17). Описывающий на встроенном языке программирования SimInTech рассматриваемую расчетную модель текст скрипта приведен далее.
Внимание! В скрипте, написанном на встроенном языке программирования SimInTech, динамические (дифференциальные) переменные, используемые в дифференциальных уравнениях и начальные значения которых определены в декларациях init, не должны использоваться в качестве выходных параметров, определяемых в декларации output.
|

Рис. 16. Схема реализации системы дифференциальных уравнений в SimInTech
при помощи блока «Язык программирования»

Рис. 17. Дифференциальные уравнения, описывающие состояние газа в цилиндре,
записанные на встроенном языке программирования SimInTech
записанные на встроенном языке программирования SimInTech
Содержимое блока «Язык программирования» проекта в SimInTech
input vt;
output fpa;
init v = 0.00001, t = 300;
rg_=297;
cv_=797.5;
V0_ = 0.00001;
T0_ = 300;
P0 = 100000;
Sp=pi*0.01*0.01
dv = vt;
v' = dv;
dt = -t*rg_*dv/(cv_*v);
t' = dt;
fpa = ((P0*(t/T0_)*(V0_/v))*Sp);
|
Для совместимости создаваемой DLL-библиотеки с программным комплексом EULER в окнах свойств блоков «Входной контакт» и «Выходной контакт» необходимо сделать показанные на рис. 18 и рис. 19 настройки. И для входных, и для выходных «контактов» значение свойства «Тип контакта» должно устанавливаться равным «double».
Текст проекта Поршень_EULER.elr
// Движение поршня в цилиндре под действием сжатого азота
//
// Исходные параметры газа в цилиндре (азот)
scalar Cv "изохорная удельная теплоёмкость"=797.5 [ J / kg K];
scalar Rg "удельная газовая постоянная"=297 [ J / kg K ];
scalar V0 "начальный объём газа в цилиндре"=10 [ cm3 ];
scalar T0 "температура газа в начальный момент времени, градусы К"=300 [ K ];
scalar Pg0 "начальное давление газа в цилиндре"=1 [ at ];
//
// Модель поршня в цилиндре
scalar m "масса поршня"=1 [ kg ];
scalar r "радиус поршня"=10 [ mm ];
scalar S "площадь поршня"=PI*r*r;
point point1=point( 0 [ m ], 0 [ m ], 0 [ m ] );
point point2=move( point1, projectX, r );
solid solid1=cylinder( point1, point2, r, mass = m );
body C "цилиндр"=body( color = RGB( 204, 204, 204 ) );
set ground = C;
body P "поршень"=body( color = RGB( 153, 153, 255 ) );
body P < ( solid1 );
joint joint1=translational( C, P, point1, projectX );
sensor vP "скорость поршня"=derivative( joint1.s );
//
// Модель газа
sensor T "температура газа"=var( T0 );
sensor V "объем газа"=var( V0 );
sensor Vt=diff( V, vP*S );
sensor Tt=diff( T, -Rg*Vt*T/(Cv*V) );
sensor Pg "давление газа"=Pg0*T/T0*V0/V;
//
// Сила давления газа на поршень
sensor F=Pg*S;
force force1=force( P, point1, projectX, F, list( ) );
//
command Eu_1m4=explicitEULER( 1.0 [ s ], 1.00000e-04 [ s ] );
/\///////////////////////////////////////////////////////////////////////////////////
/\ Список главных команд;
set dynamics = Eu_1m4;
/\///////////////////////////////////////////////////////////////////////////////////
/\ Единицы измерения;
set units = SI;
|
Текст проекта Поршень_EULER_SimInTech.elr
// Движение поршня в цилиндре под действием сжатого азота
//
// Исходные параметры газа в цилиндре (азот)
scalar Cv "изохорная удельная теплоёмкость"=797.5 [ J / kg K];
scalar Rg "удельная газовая постоянная"=297 [ J / kg K ];
scalar V0 "начальный объём газа в цилиндре"=10 [ cm3 ];
scalar T0 "температура газа в начальный момент времени, градусы К"=300 [ K ];
scalar Pg0 "начальное давление газа в цилиндре"=1 [ at ];
//
// Модель поршня в цилиндре
scalar m "масса поршня"=1 [ kg ];
scalar r "радиус поршня"=10 [ mm ];
scalar S "площадь поршня"=PI*r*r;
point point1=point( 0 [ m ], 0 [ m ], 0 [ m ] );
point point2=move( point1, projectX, r );
solid solid1=cylinder( point1, point2, r, mass = m );
body C "цилиндр"=body( color = RGB( 204, 204, 204 ) );
set ground = C;
body P "поршень"=body( color = RGB( 153, 153, 255 ) );
body P < ( solid1 );
joint joint1=translational( C, P, point1, projectX );
sensor vP "скорость поршня"=derivative( joint1.s );
//
// Модель газа
sensor V "объем газа"=var( V0 );
sensor Vt=diff( V, vP*S );
//
// Сила давления газа на поршень
// Расчет силы в DLL-SimInTech
sensor_array DLL=simintech( "pad.dll", "Vt [ m3 / s ],", "FPa [ N ],", "", 1e-5 [s], integrMethod = constRK4: );
force force1=force( P, point1, projectX, DLL.FPa, list( ) );
//
command Eu_1m4=explicitEULER( 1.0 [ s ], 1.00000e-04 [ s ] );
/\///////////////////////////////////////////////////////////////////////////////////
/\ Список главных команд;
set dynamics = Eu_1m4;
/\///////////////////////////////////////////////////////////////////////////////////
/\ Единицы измерения;
set units = SI;
|

