Розробка програми для графічного відображення схеми ре-гулювання рівня води в каналі за нижнім б’єфом.
Завдання
Розробити програму для графічного відображення додавання двох синусоїдних електрорушійних сил
Зміст
1.Вступ.....................................................................................................................................3
2.Задача і опис схеми...........................................................................................4
3.Текст програми.......................................................................................................6
4.Приклад............................................................................................................................13
5.Висновок......................................................................................................................... 14
6.Література......................................................................................................................15
Вступ
Для закріплення здобутих теоретичних знань, застосування їх при вирішенні питань виробничого характеру, а також з метою набуття навиків по створенню програмного забезпечення , виконується курсова робота з дисципліни “Програмування та алгоритмічні мови” . В курсовій роботі необхідно розробити програму на мові про-грамування C++,яка б графічно відображала схему регулювання рівня води в каналі за нижнім б’єфом. Важливо також щоб програма мала системне меню, вводилися дані.
Задача і опис схеми
Регулювання по нижньому б’єфі використовують для забезпечення користувачів водою по запиту. При цьому способі регулятори 1 по сигналам датчиків 2 піддержують постійними рівні води в нижніх б’єфах Hнб=const (Рис.1). Вільна поверхність потоку при максимальній витраті Qмакс (лінія 3) і витраті (лінія 4) утворюють граничний трикутник , який показує границі зміни рівнів вздовж б’єфа при витратах 0 Q Qмакс . Об’єм води , обмежений вільною поверхністю при витраті (лінія 5) і поверхністю при Qмакс , утворюють резервний об’єм , який називають об’ємом регулювання . Цей об’єм витрачається відразу при збільшенні водозабору із б’єфа і поповнюється у випадку зменшення потреби води .
При збільшенні водозабору (наприклад, водовипуском 6 на dQ проти існуючого місця витрати Q1) спочатку витратиться резервний об’єм , який знаходиться між лініями 3 і 5 . Після того як він спрацьовує , рівень води в нижньому б’єфі починає знижуватися і , щоб не допустити зниження , регулятор відкриває перегородку . Це приводить до спрацювання резервного об’єму вище розташованого б’єфа і відкриттю потім перегородки . В результаті послідовно робиться перестройка всіх вище розташованих перегородок і головної споруди . В систему подається додаткова витрата dQ .
При зниженні потреби у воді в якому не будь б’єфі на dQ спочатку послідовно поповнюються резервні об’єми , потім начинають послідовно прикриватися перегородки знизу вверх до тих пір ,поки в систему не поступить зменшена на dQ витрата .
Таким чином , перестройка роботи перегородок при зміні витрати в якому не будь б’єфі робиться в напрямку , протилежному напрямку руху потоку . Такий зв’язок між б’єфами називається оборотнім гідравлічним зв’язком , який при витратах Q Qмакс утворює ланцюг (каскад) послідовно розташованих резервних об’ємів . Тому регулювання по нижньому б’єфі називають також каскадним регулюванням .
Резервні об’єми досягають максимуму при витраті Q=0 і повністю спрацьовують при Q = Qмакс . Наповнення або спрацювання резервних проходить на протязі часу , необхідного для перестройки системи на новий режим роботи . Цей час прийнято називати часом регулювання . Він найбільший , якщо зміна витрати проходить в найбільш віддаленому б’єфі .
Рис.1. Схема регулювання води за нижнім б’єфом.
При збільшенні витрати на dQi в i – му б’єфі час регулювання :
(1)
де - сума резервних об’ємів вище розташованих б’єфів ;
- сумарний час перестройки вище розташованих регуляторів .
При розподілу води регулюванням по нижньому б’єфі присутні наступні недоліки :
-у випадку недостачі води користувачі , розташовані в верхній частині каналу , можуть не отримати необхідну кількість води , а інколи може опустошитися головна частина каналу ;
-при витраті Q=0 вільна поверхністю води у б’єфах розташовується горизонтально , тому гребені бровок каналів і дамб повинні бути також горизонтальними в кожному б’єфі , що збільшує об’єм будівельних робіт ;
-в б’єфах необхідно мати автоматичну водоскидну споруду , яка не допустить переповнення , яке може виникнути при аварії на головній споруді .
Головною задачею курсової роботи стоїть те , що потрібно розробити програму , яка б відображала цю схему і процес роботи , програма повинна працювати з різними витратами .
Текст програми.
#include
#include
#include
#include
#include
#define ESC 27
#define B 98
#define PIXEL_COUNT 10000
#define DELAY_TIME 0//---------------Функцiя виведення титульноi сторiнки--------------
int titulka(void)
{
int asd,i, x, y, color, maxx, maxy,maxcolor, seed;
setcolor (15);
settextstyle(4,0,9);
outtextxy(20,100,"Kursova robota");
setcolor (5);
settextstyle(2,0,7);
outtextxy(100,180,"на тему:");
setcolor (10);
settextstyle(2,0,7);
outtextxy(100,190,"Графiчне вiдображення схеми регулювання");
outtextxy(110,200,"рiвня води в каналi за нижнiм б'ефом");
setcolor(4);
outtextxy(300,216,"Варiант №16");
setcolor(8);
outtextxy(440,300," Виконав:");
setcolor(6);
outtextxy(440,320," Христюк О.В.");
setcolor(11);
outtextxy(240,400,"PRESS ANY KEY");
maxx = getmaxx() + 1;
maxy = getmaxy() + 1;
maxcolor = getmaxcolor() + 1;
while (!kbhit())
{
seed = random(32767);
srand(seed);
for (i=0; i
{
x = random(maxx);
y = random(maxy);
color = (0);
putpixel(x, y, color);
}
delay(DELAY_TIME);
srand(seed);
for (i=0; i
{
x = random(maxx);
y = random(maxy);
color = random(maxcolor);
if (color == getpixel(x, y))
putpixel(x, y, 0);
}
}
return(0);
}
int leva(int x1,int y1,int y2)
{ rectangle(x1,y1,460,y2); //пiдпрограма для 1-контура
return 0;}
int tricky(int y1)
{ //для 2-контура
line(455,205,455,y1);
return 0;
}
int leva1(int x12,int y12,int y23)
{ rectangle(x12,y12,160,y23);
return 0;}
int tricky1(int y12)
{
line(155,164,155,y12);
return 0;
}
int main1(void)
{
float k;
int i,j,iii,iiii,iiiii;
clrscr();
int gdriver = DETECT, gmode, errorcode;
initgraph(&gdriver, &gmode, "c:\\bcpp\\bgi");
errorcode = graphresult();
if (errorcode != grOk)
{ printf("Graphics error: %s\n", grapherrormsg(errorcode));
printf("Press any key to halt:");
getch();
exit(1);}
clearviewport();
printf("Введiть Q в межах вiд 0 до 30");
printf("\n Вiд 0 до 25 -min");
printf("\n Вiд 25 до 27 -нормальне");
printf("\n Вiд 27 до 30 -max");
printf("\n Q=",k);
scanf("%f",&k);
setgraphmode(getgraphmode());
int x1=450,e,y1=235,y2=360,x12=150,y12=195,y23=320;
while (!kbhit())
{
setbkcolor(0);
setcolor(2);
line(10,335,620,399);
setcolor(2);
line(10,225,150,240);
line(10,220,150,220);
line(160,253,180,253);
line(460,295,480,295);
rectangle(180,248,200,260);//2-датчик
rectangle(480,288,500,300);//1-датчик
rectangle(150,320,160,195);//2-дамба
setcolor(4);
line(181,254,199,254);
line(481,294,499,294);
setcolor(5);
settextstyle(0,0,1);
setcolor(2);
circle(455,196,9);
line(455,168,490,168);
line(455,168,455,186);
line(490,168,490,288);
circle(155,155,9);
line(155,125,190,125);
line(190,125,190,248);
line(155,125,155,146);
tricky(y1);
tricky1(y12);
setcolor(2);
line(500,298,620,310);
setcolor(2);
line(500,292,620,292);
setcolor(2);
leva(x1,y1,y2);
line(200,258,450,284);
line(200,251,450,251);
setcolor(2);
rectangle(10,50,620,450);
setfillstyle(1,1);floodfill(610,339,2);
setfillstyle(9,6);floodfill(610,439,2);
if (k<25){
setfillstyle(1,1);floodfill(610,300,2);
setcolor(1);
setlinestyle(0,0,1);
for(i=0;i<3;i++)
{line(149-i*10.5,238-i,149,238-i);delay(0);} //вода 3
setcolor(1);
setlinestyle(0,0,1);
for(i=0;i<12;i++)
{line(619-i*10.5,309-i,619,309-i); //вода 1
delay(0);}
setcolor(1);
setlinestyle(0,0,1);
for(i=0;i
{line(449-i*9.78,283-i,449,283-i); //вода 2 стала
delay(100);}
//-----------------------------------------------------------------------
iii=0;
do
{
setcolor(15);
line(455,168,490,168);
line(455,168,455,186);
line(490,168,490,288);
delay(200);
setcolor(2);
line(455,168,490,168);
line(455,168,455,186);
line(490,168,490,288);delay(200);iii=iii+1;}
while(iii<3);
setcolor(2);
circle(455,196,9);
setfillstyle(1,12);floodfill(455,196,2);// }
for(x1,y1,y2;y1>212;y1--,y2--)
{
setcolor(2);
leva(x1,y1,y2);
tricky(y1);
delay(100);
setcolor(0);
line(450,y1+1,460,y1+1);
line(450,y2+1,460,y2+1);
setcolor(1);
line(450,y2+1,460,y2+1);
}
setlinestyle(0,0,0);
setcolor(0);
for(e=13;e>8;e--) //1<>2
{line(501,306-e,619,306-e);
delay(200);}
setcolor(1);
setlinestyle(0,0,1);
for(i=k;i<25;i++)
{line(449-i*9.78,283-i,449,283-i); //вода 2 стала
delay(100);}
for(x1,y1,y2;y1<=230;y1++,y2++)
{
setcolor(2);
leva(x1,y1,y2);
tricky(y1);
delay(100);
setcolor(0);
line(450,y1-1,460,y1-1);
line(450,y2-1,460,y2-1);
}
setlinestyle(0,0,0);
setcolor(1);
for(e=15;e<22;e++) //1<>2
{line(201,273-e,449,273-e);
delay(200);}
iiii=0;
do
{
setcolor(15);
line(155,125,190,125);
line(190,125,190,248);
line(155,125,155,146);
delay(200);
setcolor(2);line(155,125,190,125);
line(190,125,190,248);
line(155,125,155,146);
delay(200);iiii=iiii+1;}
while(iiii<3);
setcolor(2);
circle(155,155,9);
setfillstyle(1,12);floodfill(155,155,2);
for(x12,y12,y23;y12>170;y12--,y23--)
{
setcolor(2);
leva1(x12,y12,y23);
tricky1(y12);
delay(100);
setcolor(0);
line(150,y12+1,160,y12+1);
line(150,y23+1,160,y23+1);
setcolor(1);
line(150,y23+1,160,y23+1);
}
setlinestyle(0,0,0);
for(i=30;i>24;i--)
{setcolor(0);
line(201,282-i,449,282-i);
delay(200);}
setcolor(1);
setlinestyle(0,0,1);
for(i=3;i<14;i++)
{line(149-i*10.5,238-i,149,238-i);delay(100);} //вода 3
setcolor(1);
for(x12,y12,y23;y12<=194;y12++,y23++)
{
setcolor(2);
leva1(x12,y12,y23);
tricky1(y12);
delay(100);
setcolor(0);
line(150,y12-1,160,y12-1);
line(150,y23-1,159,y23-1);}
setcolor(1);
for(e=8;e<13;e++) //1<>2
{line(11,233-e,149,233-e);
delay(200);}
setcolor(1);
for(e=8;e<13;e++) //1<>2
{line(501,306-e,619,306-e);
delay(200);}
setcolor(0);
for(e=13;e>8;e--) //1<>2
{line(11,233-e,149,233-e);
delay(0);}
}
//------------------------------------------------------------------
if (k>=25 && k<=27){
setcolor(1);
setlinestyle(0,0,1);
for(i=0;i<14;i++)
{line(149-i*10.5,238-i,149,238-i);delay(0);} //вода 3
setcolor(1);
setlinestyle(0,0,1);
for(i=0;i<11;i++)
{line(619-i*10.5,309-i,619,309-i); //вода 1
delay(0);}
setcolor(1);
setlinestyle(0,0,1);
for(i=0;i<25;i++)
{line(449-i*9.78,283-i,449,283-i); //вода 2 стала
delay(0);}
setlinestyle(0,0,0);
setcolor(1);
for(e=15;e
{line(201,273-e,449,273-e);
delay(200);}
}
//------------------------------------------------------------------
if (k>27){
setcolor(1);
setlinestyle(0,0,1);
for(i=0;i<14;i++)
{line(149-i*10.5,238-i,149,238-i);delay(0);} //вода 3
setcolor(1);
setlinestyle(0,0,1);
for(i=0;i<11;i++)
{line(619-i*10.5,309-i,619,309-i); //вода 1
delay(0);}
setcolor(1);
setlinestyle(0,0,1);
for(i=0;i<25;i++)
{line(449-i*9.78,283-i,449,283-i); //вода 2 стала
delay(0);}
setlinestyle(0,0,0);
setcolor(1);
for(e=15;e
{line(201,273-e,449,273-e);
delay(200);}
iiii=0;
do
{
setcolor(15);
line(155,125,190,125);
line(190,125,190,248);
line(155,125,155,146);
delay(200);
setcolor(2);
line(155,125,190,125);
line(190,125,190,248);
line(155,125,155,146);
delay(200);iiii=iiii+1;}
while(iiii<3);
setcolor(2);
circle(155,155,9);
setfillstyle(1,12);floodfill(155,155,2);
for(x12,y12,y23;y12>170;y12--,y23--)
{
setcolor(2);
leva1(x12,y12,y23);
tricky1(y12);
delay(100);
setcolor(0);
line(150,y12+1,160,y12+1);
line(150,y23+1,160,y23+1);
setcolor(1);
line(150,y23+1,160,y23+1);
}
setlinestyle(0,0,0);
for(i=30;i>24;i--)
{setcolor(0);
line(201,282-i,449,282-i);
delay(200);}
setcolor(1);
setlinestyle(0,0,1);
for(i=3;i<14;i++)
{line(149-i*10.5,238-i,149,238-i);delay(100);} //вода 3
setcolor(1);
for(x12,y12,y23;y12<=194;y12++,y23++)
{
setcolor(2);
leva1(x12,y12,y23);
tricky1(y12);
delay(100);
setcolor(0);
line(150,y12-1,160,y12-1);
line(150,y23-1,159,y23-1);}
setcolor(1);
for(e=8;e<13;e++)
{line(11,233-e,149,233-e);
delay(200);}
setcolor(0);
for(e=13;e>8;e--)
{line(11,233-e,149,233-e);
delay(0);}
}}
getch();
return(0);
}
int main(void)
{int gdriver=DETECT,gmode,errorcode,i;
initgraph(&gdriver,&gmode,"c:\\bcpp\\bgi");
errorcode=graphresult();
if(errorcode!=grOk)
{printf("Graphics error:%s\n",grapherrormsg(errorcode));
printf("Press any key to halt:");
getch();exit(1);}
titulka();
//------------------ Системне меню ----------------------------------------
r_key:
int key;
initgraph(&gdriver,&gmode,"c:\\bcpp\\bgi");
errorcode=graphresult();
if(errorcode!=grOk)
{printf("Graphics error:%s\n",grapherrormsg(errorcode));
printf("Press any key to halt:");
getch();exit(1);}
setcolor(10);
rectangle(15,420,350,470);
setfillstyle(9,6);floodfill(16,421,10);
settextstyle(0,0,1);
setcolor(14);
outtextxy(20,426,"B - Демонстрацiя роботи схеми регулювання");
outtextxy(20,436,"рiвня води в каналi за нижнiм б'эфом");
outtextxy(20,456,"ESC - ВИХIД");
rr_key:
key=getch();
if(key==B)
{ main1();
clrscr();
goto r_key;
}
else if(key==ESC) exit(0);
else goto rr_key;
return(0);
}
Приклад
Введемо Q=26 – нормальна витрата (Рис.2) ;
Введемо Q=12 – мала витрата (Рис.3) ;
Рис.2
Рис.3
ВисновокЗавдяки цій курсовій роботі я закріпив здобуті теоретичні знання з курсу “Програмування та алгоритмічні мови”, навчився застосувати їх при вирішенні питань виробничого характеру. Склав програму, яка графічно відображає схему регулювання рівня води в каналі за нижнім б’єфом, програма працює з різним даними.
Література
1.Баховец Б.А, Ткачук Я.В. Основи автоматики и автоматизация производственных процессов в гидромелиорации. Львов, “Вища школа”, 1989 р., 334 с.
2.Крис Паппас, Уїльям Мюррей, Програмирование на С и С++,
“Ирина”, BHV,Киев,2000.