Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

4297

.pdf
Скачиваний:
1
Добавлен:
08.01.2021
Размер:
917.21 Кб
Скачать

21

nм – частота вращения насоса, указана на приводном электродвигателе.

Рис. 5.1 Принципиальная схема гидропривода лабораторного стенда.1 – насос с рабочим объемом qн1 = 80 см3/об.; 2 – насос с рабочим объемом qн2 = 60 см3/об.; 3 – предохранительный клапан; 4 – фильтр; 5 – гидрораспределитель; 6 – манометр; 7 - тензометрический датчик давления рабочей жидкости; 8 – гидромотор; 9 – рабочий орган; 10 – индукционный датчик частоты вращения; 11 – тахометр.

5.3.6 Определить рабочий КПД гидропередачи

η = nм (ф) , (5.2) nм ( р)

5.3.7Включить тензоаппаратуру и записать переходный процесс разгона гидромотора без нагрузки и при резании древесины.

5.3.8Обработать осциллограммы, установить время разгона, величину давления рабочей жидкости и интенсивность ее нарастания при различных скоростных режимах и различных породах древесины.

5.3.9Определить усилие и скорость резания

Р

 

=

кр

=

2

рq

м

;

(5.3)

 

 

 

 

 

рез

Dф

 

Dф

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

22

V = ω

Dф

=

 

πnм Dф

.

(5.4)

2

2

рез

 

 

 

 

 

 

 

 

 

5.3.10 По заданному крутящему моменту Мкр и давление рабочей жидкости р для проектирования машины определить конкретный рабочий объем гидромотора и набрать его по ГОСТу[3].

q

 

=

Мкр

.

(5.5)

м

 

 

 

р

 

 

 

 

 

5.4 Составление отчета.

5.4.1Начертить принципиальную гидравлическую схему стенда и в масштабе схему рабочего органа с установкой ножа и направление скорости резания в момент встречи ножа с образцом древесины.

5.4.2Расчеты частоты вращения гидромотора, объемного КПД гидропередачи для заданного варианта включения насосной станции.

5.4.3Обработка осциллограммы разгона гидромотора и построение графика переходного процесса и сравнить его с другими вариантами.

23

ЗАНЯТИЕ №6. ИССЛЕДОВАНИЕ ДИНАМИКИ ГИДРОПРИВОДА ЛЕСНЫХ МАШИН С ПРИМЕНЕНИЕМ ЭВМ

6.1 Цель работы.

Получить навыки исследования динамики гидпропривода и обоснование его параметров при проектировании лесных машин с применением ЭВМ.

6.2Оборудование и приборы. ЭВМ, чертежные инструменты.

6.3Исходные данные.

6.3.1Принципиальная гидравлическая схема проектируемой машины.

6.3.2Экспериментальные данные о параметрах гидропривода лабораторного стенда.

6.4 Расчетные зависимости.

Движение рабочего органа можно описать дифференциальным уравне-

нием

 

J

 

dω

= M

 

 

M

 

,

(6.1)

 

пр

dt

д

c

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

где

Jпр –приведенный момент инерции вращающихся масс к валу гидромо-

 

тора;

 

 

 

 

 

 

 

 

 

 

 

ω – угловая скорость вала гидромотора;

 

 

 

 

Мд – движущий момент, развиваемый гидромотором,

 

 

 

 

М =

qм рηn

,

(6.2)

 

 

 

 

 

 

 

 

д

 

 

2πη0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

где

qм – рабочий объем гидромотора;

 

 

 

 

 

 

 

р– давление рабочей жидкости;

ηn – полный КПД гидромотора;

η0 – объемный КПД гидромотора;

Мс – момент сопротивления резанию, в период разгона вхолостую Мс = 0, при резании.

24

 

 

 

 

 

 

 

 

 

 

 

М =

Ррез Dф

,

 

 

 

 

(6.3)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

с

 

 

 

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

где

Dф – диаметр размаха рабочего органа;

 

 

 

 

 

 

 

 

Ррез – сила сопротивления резанию.

 

 

 

 

 

 

 

 

 

 

 

Для исследования динамических процессов в гиддросистеме рассмат-

ривается дополнительно управление расходов рабочей жидкости:

 

 

 

 

 

q

n

 

= q

ω + а

 

р + К

 

 

dp

,

(6.4)

 

 

 

 

н

у

( р)

 

 

 

 

 

 

 

н

 

 

 

 

н

 

 

 

 

 

 

 

dt

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

где

qн, qм – рабочий объем насоса и частота вращения;

 

 

ау – коэффициент утечек;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

К(р) – коэффициент податливости упругих элементов гидропривода.

 

Рассматривается система дифференциальных уравнений, преобразо-

ванная к виду

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

dp

=

1

 

 

(q n − q ω − а р);

 

 

 

 

 

K( p)

 

 

 

 

н

 

н

 

 

м

 

 

 

у

 

 

 

 

dt

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(6.5)

 

dω

 

1

 

 

η

q

 

p

 

Ррез Dф

 

 

 

 

 

 

 

м

 

 

 

 

 

 

 

 

=

 

 

 

 

 

 

п

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

.

 

 

 

 

 

 

Jпр

2πη0

 

 

 

2

 

 

 

 

 

 

 

dt

 

 

 

 

 

 

 

 

 

 

6.5 Порядок выполнения работы.

6.5.1Введите фамилию и номер группы студента.

6.5.2Введите по заданию преподавателя в качестве исходных данных в программу «Исследование динамики гидропривода кустореза с инерционнорубящими рабочими органами», текст которой представлен в Приложении 3, следующие параметры:

Коэффициент утечек, ау

0,5…1 10-6 м3/(Па с)

Приведенный момент инерции, Jпр

0,2…0,25 кг м2

Полный КПД гидромотора, ηп

0,85…0,9

Объемный КПД гидромотора, η0

0,9…0,96

Рабочий объем гидромотора, qн=qм

46…251 10-6м3/об

Угловая скорость вала гидромотора, ωн

100…200 с-1

Масса рабочего органа, mel

0,5…3 кг

25

 

 

Расстояние от рабочего органа до оси вала, R

0,3…1

м

Момент сопротивления резанию, Мс

0…70

Н м

Коэффициент податливости, K(p)

20…70 × 10-6 м3/Па

Время резания, tуд

150…350 млс.

Нажмите на кнопку Расчёт и получите результат расчёта.

6.5.3 Построить графики переходного процесса разгона гидропривода в масштабе, и провести анализ влияния различных параметров на его характеристику по виду графиков функций

ω = f (K( p) ,t);ω = f (qм ,t);ω = f (Jпр ,t).

(6.6)

Определить максимальную амплитуду ωmax, продолжительность переходного процесса tраз, частоту колебаний fм, среднее значение угловой скорости ωф, коэффициент неравномерности колебаний угловой скорости

δ =

ωmax ωmin

.

(6.7)

 

 

ωср

 

6.6 Составление отчета.

6.6.1Привести расчетные формулы с пояснением входящих в них ве-

личин.

6.6.2Построение графиков переходных процессов разгона гидропривода фрезерного рабочего органа. Строятся в масштабе графики функций.

6.6.3Дать характеристику переходных процессов и выбрать наиболее рациональный из них для проектируемой машины по критериям снижения динамических нагрузок и обеспечения требуемого качества технологического процесса.

26

БИБЛИОГРАФИЧЕСКИЙ СПИСОК Основная литература

1. Жуков А.В. Проектирование лесопромышленного оборудования / А.В. Жуков. – Минск: Вышэйшая школа, 1990. - 321 с.

2. Попиков П.И. Проектирование самоходных лесных машин: Тексты лекций / П.И. Попиков, Л.Д. Бухтояров. – Воронеж: Воронеж. гос. лесотехн. акад., 2002. – 90 с.

Дополнительная литература

1.Баринов К.Н. Проектирование лесопромышленного оборудования:Учеб. пособие / К.Н. Баринов, В.А. Александров. – Л.:Изд-во ЛГУ, 1988..

238 с.

2.Нартов П.С. Проектирование и расчёт лесохозяйственных машин: Учеб. пособие / П.С. Нартов, П.И. Попиков – Воронеж.:Изд-во Воронеж. унта, 1978. – 112 с.

3.Попиков П.И. Практикум по проектированию лесохозяйственных машин для рубок ухода:Учеб. пособие / П.И. Попиков - Воронеж: Изд-во ВЛТИ, 1992. – 80 с.

4.Проектирование и расчет специальных лесных машин / Под ред. М.И. Зайчик. - М.:Лесн. пром-ть., 1976. - 208 с.

Оглавление

 

Занятие №1. Определение силового взаимодействия колёсной

3

транспортной системы с пачкой деревьев с применением ЭВМ

 

Занятие №2. Составление кинематической и расчётной схем захва-

 

та модели, и проектирование нового захвата для бесчокерной трелёвки

8

деревьев

 

Занятие №3. Разработка компоновочно-кинематической и расчёт-

 

ной схем гидроманипулятора

13

Занятие №4. Оптимизация положений гидроцилиндров манипуля-

 

тора с применением ЭВМ.

17

Занятие №5. Экспериментальные исследования динамики гидро-

 

привода рабочего органа машины для фрезерования пней

20

Занятие №6. Исследование динамики гидропривода лесных машин

 

с применением ЭВМ

23

Библиографический список.

26

Приложения

27

27

Текст программы «Оценка компоновки технологического оборудования на базовой машине»

var Form1: TForm1;

tt:=int((mph*((f2*cos(alfa)+((1-

f2,lll,hhh,alfa,ltr,n,r,m,ksdm,l,at,an,h,m10,m

n)*cotan(sigma)-

20,p,ld,ht,mph:Real;

n/f2)*sin(alfa))*9.81)/(f2*cotan(degtorad(si

 

gma))+1))*100)/100;

tt,nn,sigma,sinsigma,aa,bb,z1,z2,z1p,z2p,mp

nn:=int((mph*((f2*cos(alfa)+n*(f2*cotan(de

:Real;

gtorad(sigma))+1)*sin(alfa)*9.81))/(f2*cota

f21,alfa1,ltr1,n1,r1,m1,l1,at1,an1,h1,m101,

n(degtorad(sigma))+1))*100)/100;

m201,p1,ld1,ht1:string;

mp:=int((r*((nn+m*cos(alfa)*9.81)*ksdm+t

tt1,nn1,sigma1,aa1,bb1,z11,z21,z1p1,z2p1,g

t+m*sin(alfa)*9.81))*100)/100;

1,qwe1:string; g:integer;

mp:=mp+lll*nn+hhh*tt;

/-------

z1:=int((1/l*(m*9.81*(at*cos(alfa)-(ht-

procedure TForm1.FormCreate(Sender:

r)*sin(alfa))-tt*(h-r)-nn*an-mp))*100)/100;

TObject);

z2:=int((m*cos(alfa)*9.81+nn-

begin

z1)*100)/100;

g:=0; f2:=0.5; alfa:=0; ltr:=0.4; n:=0.67;

z1p:=int((z1+2*m10*cos(alfa)*9.81)*100)/1

r:=0.5; m:=2000; ksdm:=0.12; l:=2.86;

00;

at:=1.5; an:=0.1; h:=1.8; m10:=200;

z2p:=int((z2+2*m20*cos(alfa)*9.81)*100)/1

m20:=200; p:=50000; ld:=20; ht:=1; end;

00;

procedure TForm1.Timer1Timer(Sender:

Form3.Memo1.Refresh;

TObject);

Form3.Memo1.Lines[0]:='Получены зна-

begin g:=g+5;

чения:';

gauge1.Progress:=g;

Form3.Memo1.Lines[1]:='Сила

if g=100 then

Т='+Floattostr(tt)+' H;';

begin Form3.Visible:=True; end; end;

Form3.Memo1.Lines[2]:='Сила

implementation

N='+FloattoStr(nn)+' H;';

uses Unit2, Unit3, Unit4,Unit6, Unit7;

Form3.Memo1.Lines[3]:='Угол

{$R *.DFM}

"сигма"='+floattostr(sigma);

procedure TForm1.N4Click(Sender: TOb-

Form3.Memo1.Lines[4]:='Суммарный ре-

ject);

активный момент Мр='+floattostr(mp)+'

begin Form1.Close;

H.м;';

Form6.Visible:=True; end;

Form3.Memo1.Lines[5]:='Опорные реак-

//-------------

ции на передние колеса

procedure TForm1.Button1Click(Sender:

Z1='+floattostr(z1)+';';

TObject);

Form3.Memo1.Lines[6]:='Опорные реак-

begin

ции на задние колеса

gauge1.Visible:=true;

Z2='+floattostr(z2)+';';

Timer1.Enabled:=true;

Form3.Memo1.Lines[7]:='Суммарное дав-

aa:=(ld*(1-n))/ltr;

ление на грунт:';

aa1:=FloatTostr(aa);

Form3.Memo1.Lines[8]:=' передних колес

bb:=aa-(1/aa)+ld/((1-

Z1п='+floattostr(z1p)+' H;';

n)*ltr)*((n/f2+n/ld)*(n/f2+n/ld));

Form3.Memo1.Lines[9]:=' задних колес

bb1:=Floattostr(bb);

Z2п='+floattostr(z2p)+' H.';

sinsigma:=(1/bb*(1+sqrt(1+aa*bb)));

end;end

sigma:=int((radtodeg(Arcsin(sinsigma)))*10

 

0)/100;

 

28

Текст программы «Оптимизация положений гидроцилиндра в статическом и динамическом режиме»

CONST g = 9.81; var

Form1: TForm1; {formclik : Boolean;}

a1,b1,l,l1,gamma1,delta,diam,s,mc,m,jc,q,ay,dtime,fi n,fik: extended; sin_beta1,fit,fis,fip,pt,pp,ppr,kr,kkr,kt,tn,time,sqrt1: extended; time_ost,time_shot,sn,sk,s_step,proc_time: extended;

opt_a1,opt_b1,beta_n,opt_gamma1,aa1,aa2: Extended; opt_gamma1_1,opt_a1_1,opt_b1_1,fin1,fik1:Extende d;

Flag2,Flag3,Flag4,Flag5:Boolean;

ii:integer;

aaa1,aaa2:TChartValueList;

bbb1,bbb2:Double; {a,b,c,d: TChartTitle;} implementation

{$R *.DFM}

function ScanStr(S:TEdit):Real; Var i:Integer;

Flag_ok, Flag_ok1: Boolean; begin

Flag_ok:=False;

Flag_ok1:=True;

for i:=1 to Length(S.Text) do Begin

if S.Text[i] in ['0'..'9','E','e','-',','] then Flag_ok:=True else Flag_ok:=False;

if Flag_ok = False then Flag_ok1:=False; End;

if S.Text = '' then Flag_ok1:=False; {if S.Text = '0' then Flag_ok1:=False;} if Flag_ok1 = False then

Begin

MessageDlg('Допустимые значения: цифры, запятая, минус, E (лат.) - показатель степени',

mtInformation,[mbOk],0); S.Text:=''; ScanStr:=0; S.SetFocus;

End;

if Flag_ok1 = True then Begin ScanStr:=StrToFloat(S.Text); End; end;

function myarcsin(x:Extended):extended; Begin if x=1 then myarcsin:=pi/2

else myarcsin:=arctan(x/sqrt(1-x*x)); End; function myarccos(x:Extended):Extended; Begin myarccos:=pi/2-myarcsin(x); End; procedure

TForm1.SeriesChange(number_series:integer;chart_c aption:string);

Var i:integer; begin

for i:=0 to 3 do Chart1.Series[i].Active:=False; Chart1.Series[number_series-1].Active:=True; Chart1.Title.Text.Text:=chart_caption;

end; //----------------------------------

{Начало математических расчетов}; pp:=0; pt:=0; kr:=0; fis:=0; time:=0; sqrt1:=0; sin_beta1:=0; kt:=1; time_shot:=0; s:=pi*diam*diam/4; gamma1:=gamma1*pi/180; delta:=delta*pi/180; fin1:=fin*pi/180; fik1:=fik*pi/180; fit:=fin1; fip:=fin1; Series1.Clear; Series1.Active:=False; Series2.Clear; Series2.Active:=False; Series3.Clear; Series3.Active:=False; Series4.Clear; Series4.Active:=False;

while (fit<=fik1) or (time<time_ost+time_shot) do Begin

29

sin_beta1:=a1*sin(gamma1+fit)/sqrt(a1*a1+b1*b1- 2*a1*b1*cos(gamma1+fit)); kr:=kkr/(7.28*pp+106);

if time<tn then kt:=time/tn else kt:=1; if Flag5=True then

Begin pt:=(q*kt*dtime-s*b1*sin_beta1*(fit-fip)- ay*dtime*pp)/kr+pp; fis:=(s*pt*b1*sin_beta1-

g*(m*l+mc*l1)*cos(fit+delta))*dtime*dtime/(jc+m*l

*l)

+2*fit-fip; End;

if Flag5=False then Begin

pt:=(g*(m*l+mc*l1)*cos(fit+delta))/(s*b1*sin_beta1 );

fis:=((q*kt-ay*pt)*dtime)/(s*b1*sin_beta1)+fit; End; fip:=fit; fit:=fis; pp:=pt; time:=time+dtime; Series1.AddXY(time,pt,'',ClRed); Series2.AddXY(time,fit*180/pi,'',ClRed); Series3.AddXY(time,(b1*sin_beta1*(fitfip)/dtime),'',ClRed); Series4.AddXY(time,kr*1000000,'',ClRed);

if (fit>=fik1) and (time_shot=0) and (time_ost<>0) then

Begin q:=0; time_shot:=time; fit:=fip; End; End; Chart1.Visible:=True; Chart1.Title.Text.Text:='Зависимость давления (Па) от времени';

Series1.Active:=True;

End;

procedure TForm1.Button2Click(Sender: TObject); {оптимизация положения}

LABEL lab1,lab2,lab3; VAR Flag1:Boolean;

p_m,p_max:Extended; key:Char;

Begin

If Radiobutton2.Checked=True then Flag5:=True; if Radiobutton1.Checked=True then Flag5:=False; Radiobutton1.Visible:=False; Radiobutton2.Visible:=False;

flag1:=False; p_m:=0; p_max:=10e16; flag3:=False; if flag2=false then Begin opt_b1:=s_step; End; if flag2=true then goto lab1; while opt_b1<l do

Begin lab2:

if flag2=true then if flag4=false then if opt_b1>l then opt_b1:=s_step;

{if flag2=true then if flag4=true then if opt_b1<0 then opt_b1:=l;}

{расчет выражения для arccos для бета начальное}

aa1:=4*sn*opt_b1*sin((fik1-fin1)/2); if aa1=0 then goto lab1;

aa1:=(sn*sn-sk*sk+4*opt_b1*opt_b1*(sin((fik1- fin1)/2))*

(sin((fik1-fin1)/2)))/aa1;

if abs(aa1)>1 then goto lab1; {расчет бета начальное}

beta_n:=myarccos(aa1)-0.5*(pi-fik1+fin1); {расчет подкоренного выражения для a1} sqrt1:=sn*sn+opt_b1*opt_b1- 2*sn*opt_b1*cos(beta_n);

if sqrt1<0 then goto lab1; {расчет оптимизационного a1} opt_a1:=sqrt(sqrt1);

{расчет выражения для arccos gamma1} aa2:=(opt_a1*opt_a1+opt_b1*opt_b1sn*sn)/(2*opt_a1*opt_b1);

if abs(aa2)>1 then goto lab1; opt_gamma1:=myarccos(aa2)-fin1;

{Проверка на отсутсвие мертвой точки. Параметр проверки}

if (opt_gamma1+fik1)>=pi then goto lab1; {Конец проверки}

if opt_a1*opt_a1+opt_b1*opt_b1-2*opt_a1*opt_b1* cos(opt_gamma1+fik1)<>sk*sk

then goto lab1; {инициализация переменных} if Flag2=True then Begin

Series1.Clear; Series2.Clear; Series3.Clear; Series4.Clear; End;

pp:=0; pt:=0; kr:=0; fit:=0; fis:=0; time:=0;

30

p_m:=0; sqrt1:=0; sin_beta1:=0; time_shot:=0; fit:=fin1; fip:=fin1; flag1:=True;

if flag2=true then flag3:=true; {отладка программы}

{MessageDlg(FloatToStr(opt_gamma1*180/pi)+ ' '+ FloatToStr(opt_a1)+ ' '+

FloatToStr(opt_b1)+ ' ', mtInformation,[mbOk],0); {отладка}

{цикл расчета от начального до конечного положения}

while (fit<=fik1) or (time<time_ost+time_shot) do Begin sin_beta1:=sqrt(opt_a1*opt_a1+opt_b1*opt_b1- 2*opt_a1*opt_b1*cos(opt_gamma1+fit)); sin_beta1:=opt_a1*sin(opt_gamma1+fit)/sin_beta1; kr:=(7.28*pp+106);

if kr=0 then goto lab1; kr:=kkr/kr;

if time<tn then kt:=time/tn else kt:=1; if Flag5=True then

Begin pt:=(q*kt*dtime-s*opt_b1*sin_beta1*(fit-fip)- ay*dtime*pp)/kr+pp;

fis:=((s*pt*opt_b1*sin_beta1- g*(m*l+mc*l1)*cos(fit+delta))* (dtime*dtime)/(jc+m*l*l))+2*fit-fip; End; if Flag5=False then

Begin pt:=(g*(m*l+mc*l1)*cos(fit+delta))/(s*b1*sin_beta1 );

fis:=((q*kt-ay*pt)*dtime)/(s*b1*sin_beta1)+fit; End; {Макс. давление за процесс подъема} if pt>=p_m then p_m:=pt;

fip:=fit; fit:=fis; pp:=pt; time:=time+dtime; if Flag2=True then Begin Series1.AddXY(time,pt,'',ClRed); Series2.AddXY(time,fit*180/pi,'',ClRed); Series3.AddXY(time,(b1*sin_beta1*(fitfip)/dtime),'',ClRed); Series4.AddXY(time,kr*1000000,'',ClRed); End;

if (fit>=fik1) and (time_shot=0) and (time_ost<>0) then

Begin q:=0; time_shot:=time; fit:=fip; End; End; if Flag2=True then goto lab1;

{мин. давление за все процессы} if p_m<=p_max then

Begin p_max:=p_m; opt_gamma1_1:=opt_gamma1; opt_a1_1:=opt_a1; opt_b1_1:=opt_b1;

End; {} lab1:

if (flag4=false) and (Flag3=false) then opt_b1:=opt_b1+s_step;

{if (flag4=true) and (Flag3=false) then opt_b1:=opt_b1-s_step;}

if Flag3=True then goto lab3;

if Flag2=true then goto lab2; End; if flag1=False then Begin

MessageDlg('При введенных данных оптимизация невозможна',

mtInformation,[mbOk],0); FormCreate(Form1);goto lab3; End;

Flag2:=True; Flag3:=False; opt_b1:=opt_b1_1; goto lab2; lab3: key:='1'; Flag3:=False; Chart1.Visible:=true; FormKeyPress(Form1,key); End;

procedure TForm1.FormCreate(Sender: TObject); var key: char;

begin with Form1 do Begin caption:='Программа расчета гидроцилндров'; key:='r'; flag2:=False; flag4:=false; Button1.Enabled:=True;

Button1.Visible:=true;

FormKeyPress(Form1,key); Edit22.Enabled:=False; Label22.Enabled:=false; Chart1.Visible:=False;

If Radiobutton2.Checked=True then Flag5:=True; if Radiobutton1.Checked=True then Flag5:=False; End; end;

procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);

var f: textfile;

f1: file of extended;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]