Softvérová časť parkovacieho systému: Rozdiel medzi revíziami
Riadok 28: | Riadok 28: | ||
==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|none]] | |
Obr. 4.3 Nastavenia lístka s čiarovým kódom | Obr. 4.3 Nastavenia lístka s čiarovým kódom | ||
Riadok 35: | Riadok 35: | ||
− | + | [[Image:mpbc43.jpg|framed|none]] | |
Obr. 4.4 Nastavenie bloku | 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|none]] | |
Obr. 4.5 Nastavenie času motorov a nastavenie comportu | Obr. 4.5 Nastavenie času motorov a nastavenie comportu | ||
Verzia zo dňa a času 16:21, 16. február 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 Vjazd automobilu na parkovisko
- 1.5 Tlač parkovacieho lístka
- 1.6 Procedúra Otvor vstupnú rampu
- 1.7 Procedúra časovača vstupu
- 1.8 Procedúra zatvorenia vstupnej rampy
- 1.9 Procedúra na zastavenie rampy ak vojde automobil do fotobunky
- 1.10 Procedúra zatvor vstupnú rampu
- 1.11 Procedúra na vytlačenie bloku pri výjazde z parkoviska
- 2 Záver
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.
[6]
Používateľské prostredie programu pre obsluhu parkovacieho systému
Obr. 4.1 Používateľské prostredie parkovacieho systému
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
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.
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.
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.
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; |
Obr. 4.6 Lístok s čiarovým kódom
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ť.
Tabuľka 4.1 Hodnoty bajtov posielané do mikroprocesora v dekadickom tvare
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; |
Obr. 4.7 Pokladničný blok