Softvérová časť parkovacieho systému: Rozdiel medzi revíziami
(6 medziľahlých úprav od 2 ďalších používateľov nie je zobrazených) | |||
Riadok 12: | Riadok 12: | ||
Parkovací systém má byť plne automatický okrem platenia za parkovné. Má spĺňať bezpečnostné predpisy a byť jednoduchý na ovládanie zákazníkom ako aj obsluhou. Systém má byť použiteľný pre viac prevádzok, čiže sa majú dať meniť nastavenia a popisy lístkov. | Parkovací systém má byť plne automatický okrem platenia za parkovné. Má spĺňať bezpečnostné predpisy a byť jednoduchý na ovládanie zákazníkom ako aj obsluhou. Systém má byť použiteľný pre viac prevádzok, čiže sa majú dať meniť nastavenia a popisy lístkov. | ||
− | |||
==Používateľské prostredie programu pre obsluhu parkovacieho systému== | ==Používateľské prostredie programu pre obsluhu parkovacieho systému== | ||
− | [[Image:mpbc40.jpg|framed| | + | [[Image:mpbc40.jpg|center|framed|Obr. 4.1 Používateľské prostredie parkovacieho systému]] |
− | + | [Image:mpbc41.jpg|center|framed|Obr. 4.2 Používateľské prostredie po skenovaní lístka]] | |
− | |||
− | |||
− | |||
− | Obr. 4.2 Používateľské prostredie po skenovaní lístka | ||
Obsluha používa na ovládanie parkovacieho systému 6 tlačidlo. Tlačidlo zadaj kód lístka nám slúži na manuálne zadávanie vygenerovaného kódu, ak sa nám pokazí skener čiarového kódu. Tlačidlá otvor vstup, zatvor vstup, otvor výstup, zatvor výstup slúžia na manuálne ovládanie rámp. Rampy sa ovládajú manuálne kvôli bezpečnosti parkoviska. Tieto tlačidlá sa využívajú hlavne pri vjazde RZP, hasičov a podobne. Tlačidlo blok stláčame ak nám zákazník vyplatil parkovné. Po stlačení tlačidla blok sa nám vytlačí pokladničný doklad a otvorí výstupnú rampu. | Obsluha používa na ovládanie parkovacieho systému 6 tlačidlo. Tlačidlo zadaj kód lístka nám slúži na manuálne zadávanie vygenerovaného kódu, ak sa nám pokazí skener čiarového kódu. Tlačidlá otvor vstup, zatvor vstup, otvor výstup, zatvor výstup slúžia na manuálne ovládanie rámp. Rampy sa ovládajú manuálne kvôli bezpečnosti parkoviska. Tieto tlačidlá sa využívajú hlavne pri vjazde RZP, hasičov a podobne. Tlačidlo blok stláčame ak nám zákazník vyplatil parkovné. Po stlačení tlačidla blok sa nám vytlačí pokladničný doklad a otvorí výstupnú rampu. | ||
Riadok 28: | Riadok 23: | ||
==Administratívne prostredie pre nastavovanie správnej funkčnosti systému== | ==Administratívne prostredie pre nastavovanie správnej funkčnosti systému== | ||
− | [[Image:mpbc42.jpg|framed| | + | [[Image:mpbc42.jpg|center|framed|Obr. 4.3 Nastavenia lístka s čiarovým kódom]] |
− | |||
− | Obr. 4.3 Nastavenia lístka s čiarovým kódom | ||
V nastavení lístka nastavujeme ako prvé tlačiareň ktorou budeme tlačiť. Potom nastavujeme bod odkiaľ nám začne tlačiť a to pomocou ľavého a pravého okraju. Tlačidlo tlač je na testovanie nastavovania okrajov. Nastavenie ceny parkovného za jednu hodinu, čas opätovného vytlačenia lístka, otváraciu dobu, popisy lístka a zvýraznenie určitých riadkov v popise pomocou zaškrtávacích okienok. | V nastavení lístka nastavujeme ako prvé tlačiareň ktorou budeme tlačiť. Potom nastavujeme bod odkiaľ nám začne tlačiť a to pomocou ľavého a pravého okraju. Tlačidlo tlač je na testovanie nastavovania okrajov. Nastavenie ceny parkovného za jednu hodinu, čas opätovného vytlačenia lístka, otváraciu dobu, popisy lístka a zvýraznenie určitých riadkov v popise pomocou zaškrtávacích okienok. | ||
− | + | [[Image:mpbc43.jpg|center|framed|Obr. 4.4 Nastavenie bloku]] | |
− | [[Image:mpbc43.jpg|framed| | ||
− | Obr. 4.4 Nastavenie bloku | ||
V prvom rade nastavujeme tlačiareň ktorú používame. Nastavíme ľavý a pravý okraj tlače. Tlačidlo tlač je skúšobná tlač pri nastavovaní okrajov. Do popisu napíšeme popis bloku. | V prvom rade nastavujeme tlačiareň ktorú používame. Nastavíme ľavý a pravý okraj tlače. Tlačidlo tlač je skúšobná tlač pri nastavovaní okrajov. Do popisu napíšeme popis bloku. | ||
− | [[Image:mpbc44.jpg|framed| | + | [[Image:mpbc44.jpg|center|framed|Obr. 4.5 Nastavenie času motorov a nastavenie comportu]] |
− | Obr. 4.5 Nastavenie času motorov a nastavenie comportu | ||
V tomto okne sa nastavuje doba chodu motora, čas koľko má byť rampa otvorená a nastavenie prenosu cez Comport. | V tomto okne sa nastavuje doba chodu motora, čas koľko má byť rampa otvorená a nastavenie prenosu cez Comport. | ||
+ | |||
+ | |||
+ | ==Štatistika parkovacieho systému== | ||
+ | [[Súbor:stat.jpg|center|framed|Obr. 4.6 Štatistika]] | ||
+ | Štatistika parkovacieho systému sa ukladá automaticky pri vytlačení pokladničného bloku. V prvom stĺpci štatistiky sa nachádza kód lístka, ktorý bol pridelení zákazníkovi pri vjazde na parkovisko a vytlačený na parkovací lístok. V druhom a tretom stĺpci sú údaje o čase a dátumu výstupu z parkoviska. V štvrtom a piatom stĺpci sú údaje o dátume a čase vstupu na parkovisko. V šiestom stĺpci je vypočítaná doba parkovania. V siedmom stĺpci je sadzba aká bola nastavená na parkovisku. V siedmom stĺpci je cena za parkovanie. Štatistika sa zobrazuje len na vybraný dátum. Vždy sa nám tvorí s aktuálnym dátumom. Dátum sa dá ľahko vyberať (pozri Obr. 4.6). V štatistike sa nám v pravom dolnom rohu zobrazuje tržba a počet zákazníkov za vybraný deň. | ||
==Vjazd automobilu na parkovisko== | ==Vjazd automobilu na parkovisko== | ||
Riadok 50: | Riadok 45: | ||
Zdrojový kód 4.1 Procedúra ComPort1Ring | Zdrojový kód 4.1 Procedúra ComPort1Ring | ||
− | + | <source lang="delphi"> | |
− | + | procedure TForm1.ComPort1Ring(Sender: TObject); | |
− | + | begin | |
− | + | if not (tim_listok.Enabled and cyklus_vst) | |
+ | begin | ||
+ | vytlac_listok; | ||
+ | cyklus_vst:=True; | ||
+ | otvor_in; | ||
+ | tim_listok.Enabled:=true; | ||
+ | tim_vstup.Enabled:=true; | ||
+ | end; | ||
+ | end; | ||
+ | </source> | ||
==Tlač parkovacieho lístka== | ==Tlač parkovacieho lístka== | ||
Riadok 59: | Riadok 63: | ||
Zdrojový kód 4.2 Procedúra vytlac_listok | Zdrojový kód 4.2 Procedúra vytlac_listok | ||
+ | <source lang="delphi"> | ||
+ | procedure vytlac_listok: | ||
+ | var ho,lo:integer; | ||
+ | DateTime : TDateTime; | ||
+ | kod:string; | ||
+ | begin | ||
+ | with form1 do | ||
+ | begin | ||
+ | ho:=StrToInt(hornyokraj.Text); | ||
+ | lo:=strtoint(lol.Text); | ||
+ | barcode1.Left:=100+strtoint(lol.Text); | ||
+ | barcode1.top:=250+ho; | ||
+ | kod:=’x’+formatdatetime(’yymmddhhmmss’,now); //kod barkodu rokmesacden.. | ||
+ | barcode1.text:=kod; | ||
+ | with printer do | ||
+ | begin | ||
+ | PrinterIndex:=ctlac; {index tlaciarne na ktoru chcem tlacit 1,2,3,4..} | ||
+ | Title:=’Listok’; | ||
+ | BeginDoc; | ||
+ | Canvas.Pen.Color:= 0; | ||
+ | Canvas.Font.Name:= ’Times New Roman’; | ||
+ | Canvas.Font.Size:= 10; | ||
+ | if cb1.Checked then canvas.Font.Style :=[fsbold]; | ||
+ | Canvas.TextOut(80+lo,100+ho,pl1.text); | ||
+ | Canvas.Font.Style :=[]; | ||
+ | Canvas.MoveTo(50+lo,100+ho); | ||
+ | Canvas.Pen.Width:=5; | ||
+ | Canvas.LineTo(1600+lo,100+ho); | ||
+ | barcode1.DrawBarcode(Canvas); | ||
+ | Canvas.Font.Size:= 16; | ||
+ | Canvas.TextOut(180+lo,700+ho,kod); | ||
+ | Canvas.Font.Size:= 10; | ||
+ | Canvas.Font.Name:= ’Times New Roman’; | ||
+ | Canvas.MoveTo(50+lo,960+ho); | ||
+ | Canvas.LineTo(1600+lo,960+ho); | ||
+ | if cb2.Checked then canvas.Font.Style :=[fsbold]; | ||
+ | Canvas.TextOut(80+strtoint(lol.Text),1000+ho,pl2.text); | ||
+ | canvas.Font.Style :=[]; | ||
+ | . . . . . . | ||
+ | enddoc; | ||
+ | end; | ||
+ | end; | ||
+ | end; | ||
+ | </source> | ||
− | + | [[Image:mpbc47.jpg|center|framed|Obr. 4.6 Lístok s čiarovým kódom]] | |
− | |||
− | |||
− | | | ||
− | |||
− | |||
− | |||
− | Obr. 4.6 Lístok s čiarovým kódom | ||
==Procedúra Otvor vstupnú rampu== | ==Procedúra Otvor vstupnú rampu== | ||
Procedúra nám otvára vstupnú rampu. Ak sa vstupná rampa zatvára, zastaví ju. Skontroluje či sa výstupná brána otvára, zatvára, alebo je bez pohybu a pošle zodpovedajúce bajty tomuto stavu. Ak sa vstupná rampa nezatvára, ide z kludového stavu, skontroluje stav druhej rampy, pošlem zodpovedajúce bajty a vstupná rampa sa otvorí. Kontrolovať stav druhej rampy musíme preto, lebo každá kombinácia vstupnej a výstupnej rampy má iné bajty, ktoré sa posielajú do mikroprocesora. Do mikroprocesora posielame vždy 5 bajtov. Prvý bajt nám hovorí, či ide o displej alebo rampy. Ak ide o rampy, prijímaný prvý bajt je číslo 5. Druhý bajt je stav obidvoch rámp v akej sa práve nachádzajú (Tab.). Ďalšie 3 bajty sú slepé, posielam 0. Posledné 3 bajty posielam kvôli zjednodušeniu programu mikroprocesora. Na rampy potrebujeme 2 bajty, na displej potrebujeme 5 bajtov, z toho hľadiska by som musel nastavovať v mikroprocesory koľko bajtov má prijať. | Procedúra nám otvára vstupnú rampu. Ak sa vstupná rampa zatvára, zastaví ju. Skontroluje či sa výstupná brána otvára, zatvára, alebo je bez pohybu a pošle zodpovedajúce bajty tomuto stavu. Ak sa vstupná rampa nezatvára, ide z kludového stavu, skontroluje stav druhej rampy, pošlem zodpovedajúce bajty a vstupná rampa sa otvorí. Kontrolovať stav druhej rampy musíme preto, lebo každá kombinácia vstupnej a výstupnej rampy má iné bajty, ktoré sa posielajú do mikroprocesora. Do mikroprocesora posielame vždy 5 bajtov. Prvý bajt nám hovorí, či ide o displej alebo rampy. Ak ide o rampy, prijímaný prvý bajt je číslo 5. Druhý bajt je stav obidvoch rámp v akej sa práve nachádzajú (Tab.). Ďalšie 3 bajty sú slepé, posielam 0. Posledné 3 bajty posielam kvôli zjednodušeniu programu mikroprocesora. Na rampy potrebujeme 2 bajty, na displej potrebujeme 5 bajtov, z toho hľadiska by som musel nastavovať v mikroprocesory koľko bajtov má prijať. | ||
− | |||
− | |||
{|border="2" cellspacing="0" cellpadding="4" width="65%" align="center" | {|border="2" cellspacing="0" cellpadding="4" width="65%" align="center" | ||
+ | |+Tabuľka 4.1 Hodnoty bajtov posielané do mikroprocesora v dekadickom tvare | ||
+ | |- | ||
|bgcolor = "#B6DDE8" colspan = "2"|'''Vstupná rampa v kľude''' | |bgcolor = "#B6DDE8" colspan = "2"|'''Vstupná rampa v kľude''' | ||
| | | | ||
Riadok 176: | Riadok 217: | ||
|bgcolor = "#DBEEF3"|11111010 | |bgcolor = "#DBEEF3"|11111010 | ||
− | |} | + | |} |
Zdrojový kód 4.3 Procedúra Otvor_in | Zdrojový kód 4.3 Procedúra Otvor_in | ||
− | + | <source lang="delphi"> | |
− | + | procedure otvor_in; | |
− | + | begin | |
− | + | with form1 do | |
− | + | begin | |
+ | if rid then | ||
+ | begin | ||
+ | tim_in.Enabled:=false; | ||
+ | rid:=false; | ||
+ | comport1.writestr(chr(5)); | ||
+ | if (roh=false) and (rod=false)then comport1.writestr(chr(240)); | ||
+ | if (roh=false) and (rod=True)then comport1.writestr(chr(242)); | ||
+ | if (roh=True) and (rod=false)then comport1.writestr(chr(241)); | ||
+ | comport1.writestr(chr(0)); | ||
+ | comport1.writestr(chr(0)); | ||
+ | comport1.writestr(chr(0)); | ||
+ | sleep(200); | ||
+ | end; | ||
+ | rih:=True; | ||
+ | comport1.writestr(chr(5)); | ||
+ | if (roh=false) and (rod=false)then comport1.writestr(chr(244)); | ||
+ | if (roh=false) and (rod=True)then comport1.writestr(chr(246)); | ||
+ | if (roh=True) and (rod=false)then comport1.writestr(chr(245)); | ||
+ | comport1.writestr(chr(0)); | ||
+ | comport1.writestr(chr(0)); | ||
+ | comport1.writestr(chr(0)); | ||
+ | tim_in.Enabled:=true; | ||
+ | end; | ||
+ | end; | ||
+ | </source> | ||
==Procedúra časovača vstupu== | ==Procedúra časovača vstupu== | ||
Riadok 189: | Riadok 255: | ||
Zdrojový kód 4.4 Procedúra tim_vstup | Zdrojový kód 4.4 Procedúra tim_vstup | ||
− | + | <source lang="delphi"> | |
− | + | procedure TForm1.TIM_VSTUPTimer(Sender: TObject); | |
− | + | begin | |
− | + | tim_vstup.Enabled:=false; | |
− | + | if (cyklus_vst) and (fotobunka_vst=false) then zatvor_in; | |
+ | end; | ||
+ | </source> | ||
==Procedúra zatvorenia vstupnej rampy== | ==Procedúra zatvorenia vstupnej rampy== | ||
Riadok 199: | Riadok 267: | ||
Zdrojový kód 4.5 Procedúra zatvor_in | Zdrojový kód 4.5 Procedúra zatvor_in | ||
− | + | <source lang="delphi"> | |
− | + | procedure zatvor_in; | |
− | + | begin | |
− | + | with form1 do | |
− | + | begin | |
+ | if rih then | ||
+ | begin | ||
+ | tim_in.Enabled:=false; | ||
+ | rih:=false; | ||
+ | comport1.writestr(chr(5)); | ||
+ | if (roh=false) and (rod=false)then comport1.writestr(chr(240)); | ||
+ | if (roh=false) and (rod=True)then comport1.writestr(chr(242)); | ||
+ | if (roh=True) and (rod=false)then comport1.writestr(chr(241)); | ||
+ | comport1.writestr(chr(0)); | ||
+ | comport1.writestr(chr(0)); | ||
+ | comport1.writestr(chr(0)); | ||
+ | sleep(200); | ||
+ | end; | ||
+ | rid:=True; | ||
+ | comport1.writestr(chr(5)); | ||
+ | if (roh=false) and (rod=false)then comport1.writestr(chr(248)); | ||
+ | if (roh=false) and (rod=True)then comport1.writestr(chr(250)); | ||
+ | if (roh=True) and (rod=false)then comport1.writestr(chr(249)); | ||
+ | comport1.writestr(chr(0)); | ||
+ | comport1.writestr(chr(0)); | ||
+ | comport1.writestr(chr(0)); | ||
+ | tim_in.Enabled:=true; | ||
+ | end; | ||
+ | end; | ||
+ | </source> | ||
==Procedúra na zastavenie rampy ak vojde automobil do fotobunky== | ==Procedúra na zastavenie rampy ak vojde automobil do fotobunky== | ||
Riadok 209: | Riadok 302: | ||
Zdrojový kód 4.6 ComPort1DSRChange | Zdrojový kód 4.6 ComPort1DSRChange | ||
− | + | <source lang="delphi"> | |
− | + | procedure TForm1.ComPort1DSRChange(Sender: TObject; OnOff: Boolean); | |
− | + | begin | |
− | + | if onoff=true then | |
− | + | begin | |
+ | fotobunka_vys:=true; | ||
+ | if rod then | ||
+ | begin | ||
+ | otvor_out; | ||
+ | end; | ||
+ | end | ||
+ | else | ||
+ | begin | ||
+ | fotobunka_vys:=false; | ||
+ | if cyklus_vys then zatvor_out; | ||
+ | end; | ||
+ | end; | ||
+ | </source> | ||
==Procedúra zatvor vstupnú rampu== | ==Procedúra zatvor vstupnú rampu== | ||
Riadok 219: | Riadok 325: | ||
Zdrojový kód 4.7 Procedúra zatvor_in | Zdrojový kód 4.7 Procedúra zatvor_in | ||
− | + | <source lang="delphi"> | |
− | + | procedure zatvor_in; | |
− | + | begin | |
− | + | with form1 do | |
− | + | begin | |
+ | if rih then | ||
+ | begin | ||
+ | tim_in.Enabled:=false; | ||
+ | rih:=false; | ||
+ | comport1.writestr(chr(5)); | ||
+ | if (roh=false) and (rod=false)then comport1.writestr(chr(240)); | ||
+ | if (roh=false) and (rod=True)then comport1.writestr(chr(242)); | ||
+ | if (roh=True) and (rod=false)then comport1.writestr(chr(241)); | ||
+ | comport1.writestr(chr(0)); | ||
+ | comport1.writestr(chr(0)); | ||
+ | comport1.writestr(chr(0)); | ||
+ | sleep(200); | ||
+ | end; | ||
+ | rid:=True; | ||
+ | comport1.writestr(chr(5)); | ||
+ | if (roh=false) and (rod=false)then comport1.writestr(chr(248)); | ||
+ | if (roh=false) and (rod=True)then comport1.writestr(chr(250)); | ||
+ | if (roh=True) and (rod=false)then comport1.writestr(chr(249)); | ||
+ | comport1.writestr(chr(0)); | ||
+ | comport1.writestr(chr(0)); | ||
+ | comport1.writestr(chr(0)); | ||
+ | tim_in.Enabled:=true; | ||
+ | end; | ||
+ | end; | ||
+ | </source> | ||
==Procedúra na vytlačenie bloku pri výjazde z parkoviska== | ==Procedúra na vytlačenie bloku pri výjazde z parkoviska== | ||
Riadok 229: | Riadok 360: | ||
Zdrojový kód 4.8 Procedúra tlac_blok | Zdrojový kód 4.8 Procedúra tlac_blok | ||
+ | <source lang="delphi"> | ||
+ | procedure tlac_blok; | ||
+ | var lob,hob:integer; | ||
+ | DateTime2: TDateTime; | ||
+ | begin | ||
+ | with form1 do | ||
+ | begin | ||
+ | lob:=StrToInt(loblok.text); | ||
+ | hob:=StrToInt(hoblok.text); | ||
+ | with printer do | ||
+ | begin | ||
+ | PrinterIndex:=ctlacb; | ||
+ | Title:=’Blok’; | ||
+ | beginDoc; | ||
+ | Canvas.Pen.Color:=0; | ||
+ | Canvas.Font.Name:=’Times New Roman’; | ||
+ | Canvas.Font.Size:=10; | ||
+ | Canvas.TextOut(80+lob,100+hob,pb1.text); | ||
+ | . . . . . . . | ||
+ | Canvas.LineTo(1600+lob,850+hob); | ||
+ | DateTime2:=Time; | ||
+ | Canvas.TextOut(80+lob,930+hob,Label10.Caption); | ||
+ | Canvas.TextOut(750+lob,930+hob,TimeToStr(DateTime2)); | ||
+ | Canvas.TextOut(80+lob,1040+hob,Label11.Caption); | ||
+ | DateTime2:=Date; | ||
+ | Canvas.TextOut(750+lob,1040+hob,DateToStr(DateTime2)); | ||
+ | . . . . . . . | ||
+ | Canvas.MoveTo(80+lob,1520+hob); | ||
+ | canvas.LineTo(1600+lob,1520+hob); | ||
+ | enddoc; | ||
+ | end; | ||
+ | end; | ||
+ | end; | ||
+ | </source> | ||
+ | |||
+ | [[Image:mpbc46.jpg|center|framed|Obr. 4.7 Pokladničný blok]] | ||
− | + | =Záver= | |
− | + | V práci som sa zaoberal riešením poloautomatického parkovacieho systému. Navrhol som hardvér a softvér na riadenie a nastavovanie poloautomatického parkovacieho systému a model parkoviska 1:10, na ktorom som simuloval situácie, ktoré mohli nastať. Hardvér sa zaoberá problematikou automatizácie parkovacích systémov. V tejto časti som musel riešiť ovládanie rámp a displeja. Ovládanie rámp mi zabezpečuje mikroprocesor, ktorý je prepojený s počítačom cez RS232, od ktorého dostáva inštrukcie a po spracovaní ich posiela na dosku ovládania rámp a spína nám relé rámp. Mikroprocesor riadi aj displej, ktorý nás informuje o cene parkovného. Softvér sa zaoberá ovládaním parkovacieho systému. Systém je plne automatický okrem platenia za parkovné, ktoré ovláda obsluha parkovacieho systému. Systém je univerzálny, dá sa použiť aj pre podobné parkovacie systémy. V systéme sa dajú nastavovať všetky popisy, ceny a aj časy chodu motorov. V systéme som dbal na ovládanie rámp, ktoré bolo najdôležitejšie, kvôli bezpečnosti automobilov. V práci mi chýba dorobiť displej na zobrazovanie ceny a databázu na archiváciu príjazdov a platieb za parkovné. | |
− | + | =Použitá literatúra= | |
+ | #'''Bachmann, Scheidt.''' Parkovacie systémy. <nowiki>[</nowiki>Online<nowiki>]</nowiki> 2008. <nowiki>[</nowiki>Dátum: 15. 10 2009.<nowiki>]</nowiki> [http://www.scheidt-bachmann.sk/index.php/media http://www.scheidt-bachmann.sk/index.php/media]. | ||
+ | #'''Internacional, Kingparking.''' parkovacie systémy. <nowiki>[</nowiki>Online<nowiki>]</nowiki> 2004. <nowiki>[</nowiki>Dátum: 12. 8 2009.<nowiki>]</nowiki> [http://www.kingparking.sk/aplikacie.html http://www.kingparking.sk/aplikacie.html] | ||
+ | #sk.wikipedia.org. <nowiki>[</nowiki>Online<nowiki>]</nowiki> 12. 11 2009. <nowiki>[</nowiki>Dátum: 25. 11 2009.<nowiki>]</nowiki> [http://sk.wikipedia.org/wiki/S%C3%A9riov%C3%BD_port http://sk.wikipedia.org/wiki/S%C3%A9riov%C3%BD_port]. | ||
+ | #'''Olmr, Vít.''' Hardvér. <nowiki>[</nowiki>Online<nowiki>]</nowiki> 15. 10 2005. <nowiki>[</nowiki>Dátum: 03. 07 2009.<nowiki>]</nowiki> [http://hw.cz/rs-232 http://hw.cz/rs-232]. | ||
+ | #'''Matoušek, Davit.''' ''Udělejte si z PC v Delphi ... ''Praha : BEN - Technická literatúra, 2003. ISBN 80-7300-111-x. | ||
+ | #'''Matoušek, David.''' ''Práce s mikrokontroléry ATMEL AT89C2051. ''Praha : BEN - Technická literatúra, 2002. ISBN 80-7300-094-6. | ||
+ | =Prílohy= | ||
+ | ==Fotografie modelu== | ||
+ | [[Obrázok:bc.jpg]] | ||
− | + | [[obrázok:bc1.jpg]] | |
− | + | [[obrázok:bc2.jpg]] |
Aktuálna revízia z 05:59, 7. júl 2010
Obsah
- 1 Softvérová časť parkovacieho systému
- 1.1 Požiadavky na softvér parkovisko 1.0
- 1.2 Používateľské prostredie programu pre obsluhu parkovacieho systému
- 1.3 Administratívne prostredie pre nastavovanie správnej funkčnosti systému
- 1.4 Štatistika parkovacieho systému
- 1.5 Vjazd automobilu na parkovisko
- 1.6 Tlač parkovacieho lístka
- 1.7 Procedúra Otvor vstupnú rampu
- 1.8 Procedúra časovača vstupu
- 1.9 Procedúra zatvorenia vstupnej rampy
- 1.10 Procedúra na zastavenie rampy ak vojde automobil do fotobunky
- 1.11 Procedúra zatvor vstupnú rampu
- 1.12 Procedúra na vytlačenie bloku pri výjazde z parkoviska
- 2 Záver
- 3 Použitá literatúra
- 4 Prílohy
Softvérová časť parkovacieho systému
Softvér parkoviska zabezpečuje bezpečnú prevádzku celého systému. Softvér je programovaný v jazyku object Pascal vo vývojovom prostredí Delphi. Navrhnutý softvér sme pomenovali parkovisko 1.0
Požiadavky na softvér parkovisko 1.0
Parkovací systém má byť plne automatický okrem platenia za parkovné. Má spĺňať bezpečnostné predpisy a byť jednoduchý na ovládanie zákazníkom ako aj obsluhou. Systém má byť použiteľný pre viac prevádzok, čiže sa majú dať meniť nastavenia a popisy lístkov.
Používateľské prostredie programu pre obsluhu parkovacieho systému
[Image:mpbc41.jpg|center|framed|Obr. 4.2 Používateľské prostredie po skenovaní lístka]]
Obsluha používa na ovládanie parkovacieho systému 6 tlačidlo. Tlačidlo zadaj kód lístka nám slúži na manuálne zadávanie vygenerovaného kódu, ak sa nám pokazí skener čiarového kódu. Tlačidlá otvor vstup, zatvor vstup, otvor výstup, zatvor výstup slúžia na manuálne ovládanie rámp. Rampy sa ovládajú manuálne kvôli bezpečnosti parkoviska. Tieto tlačidlá sa využívajú hlavne pri vjazde RZP, hasičov a podobne. Tlačidlo blok stláčame ak nám zákazník vyplatil parkovné. Po stlačení tlačidla blok sa nám vytlačí pokladničný doklad a otvorí výstupnú rampu.
Administratívne prostredie pre nastavovanie správnej funkčnosti systému
V nastavení lístka nastavujeme ako prvé tlačiareň ktorou budeme tlačiť. Potom nastavujeme bod odkiaľ nám začne tlačiť a to pomocou ľavého a pravého okraju. Tlačidlo tlač je na testovanie nastavovania okrajov. Nastavenie ceny parkovného za jednu hodinu, čas opätovného vytlačenia lístka, otváraciu dobu, popisy lístka a zvýraznenie určitých riadkov v popise pomocou zaškrtávacích okienok.
V prvom rade nastavujeme tlačiareň ktorú používame. Nastavíme ľavý a pravý okraj tlače. Tlačidlo tlač je skúšobná tlač pri nastavovaní okrajov. Do popisu napíšeme popis bloku.
V tomto okne sa nastavuje doba chodu motora, čas koľko má byť rampa otvorená a nastavenie prenosu cez Comport.
Štatistika parkovacieho systému
Štatistika parkovacieho systému sa ukladá automaticky pri vytlačení pokladničného bloku. V prvom stĺpci štatistiky sa nachádza kód lístka, ktorý bol pridelení zákazníkovi pri vjazde na parkovisko a vytlačený na parkovací lístok. V druhom a tretom stĺpci sú údaje o čase a dátumu výstupu z parkoviska. V štvrtom a piatom stĺpci sú údaje o dátume a čase vstupu na parkovisko. V šiestom stĺpci je vypočítaná doba parkovania. V siedmom stĺpci je sadzba aká bola nastavená na parkovisku. V siedmom stĺpci je cena za parkovanie. Štatistika sa zobrazuje len na vybraný dátum. Vždy sa nám tvorí s aktuálnym dátumom. Dátum sa dá ľahko vyberať (pozri Obr. 4.6). V štatistike sa nám v pravom dolnom rohu zobrazuje tržba a počet zákazníkov za vybraný deň.
Vjazd automobilu na parkovisko
Stlačením tlačidla pri vstupe sa pošle signál cez RS232, čím aktivuje otvárací cyklus. Otvárací cyklus začína v procedúre ComPort1Ring. Cyklus na začiatku testuje, či skončila pauza medzi vydávaním lístkov. Ak je ukončený cyklus, aktivuje procedúru na vytlačenie lístka, nastaví cyklus vstup na True, aktivuje procedúru otvor vstupnú rampu, aktivuje časovač pauzy na lístok na prednastavenú hodnotu a časovač vstupu.
Zdrojový kód 4.1 Procedúra ComPort1Ring
procedure TForm1.ComPort1Ring(Sender: TObject);
begin
if not (tim_listok.Enabled and cyklus_vst)
begin
vytlac_listok;
cyklus_vst:=True;
otvor_in;
tim_listok.Enabled:=true;
tim_vstup.Enabled:=true;
end;
end;
Tlač parkovacieho lístka
V procedúre sa ako prvé nastaví horný a ľavý okraj začiatku tlače a horný a ľavý okraj umiestnia čiarového kódu. Do reťazca kód nahráme ako prvé znak x a potom dátum a čas vo formáte rok, mesiac, deň, hodina, minúta, sekunda. Znak x nám slúži pri skenovaní čiarového kódu, ako začiatok skenovania. Text z reťazca kód nahráme do premennej barcode1 ako text, s ktorého nám automaticky vytvorí čiarový kód. Potom sa nám začne tlačenie lístka. Do tlačiarne sa údaje posielajú po riadkoch. Texty sa nám automaticky ukladajú do ini súboru, odkiaľ si ich automaticky načítava.
Zdrojový kód 4.2 Procedúra vytlac_listok
procedure vytlac_listok:
var ho,lo:integer;
DateTime : TDateTime;
kod:string;
begin
with form1 do
begin
ho:=StrToInt(hornyokraj.Text);
lo:=strtoint(lol.Text);
barcode1.Left:=100+strtoint(lol.Text);
barcode1.top:=250+ho;
kod:=’x’+formatdatetime(’yymmddhhmmss’,now); //kod barkodu rokmesacden..
barcode1.text:=kod;
with printer do
begin
PrinterIndex:=ctlac; {index tlaciarne na ktoru chcem tlacit 1,2,3,4..}
Title:=’Listok’;
BeginDoc;
Canvas.Pen.Color:= 0;
Canvas.Font.Name:= ’Times New Roman’;
Canvas.Font.Size:= 10;
if cb1.Checked then canvas.Font.Style :=[fsbold];
Canvas.TextOut(80+lo,100+ho,pl1.text);
Canvas.Font.Style :=[];
Canvas.MoveTo(50+lo,100+ho);
Canvas.Pen.Width:=5;
Canvas.LineTo(1600+lo,100+ho);
barcode1.DrawBarcode(Canvas);
Canvas.Font.Size:= 16;
Canvas.TextOut(180+lo,700+ho,kod);
Canvas.Font.Size:= 10;
Canvas.Font.Name:= ’Times New Roman’;
Canvas.MoveTo(50+lo,960+ho);
Canvas.LineTo(1600+lo,960+ho);
if cb2.Checked then canvas.Font.Style :=[fsbold];
Canvas.TextOut(80+strtoint(lol.Text),1000+ho,pl2.text);
canvas.Font.Style :=[];
. . . . . .
enddoc;
end;
end;
end;
Procedúra Otvor vstupnú rampu
Procedúra nám otvára vstupnú rampu. Ak sa vstupná rampa zatvára, zastaví ju. Skontroluje či sa výstupná brána otvára, zatvára, alebo je bez pohybu a pošle zodpovedajúce bajty tomuto stavu. Ak sa vstupná rampa nezatvára, ide z kludového stavu, skontroluje stav druhej rampy, pošlem zodpovedajúce bajty a vstupná rampa sa otvorí. Kontrolovať stav druhej rampy musíme preto, lebo každá kombinácia vstupnej a výstupnej rampy má iné bajty, ktoré sa posielajú do mikroprocesora. Do mikroprocesora posielame vždy 5 bajtov. Prvý bajt nám hovorí, či ide o displej alebo rampy. Ak ide o rampy, prijímaný prvý bajt je číslo 5. Druhý bajt je stav obidvoch rámp v akej sa práve nachádzajú (Tab.). Ďalšie 3 bajty sú slepé, posielam 0. Posledné 3 bajty posielam kvôli zjednodušeniu programu mikroprocesora. Na rampy potrebujeme 2 bajty, na displej potrebujeme 5 bajtov, z toho hľadiska by som musel nastavovať v mikroprocesory koľko bajtov má prijať.
Vstupná rampa v kľude | |||
Výstupná rampa | v kľude | Otvára sa | Zatvára sa |
Posielam 2.bit | 11110000 | 11110001 | 11110010 |
Vstupná rampa sa otvára | |||
Výstupná rampa | v kľude | Otvára sa | Zatvára sa |
Posielam 2.bit | 11110100 | 11110101 | 11110110 |
Vstupná rampa sa zatvára | |||
Výstupná rampa | v kľude | Otvára sa | Zatvára sa |
Posielam 2.bit | 11111000 | 11111001 | 11111010 |
Výstupná rampa v kľude | |||
Vstupná rampa | v kľude | Otvára sa | Zatvára sa |
Posielam 2.bit | 11110000 | 11110100 | 11111000 |
Výstupná rampa sa otvára | |||
Vstupná rampa | v kľude | Otvára sa | Zatvára sa |
Posielam 2.bit | 11110001 | 11110101 | 11111001 |
Výstupná rampa sa zatvára | |||
Vstupná rampa | v kľude | Otvára sa | Zatvára sa |
Posielam 2.bit | 11110010 | 11110110 | 11111010 |
Zdrojový kód 4.3 Procedúra Otvor_in
procedure otvor_in;
begin
with form1 do
begin
if rid then
begin
tim_in.Enabled:=false;
rid:=false;
comport1.writestr(chr(5));
if (roh=false) and (rod=false)then comport1.writestr(chr(240));
if (roh=false) and (rod=True)then comport1.writestr(chr(242));
if (roh=True) and (rod=false)then comport1.writestr(chr(241));
comport1.writestr(chr(0));
comport1.writestr(chr(0));
comport1.writestr(chr(0));
sleep(200);
end;
rih:=True;
comport1.writestr(chr(5));
if (roh=false) and (rod=false)then comport1.writestr(chr(244));
if (roh=false) and (rod=True)then comport1.writestr(chr(246));
if (roh=True) and (rod=false)then comport1.writestr(chr(245));
comport1.writestr(chr(0));
comport1.writestr(chr(0));
comport1.writestr(chr(0));
tim_in.Enabled:=true;
end;
end;
Procedúra časovača vstupu
V časovači sa nám nastaví časovač tim_vstup na False. Kontroluje či skončil cyklus vstupu a súčasne je premenná fotobunka vstupu nastavená na False. Ak sú tieto dve podmienky splnené, zavolá sa procedúra zatvor vstup (zatvor_in).
Zdrojový kód 4.4 Procedúra tim_vstup
procedure TForm1.TIM_VSTUPTimer(Sender: TObject);
begin
tim_vstup.Enabled:=false;
if (cyklus_vst) and (fotobunka_vst=false) then zatvor_in;
end;
Procedúra zatvorenia vstupnej rampy
Kontroluje či ide vstupná rampa hore. Ak ide vstupná rampa hore zastaví ju, skontroluje čo robí výjazdová rampa a podľa toho pošle bajty do procesora. Ak vstupná rampa je zastavená, alebo bola v klude, skontroluje činnosť výjazdovej rampy, pošle odpovedajúce bajty mikroprocesoru a vstupná rampa sa zavrie.
Zdrojový kód 4.5 Procedúra zatvor_in
procedure zatvor_in;
begin
with form1 do
begin
if rih then
begin
tim_in.Enabled:=false;
rih:=false;
comport1.writestr(chr(5));
if (roh=false) and (rod=false)then comport1.writestr(chr(240));
if (roh=false) and (rod=True)then comport1.writestr(chr(242));
if (roh=True) and (rod=false)then comport1.writestr(chr(241));
comport1.writestr(chr(0));
comport1.writestr(chr(0));
comport1.writestr(chr(0));
sleep(200);
end;
rid:=True;
comport1.writestr(chr(5));
if (roh=false) and (rod=false)then comport1.writestr(chr(248));
if (roh=false) and (rod=True)then comport1.writestr(chr(250));
if (roh=True) and (rod=false)then comport1.writestr(chr(249));
comport1.writestr(chr(0));
comport1.writestr(chr(0));
comport1.writestr(chr(0));
tim_in.Enabled:=true;
end;
end;
Procedúra na zastavenie rampy ak vojde automobil do fotobunky
Ak je fotobunka aktívna, nastaví premennú fotobunka_vst na True. Kontroluje činnosť vstupnej rampy. Ak sa vstupná rampa zatvára, aktivuje procedúru na otvorenie vstupnej rampy. Fotobunka nie je aktívna a cyklus vstup je aktívny, potom aktivuje procedúru na zatvorenie vstupnej rampy.
Zdrojový kód 4.6 ComPort1DSRChange
procedure TForm1.ComPort1DSRChange(Sender: TObject; OnOff: Boolean);
begin
if onoff=true then
begin
fotobunka_vys:=true;
if rod then
begin
otvor_out;
end;
end
else
begin
fotobunka_vys:=false;
if cyklus_vys then zatvor_out;
end;
end;
Procedúra zatvor vstupnú rampu
Táto procedúra nám zabezpečuje zatváranie vstupnej rampy. Ak automobil prejde cez fotobunku alebo ak uplynie stanovená doba , koľko má byť rampa otvorená, tak sa nám rampa zavrie.
Zdrojový kód 4.7 Procedúra zatvor_in
procedure zatvor_in;
begin
with form1 do
begin
if rih then
begin
tim_in.Enabled:=false;
rih:=false;
comport1.writestr(chr(5));
if (roh=false) and (rod=false)then comport1.writestr(chr(240));
if (roh=false) and (rod=True)then comport1.writestr(chr(242));
if (roh=True) and (rod=false)then comport1.writestr(chr(241));
comport1.writestr(chr(0));
comport1.writestr(chr(0));
comport1.writestr(chr(0));
sleep(200);
end;
rid:=True;
comport1.writestr(chr(5));
if (roh=false) and (rod=false)then comport1.writestr(chr(248));
if (roh=false) and (rod=True)then comport1.writestr(chr(250));
if (roh=True) and (rod=false)then comport1.writestr(chr(249));
comport1.writestr(chr(0));
comport1.writestr(chr(0));
comport1.writestr(chr(0));
tim_in.Enabled:=true;
end;
end;
Procedúra na vytlačenie bloku pri výjazde z parkoviska
Ako prvé sa v procedúre nastaví horný a ľavý okraj lístka. Je to z dôvodu, aby sa mohla pripojiť akákoľvek tlačiareň s rôznymi šírkami kotúča a v nastaveniach sa doladí správne tlačenie. Skenerom sa skenuje lístok. Ak program zachytí znak X, tak od neho nasledujúcich 12 znakov načíta. V znakoch je zakódovaný čas a dátum príjazdu automobilu. Vypočíta sa doba strávená na parkovisku, ktorá sa vynásobí nastavenou cenou. Blok sa tlačí po riadkoch. Keď obsluha od klikne tlačidlo vytlač blok, aktivuje sa procedúra na otvorenie výjazdovej rampy. Princíp procedúry na otvorenie a zatvorenie rampy je rovnaká ako pri vstupnej rampe
Zdrojový kód 4.8 Procedúra tlac_blok
procedure tlac_blok;
var lob,hob:integer;
DateTime2: TDateTime;
begin
with form1 do
begin
lob:=StrToInt(loblok.text);
hob:=StrToInt(hoblok.text);
with printer do
begin
PrinterIndex:=ctlacb;
Title:=’Blok’;
beginDoc;
Canvas.Pen.Color:=0;
Canvas.Font.Name:=’Times New Roman’;
Canvas.Font.Size:=10;
Canvas.TextOut(80+lob,100+hob,pb1.text);
. . . . . . .
Canvas.LineTo(1600+lob,850+hob);
DateTime2:=Time;
Canvas.TextOut(80+lob,930+hob,Label10.Caption);
Canvas.TextOut(750+lob,930+hob,TimeToStr(DateTime2));
Canvas.TextOut(80+lob,1040+hob,Label11.Caption);
DateTime2:=Date;
Canvas.TextOut(750+lob,1040+hob,DateToStr(DateTime2));
. . . . . . .
Canvas.MoveTo(80+lob,1520+hob);
canvas.LineTo(1600+lob,1520+hob);
enddoc;
end;
end;
end;
Záver
V práci som sa zaoberal riešením poloautomatického parkovacieho systému. Navrhol som hardvér a softvér na riadenie a nastavovanie poloautomatického parkovacieho systému a model parkoviska 1:10, na ktorom som simuloval situácie, ktoré mohli nastať. Hardvér sa zaoberá problematikou automatizácie parkovacích systémov. V tejto časti som musel riešiť ovládanie rámp a displeja. Ovládanie rámp mi zabezpečuje mikroprocesor, ktorý je prepojený s počítačom cez RS232, od ktorého dostáva inštrukcie a po spracovaní ich posiela na dosku ovládania rámp a spína nám relé rámp. Mikroprocesor riadi aj displej, ktorý nás informuje o cene parkovného. Softvér sa zaoberá ovládaním parkovacieho systému. Systém je plne automatický okrem platenia za parkovné, ktoré ovláda obsluha parkovacieho systému. Systém je univerzálny, dá sa použiť aj pre podobné parkovacie systémy. V systéme sa dajú nastavovať všetky popisy, ceny a aj časy chodu motorov. V systéme som dbal na ovládanie rámp, ktoré bolo najdôležitejšie, kvôli bezpečnosti automobilov. V práci mi chýba dorobiť displej na zobrazovanie ceny a databázu na archiváciu príjazdov a platieb za parkovné.
Použitá literatúra
- Bachmann, Scheidt. Parkovacie systémy. [Online] 2008. [Dátum: 15. 10 2009.] http://www.scheidt-bachmann.sk/index.php/media.
- Internacional, Kingparking. parkovacie systémy. [Online] 2004. [Dátum: 12. 8 2009.] http://www.kingparking.sk/aplikacie.html
- sk.wikipedia.org. [Online] 12. 11 2009. [Dátum: 25. 11 2009.] http://sk.wikipedia.org/wiki/S%C3%A9riov%C3%BD_port.
- Olmr, Vít. Hardvér. [Online] 15. 10 2005. [Dátum: 03. 07 2009.] http://hw.cz/rs-232.
- Matoušek, Davit. Udělejte si z PC v Delphi ... Praha : BEN - Technická literatúra, 2003. ISBN 80-7300-111-x.
- Matoušek, David. Práce s mikrokontroléry ATMEL AT89C2051. Praha : BEN - Technická literatúra, 2002. ISBN 80-7300-094-6.