projekat lifta
TRANSCRIPT
PROGRAM ZA UPRAVLJENJE RADOM LIFTA
PROJEKTOVANJE POMOĆU RAČUNARA
Ime i prezime: MARKO JAKIĆ
Vježba broj: 1 Škol. god. 2002/2003
ZADATAK
Napraviti pragram za PLC koji će animirati rad lifta u stambenoj zgradi. Pri izradi programa uzeti u obzir sledeće pretpostavke:
Zgrada je visoka 10 spratova plus prizemlje. Na svakom spratu postoji poziv lifta za gore i dole, osim na 10 spratu gde postoji poziv samo za dole i u prizemlju gde postoji poziv samo za gore.U liftu postoje komande za svaki sprat, komanda za stop, indikacija preopterećenja, komande za otvaranje i zatvaranje vrata na spratu te pokazivanje trenutnog položaja lifta na displeju.Pri radu lifta prioritet imaju komande zadate iz kabine, a komande poziva izvana se izvršavaju u zavisnosti od smijera kretanja lifta, dok lift ide prema gore onda staje na sve pozive na koje usput naiđe prema gore, a isto tako i prema dole. Kod odlučivanja gdje da lift krene uzeti u obzir najkraći potreban put da lift obavi zadane radnje.
IZRADA:
Za uspešnu izradu programa moramo se držati određenog redosleda radnji i postupaka koji će nas dovesti do konačnog cilja zadatka.
Kao prvi korak moramo odrediti ukupan broj i vrstu ulaza i izlaza u naš upravljački sistem.Za naš konkretni slučaj to iznosi:
ULAZI:-Poziv za gore na svakom spratu osim na 10 9+Pr=10 BOOL ulaza-Poziv za dole na svakom spratu osim u prizemlju 10=10 BOOL ulaza-Otvaranje i zatvaranje vrata kabine 1+1=2 BOOL ulaza-STOP i Preopterećeno 1+1=2 BOOL ulaza-Poziv unutar lifta za svaki sprat 10+Pr=11 BOOL ulaza
IZLAZI:-Komanda za motor uključen-isključen 1=1 BOOL izlaz-Komanda za smer gore - dole motora 1+1=2 BOOL izlaza-Indikatori položaja kabine 10+Pr=11 BOOL izlaza-Komande za otvaranje vrata po spratovima 10+Pr=11 BOOL izlaza
UNUTARNJE VARIJABLE:-One će biti definirane tokom procesa izrade programa.
Sledeći korak bi bio da pokrenemo CodeSys program i da u njegovom okruženju iscrtamo grafički dio koji će nam biti potreban za animaciju. On u konkretnom slučaju može da izgleda ovako, a stvar je ukusa i stila kako će on biti u konkretnoj situaciji prikazan. Pri tome treba težiti pojednostavljenju pri čemu se ne smije zanemariti prikaz što je moguće vjernijih komandi i kretanja koja se mogu dešavati u stvarnoj situaciji.
1
PROGRAM ZA UPRAVLJENJE RADOM LIFTA
Sl.1 Predloženi grafički izgled lifta
Kada smo uradili ovaj dio posla, tada prelazimo na sam proces programiranja koji zahtijeva dosta snalažljivosti i detaljnog poznavanja procesa koji treba opisati. Da bi to sebi olakšali posao potrebno je prethodno uraditi algoritam rada lifta, pa onda na osnovu algoritma pisati program, a u toku pisanja programa ili po njegovom završetko potrebno je pojedine promjenjljive vezivati za pripadajuće grafiče objekte, te ćemo na taj način dobiti i vizuelni prikaz rada samog programa. Time se posao rasčlanjuje na tri operacije, te se tako na lakši i pregledniji način dolazi do konačnog rešenja.
ALGORITAM RADA LIFTA
2
PROGRAM ZA UPRAVLJENJE RADOM LIFTA
Kod izrade algoritma rada lifta moramo voditi računa o tome kako da definišemo sam rad lifta. Naime, mi u ovisnosti od namjene lifta možemo odmah da pretpostavimo određene zakonitosti rada lifta i da ih kao takve odmah ugradimo u algoritam rada, a samim tim i u program. Budući da se radi o liftu za prevoz stanara u zgradi, to će mo i algoritam rada tog lifta prilagoditi tom načinu upotrebe. Za tu svrhu pretpostavit ćemo sledeća stanja i radnje koje lift treba da ispuni pri nastalim stanjima ili situacijama. Pa da ih nabrojimo:
1. Prioritet u kretanju lifta imaju komande i naredbe date sa tastera iz same kabine lifta. (poziv za sprat, stop, preopterećenost, ..)
2. Ako nema nikakvih naredbi iz unutrašnjosti lifta, onda se izvršavaju naredbe date van kabine lifta (poziv gore-dole, otvaranje i zatvaranje vrata).
3. Kod samih poziva i odlučivanja smjera kretanja mora se ispoštovati načelo najkraćeg puta, a samim tim i nakraćeg vremena ispunjenja svih zahtjeva koji su postavljeni.
4. Kada lift ide prema gore, onda treba da usput zastane na svim pozivima ka gore na koje naiđe, a isto to važi i kod puta prema dole.
5. Kod naredbe stop i preopterećeno, kabina treba odmah da stane i da omogući otvaranje vrata za izlazak viška putnika.
6. U kabini lifta i na svakom spratu treba da postoji indikacija smjera koji trenutno lift ima te položaj na kom se trenutno spratu nalazi.
Da bi uopšte kabina lifta krenula potrebno je da postoji bar jedan poziv sa bilo koje lokacije na liftu ili van lifta. Programski to rješavamo sa jednom IF petljom koja u našem slučaju glasi:
IF (D1=TRUE OR D2=TRUE OR D3=TRUE OR D4=TRUE OR D5=TRUE OR D6=TRUE OR D7=TRUE OR D8=TRUE OR D9=TRUE OR D10=TRUE ORG0=TRUE OR G1=TRUE OR G2=TRUE OR G3=TRUE OR G4=TRUE OR G5=TRUE OR G6=TRUE OR G7=TRUE OR G8=TRUE OR G9=TRUE ORS0=TRUE OR S1=TRUE OR S2=TRUE OR S3=TRUE OR S4=TRUE OR S5=TRUE OR S6=TRUE OR S7=TRUE OR S8=TRUE OR S9=TRUE OR S10=TRUE)THEN......
Pri čemu su: D do D10 .. komande za poziv ka dole G0 do G9.. komande za poziv ka gore S0 do S10..komande za poziv na željeni sprat
Za rješenje problema kretanja same kabine lifta kao prvi uslov moramo definisati način na koji će se donijeti odluka na koju stranu će krenuti kabina lifta. Za to nam je potrebna informacija o najmanjoj udaljenosti poziva, bilo izvana ili iznutra, za lift od njegovog stvarnog trenutnog položaja. Nazovimo te promjenjljive sa:
RASTS- Najmanja udaljenost poziva za sprat od položaja kabineRASTPG- Najmanja udaljenost poziva za gore od položaja kabineRASTPD- Najmanja udaljenost poziva za dole od položaja kabine
Sada možemo definirati algoritam za iznalaženje najmanje moguće udaljenosti poziva za lift od njegovog stvarnog položaja.
3
PROGRAM ZA UPRAVLJENJE RADOM LIFTA
Za pozive lifta ka gore izvana algoritam izgleda:
RASTPG:=12
RASTPG:=POL - 0
IF G0=1DA
[POL-0] < [RASTPG]DA
[POL-1] < [RASPG]IF G1=1DA
RASTPG:=POL - 1
DA
START
RASTS:=12RASTPD:=12
IF
IF
POL:=0
Sl.2 Algoritam za RASTPG
Na taj način će mo kao rezultat ove i narednih petlji (za svaki sprat po 1 s tim što se indeks mijenja)dobiti promjenjljivu RASTPG .
Programski to izgleda ovako: izračunavanje vrednosti RASTPG,
IF (G0=TRUE AND (ABS(POL -0))<(ABS(RASTPG))) THEN RASTPG:=(POL-0);
END_IF;IF (G1=TRUE AND (ABS(POL -1))<(ABS(RASTPG)))
THEN RASTPG:=(POL-1);END_IF;................
Na sličan način i po sličnim algoritmima proračunavaju se i vrijednosti za RASTS i RASTPD.Ovdje će mo prikazati samo po jedan red petlje, a ona se nastavlja za svaki sprat kao što je i dato na kraju ovog rada.
4
PROGRAM ZA UPRAVLJENJE RADOM LIFTA
DA
RASTPD:=POL - 1
DAIF D1=1
DA DA[POL-1] < [RASTPD]
IF
Sl.3 Algoritam za RASTPD Programski algoritam za RASTPD (za dva sprata) izgleda ovako:
IF(D1=TRUE AND ( ABS(POL -1))<(ABS(RASTPD)))THEN RASTPD:=(POL-1);
END_IF; IF (D2=TRUE AND (ABS(POL -2))<(ABS(RASTPD)))
THEN RASTPD:=(POL-2);END_IF;
Algoritam za RASTS je:
IF S0=1DADA
[POL-0] < [RASTS]
RASTS:=POL - 0
IF
Sl.4 Algoritam za RASTS
Programski algoritam za RASTS (za dva sprata) izgleda ovako:
IF (S0=TRUE AND (ABS(POL -0))<(ABS(RASTS))) THEN RASTS:=(POL-0);
END_IF; IF (S1=TRUE AND (ABS(POL -1))<(ABS(RASTS))) THEN RASTS:=(POL-1);
END_IF;
Kada smo odredili vrednosti promjenljivih za RASTS, RASTPG i RASTPD tada imamo:1.Ako je RASTS 0 i RASTS 12 tada imamo situaciju da imamo poziv unutar kabine za
neki od spratova, i samim tim dajemo prioritet kretanju kabine na osnovu komandi iz kabine. Odluku da li će lift ići gore ili dole se donosi na osnovu predznaka promjenjljive RASTS, ako je on pozitivan lift ide ka dole, a ako je negativan onda lift ide prema gore. Sada dolazimo ponovo u situaciju da odlučujemo i to:
5
PROGRAM ZA UPRAVLJENJE RADOM LIFTA
Ako lift ide prema gore tj. RASTS je negativno, onda ako na svom putu naiđe na poziv RASTPG =0 tada treba da kabina stane i primi putnika koji želi da ide u istom smjeru kao i putnik u liftu.
Ista je situacija ako je RASTS pozitivna, u tom slučaju kabina ide ka dole i uzimamo u obzir samo vrednost RASTPD, tj. stajemo na mjestu gdje ima poziva za dole.
A ako je RASTS=0 to je pokazatelj da je lift stigao do željenog odredišta i u tom slučaju motor mora stati, vrata otvoriti i pustiti da putnici izađu.
Algoritam za gore navedeno izgleda ovako:
IF RASTS < 0
NE
DA
NE
IF RASTS>0
NE
IF RASTPG=0DA
MOTOR=TRUEGORE=TRUE
DOLE=FALSE
DOLE=FALSE
GORE=FALSEMOTOR=FALSE
DOLE=TRUE
GORE=FALSEMOTOR=TRUE
IF RASTPG=0 GORE=FALSEMOTOR=FALSE
DOLE=FALSE
DADA
IF RASTS=12
DA
Sl.5 Algoritam rada lifta za RASTS 0
Programski to izgleda ovako:
IF (RASTS<0) AND RASTPG=0THEN MOTOR:=FALSE; GORE:=FALSE; DOLE:=FALSE;MOTOR1:=FALSE;
END_IF;IF RASTS<0 AND RASTPG<>0
THEN MOTOR:=TRUE; GORE:=TRUE; DOLE:=FALSE;END_IF;
6
PROGRAM ZA UPRAVLJENJE RADOM LIFTA
IF (RASTS>0) AND RASTPD=0THEN MOTOR:=FALSE; GORE:=FALSE; DOLE:=FALSE;MOTOR1:=FALSE;
END_IF;IF RASTS>0 AND RASTPD<>0
THEN MOTOR:=TRUE; GORE:=FALSE; DOLE:=TRUE;END_IF;IF RASTS=0
THEN MOTOR:=FALSE; GORE:=FALSE; DOLE:=FALSE; MOTOR1:=FALSE;END_IF;
2. Ako nam je RASTS=12, to znači da nemamo nikakvih poziva iz kabine lifta i u tom slučaju ponovo imamo tri novonastale situacije
a) RASTPG>RASTPD, to znači da poziv koji poziva lift u smjeru ka dole ima prioritet i lift treba prvo njega da izvršava. b) RASTPG<RASPD, to znači da poziv koji poziva lift u smeru ka gore ima prioritet i lift treba prvo njega da izvršavac) RASTPG=0 ili RASPD=0, to znači da je lift stigao do željenog poziva i da mora stati.
Program za slučaj pod (a) izgleda ovako:
IF (ABS(RASTPG)>ABS(RASTPD)) AND RASTS=12THEN IF (RASTPD=0)
THEN MOTOR:=FALSE; GORE:=FALSE; DOLE:=FALSE;MOTOR1:=FALSE;ELSIF (RASTPD<>0)THEN IF (RASTPD>0)
THEN MOTOR:=TRUE; GORE:=FALSE; DOLE:=TRUE;ELSIF (RASTPD<0)
THEN MOTOR:=TRUE; GORE:=TRUE; DOLE:=FALSE;END_IF;
END_IF;
Program za slučaj pod (b) izgleda ovako:
IF (ABS(RASTPG)<=ABS(RASTPD)) AND RASTS=12THEN IF (RASTPG=0)
THEN MOTOR:=FALSE; GORE:=FALSE; DOLE:=FALSE; MOTOR1:=FALSE;ELSIF (RASTPG<>0)
THEN IF (RASTPG>0)THEN MOTOR:=TRUE; GORE:=FALSE; DOLE:=TRUE;ELSIF (RASTPG<0)
THEN MOTOR:=TRUE; GORE:=TRUE; DOLE:=FALSE;END_IF;
END_IF;Algoritam za to izgleda ovako
7
PROGRAM ZA UPRAVLJENJE RADOM LIFTA
NEIF RASTS=12
ABS(RASTPG)>ABS(RASTPD)
IFDA
IF RASTPD=0DA
MOTOR=FALSEGORE=FALSE
DOLE=FALSE
GORE=TRUEMOTOR=TRUE
DOLE=FALSE
NE
IF RASTPD>0
DOLE=TRUE
GORE=FALSEMOTOR=TRUE
DA
DA
NE
NE
IF RASTPG=12
IF RASTPD=12V
DA
S T O P
NE
Sl.6 Algoritam za situaciju pod (a)
NEIF RASTS=12
ABS(RASTPG)>ABS(RASTPD)
IF
IF RASTPG=0MOTOR=FALSEGORE=FALSE
DOLE=FALSE
NE
DA
IF RASTPG>0
DOLE=TRUE
GORE=FALSEMOTOR=TRUE
DA NE MOTOR=TRUEGORE=TRUE
DOLE=FALSE
DA
NE
IF RASTPG=12
IF RASTPD=12V
DA
S T O P
Sl.7 Algoritam za situaciju pod (b)
8
PROGRAM ZA UPRAVLJENJE RADOM LIFTA
Sa ovim gore navedenim nisu rešeni svi problemi vezani za izradu programa za lift. Ostaje nam još da riješimo problem animiranja kretanja kabine, otvaranja i zatvaranja vrata, uključenje i isključenje motora, smjer motora, indikacija sprata... i mnogi drugi sitni detalji na koje se nailazi usput pri samom pisanju programa.
Ovdje ću da spomenem samo neke karakteristične dijelove programa.Animiranje kretanja kabine: Animiranje će mo izvršiti tako što će mo uvesti jednu novu unutarnju promjenljivu i dati joj ime POLK kao skraćenice za položaj kabine, a onda će mo objektu koji predstavlja kabinu dodijeliti tu promenjljivu za kretanje u smeru Y ose. Programski to izgleda ovako:
IF STOP=FALSE AND PREOPT=FALSE THEN
IF (MOTOR=TRUE AND GORE=TRUE AND POLVKL=0 AND POLVL0=0 AND POLVL1=0 AND POLVL2=0 AND POLVL3=0 AND POLVL4=0 AND POLVL5=0 AND POLVL6=0 AND POLVL7=0 AND POLVL8=0 AND POLVL9=0 AND POLVL10=0)
THEN POLK:=POLK-1; POL:=-0.02*POLK; MOTOR1:=TRUE;END_IF;
IF (MOTOR=TRUE AND DOLE=TRUE AND POLVKL=0 AND POLVL0=0 AND POLVL1=0 AND POLVL2=0 AND POLVL3=0 AND POLVL4=0 AND POLVL5=0 AND POLVL6=0 AND POLVL7=0 AND POLVL8=0 AND POLVL9=0 AND POLVL10=0)
THEN POLK:=POLK+1; POL:=-0.02*POLK; MOTOR1:=TRUE;END_IF;END_IF;IF STOP=TRUE OR PREOPT=TRUE
THEN MOTOR1:=FALSE;END_IF;
Animiranje otvaranja i zatvaranja vrata na spratovima izgleda ovako za svaki sprat samo se promjenjljive mijenjaju a za sprat br 1 izgleda ovko:
(*animiranje otvaranje i zatvaranje vrata na kabini br 1*)IF (MOTOR=FALSE AND POL=1 AND POLVL1>-15)
THEN POLVL1:=POLVL1-0.5; POLVD1:=-POLVL1;END_IF;
(*kada su vrata otvorena cekamo 5 sekundi i zatvaramo ih*)IF (POLVL1=-15)
THEN sat.IN:=TRUE; S1:=FALSE; G1:=FALSE; D1:=FALSE;END_IF;IF sat.Q=TRUE AND POLVL1<0 AND POLVKL=0
THEN POLVL1:=POLVL1+0.5; POLVD1:=-POLVL1; sat.IN:=FALSE;RASTS:=12; RASTPG:=12; RASTPD:=12;
END_IF;
Animiranje otvaranja i zatvaranja vrata na samoj kabini lifta izgleda ovako:
IF VRATAO=TRUE AND POLVKL>-70THEN POLVKL:=POLVKL-1; POLVKD:=-POLVKL;
END_IF;IF POLVKL=-70
THEN VRATAO:=FALSE;END_IF;IF VRATAZ=TRUE AND POLVKL<0
THEN POLVKL:=POLVKL+1; POLVKD:=-POLVKL;END_IF;IF POLVKL=0
9
PROGRAM ZA UPRAVLJENJE RADOM LIFTA
THEN VRATAZ:=FALSE;END_IF;
A prikazivanje položaja na kom se nalazi trenutno lift je riješeno ovako:
IF POL>0 AND POL<0.5THEN SPRAT0:=FALSE; SPRAT1:=TRUE; SPRAT2:=TRUE; SPRAT3:=TRUE; SPRAT4:=TRUE; SPRAT5:=TRUE; SPRAT6:=TRUE; SPRAT7:=TRUE; SPRAT8:=TRUE; SPRAT9:=TRUE; SPRAT10:=TRUE;END_IF;
Kao što se vidi, problem rada lifta je riješen u programskom jeziku ST, pomoću programskog paketa CodeSys, i njego čitav kod je naveden dole, izvorno kako je i napisan.
ZAKLJUČAK:
Kroz primer ovog zadatka dat je sažet prikaz postupka rešavanja složenijih problema koji se na relativno jednostavan i lak način rješavaju primenom PLC_a, što donosi značajne uštede kako u vremenu samog projektovanja, tako i u ukupnoj cijeni konačnog proizvoda. Kada bi se uzele u obzir i moguće modifikacije koje na veoma lak i pristupačan način možemo izvršiti mijenjanjem samo programa onda se tek dolazi do pravih prednosti korištenja PLC u industrijskom upravljanju.
10
PROGRAM ZA UPRAVLJENJE RADOM LIFTA
PROGRAM PLC_PRGVARRASTPD:REAL:=12; (* NAJMANJA UDALJENOST POZIVA ZA DOLE ODTRENUTNOG POLOZAJA KABINE-12 JE ZADANO KAO NEMOGUCE*)RASTPG:REAL:=12;(* NAJMANJA UDALJENOST POZIVA ZA GORE ODTRENUTNOG POLOZAJA KABINE-12 JE ZADANO KAO NEMOGUCE*)RASTS:REAL:=12;(* NAJMANJA UDALJENOST POZIVA IZ KABINE OD TRENUTNOG POLOZAJA KABINE-12 JE ZADANO KAO NEMOGUCE*)POL: REAL:=0;(*TRENUTNI POLOZAJ KABINE- INICIJALNO U PRIZEMLJU, TJ NA SPRATU NULA 0*)
D0:BOOL; (* D0 DO D10 SU KOMANDE IZVANA ZA POZIV LIFTA PREMA DOLE*)D1: BOOL;D2: BOOL;D3: BOOL;D4: BOOL;D5: BOOL;D6: BOOL;D7: BOOL;D8: BOOL;D9: BOOL;D10: BOOL;G0: BOOL; (*G0 DO G9 SU KOMANDE IZVANA ZA POZIV LIFTA KA GORE*)G1: BOOL;G2: BOOL;G3: BOOL;G4: BOOL;G5: BOOL;G6: BOOL;G7: BOOL;G8: BOOL;G9: BOOL;G10:BOOL;S0: BOOL; (*S0 DO S10 SU POZIVI IZ KABINE DO ZELJENOG SPRATA*)S1: BOOL;S2: BOOL;S3: BOOL;S4: BOOL;S5: BOOL;S6: BOOL;S7: BOOL;S8: BOOL;S9: BOOL;S10: BOOL;
MOTOR: BOOL; (*PROMJENJLJIVA MOTORA UKLJUCEN-ISKLJUCEN*)MOTOR1: BOOL;(*INDIKACIJA UKLJUCENOSTI MOTORA*)GORE: BOOL; (*SMJER MOTORA ZA GORE*)DOLE: BOOL; (*SMJER MOTORA KA DOLE*)POLK: REAL; (*TRENUTNI POLOZAJ KABINE*)SAT: TON; (*VRIJEME CEKANJA LIFTA DA KRENE*)IN: BOOL; (*ULAZ U SAT*)
POLVL0: REAL:=-15; (* POLOZAJ VRATA PO SPRATOVIMA, U PRIZEMLJU INICIJALNO OTVORENA*)POLVD0: REAL:=15;POLVL1: REAL;POLVD1: REAL;POLVL2: REAL;POLVD2: REAL;POLVL3: REAL;
11
PROGRAM ZA UPRAVLJENJE RADOM LIFTA
POLVD3: REAL;POLVL4: REAL;POLVD4: REAL;POLVL5: REAL;POLVD5: REAL;POLVL6: REAL;POLVD6: REAL;POLVL7: REAL;POLVD7: REAL;POLVL8: REAL;POLVD8: REAL;POLVL9: REAL;POLVD9: REAL;POLVL10: REAL;POLVD10: REAL;POLVKL: REAL; (*VRATA KABINE LIJEVA*)POLVKD: REAL;VRATAO: BOOL; (*KOMANDA ZA OTVARANJE VRATA KABINE*)VRATAZ: BOOL;(*KOMANDA ZA ZATVARANJE VRATA KABINE*)PREOPT: BOOL;(*INDIKACIJA PREOPTERECENJA KABINE*)STOP: BOOL;(*TASTER ZA STOP*)SPRAT1: BOOL; (*INDIKACIJA SPRATOVA U KABINI*)SPRAT0: BOOL;SPRAT2: BOOL;SPRAT3: BOOL;SPRAT4: BOOL;SPRAT5: BOOL;SPRAT6: BOOL;SPRAT7: BOOL;SPRAT8: BOOL;SPRAT9: BOOL;SPRAT10: BOOL;
END_VAR
(*LIFT- PROJEKTNI ZADATAK ZA KANDIDATA MARKO JAKIC*)(*PROVJERA DA LI IMA IKAKVIH POYIVA SA KOMANDI LIFTA*)IF (D1=TRUE OR D2=TRUE OR D3=TRUE OR D4=TRUE OR D5=TRUE OR D6=TRUE OR D7=TRUE OR D8=TRUE OR D9=TRUE OR D10=TRUE ORG0=TRUE OR G1=TRUE OR G2=TRUE OR G3=TRUE OR G4=TRUE OR G5=TRUE OR G6=TRUE OR G7=TRUE OR G8=TRUE OR G9=TRUE ORS0=TRUE OR S1=TRUE OR S2=TRUE OR S3=TRUE OR S4=TRUE OR S5=TRUE OR S6=TRUE OR S7=TRUE OR S8=TRUE OR S9=TRUE OR S10=TRUE)THEN(*AKO IMA , ONDA TRAZENJE NAJMANJE VREDNOSTI ZA PROMENJLJIVU POZIVA ZA DOLE*) IF(D1=TRUE AND ( ABS(POL -1))<(ABS(RASTPD)))
THEN RASTPD:=(POL-1);END_IF; IF (D2=TRUE AND (ABS(POL -2))<(ABS(RASTPD)))
THEN RASTPD:=(POL-2);END_IF;
IF (D3=TRUE AND (ABS(POL -3))<(ABS(RASTPD)))THEN RASTPD:=(POL-3);
END_IF; IF (D4=TRUE AND (ABS(POL -4))<(ABS(RASTPD))) THEN RASTPD:=(POL-4);
END_IF; IF (D5=TRUE AND (ABS(POL -5))<(ABS(RASTPD))) THEN RASTPD:=(POL-5);
12
PROGRAM ZA UPRAVLJENJE RADOM LIFTA
END_IF; IF (D6=TRUE AND (ABS(POL -6))<(ABS(RASTPD))) THEN RASTPD:=(POL-6);
END_IF; IF (D7=TRUE AND (ABS(POL -7))<(ABS(RASTPD)))
THEN RASTPD:=(POL-7);END_IF;
IF(D8=TRUE AND (ABS(POL -8))<(ABS(RASTPD))) THEN RASTPD:=(POL-8);
END_IF; IF (D9=TRUE AND (ABS(POL -9))<(ABS(RASTPD)))
THEN RASTPD:=(POL-9);END_IF; IF (D10=TRUE AND (ABS(POL -10))<(ABS(RASTPD)))
THEN RASTPD:=(POL-10);END_IF;
(*TRAZENJE NAJMANJE UDALJENOSTI ZA POZIV KA GORE OD KABINE*) IF (G0=TRUE AND (ABS(POL -0))<(ABS(RASTPG)))
THEN RASTPG:=(POL-0);END_IF;IF (G1=TRUE AND (ABS(POL -1))<(ABS(RASTPG)))
THEN RASTPG:=(POL-1);END_IF;
IF (G2=TRUE AND (ABS(POL -2))<(ABS(RASTPG))) THEN RASTPG:=(POL-2);
END_IF; IF (G3=TRUE AND (ABS(POL -3))<(ABS(RASTPG)))
THEN RASTPG:=(POL-3);END_IF;
IF (G4=TRUE AND (ABS(POL -4))<(ABS(RASTPG))) THEN RASTPG:=(POL-4);
END_IF; IF (G5=TRUE AND (ABS(POL -5))<(ABS(RASTPG)))
THEN RASTPG:=(POL-5);END_IF;IF (G6=TRUE AND (ABS(POL -6))<(ABS(RASTPG)))
THEN RASTPG:=(POL-6);END_IF; IF (G7=TRUE AND (ABS(POL -7))<(ABS(RASTPG)))
THEN RASTPG:=(POL-7);END_IF;
IF (G8=TRUE AND (ABS(POL -8))<(ABS(RASTPG))) THEN RASTPG:=(POL-8);
END_IF; IF (G9=TRUE AND (ABS(POL -9))<(ABS(RASTPG))) THEN RASTPG:=(POL-9);
END_IF;(*TRAZENJE NAJMANJE UDALJENOSTI ZA POZIV SPRATA IZ KABINE OD POLOZAJA KABINE*)
IF (S0=TRUE AND (ABS(POL -0))<(ABS(RASTS))) THEN RASTS:=(POL-0);
END_IF; IF (S1=TRUE AND (ABS(POL -1))<(ABS(RASTS))) THEN RASTS:=(POL-1);
END_IF; IF (S2=TRUE AND (ABS(POL -2))<(ABS(RASTS))) THEN RASTS:=(POL-2);
END_IF; IF (S3=TRUE AND (ABS(POL -3))<(ABS(RASTS)))
13
PROGRAM ZA UPRAVLJENJE RADOM LIFTA
THEN RASTS:=(POL-3);END_IF;
IF (S4=TRUE AND (ABS(POL -4))<(ABS(RASTS))) THEN RASTS:=(POL-4);
END_IF; IF (S5=TRUE AND (ABS(POL -5))<(ABS(RASTS))) THEN RASTS:=(POL-5);
END_IF; IF (S6=TRUE AND (ABS(POL -6))<(ABS(RASTS))) THEN RASTS:=(POL-6);
END_IF; IF (S7=TRUE AND (ABS(POL -7))<(ABS(RASTS)))
THEN RASTS:=(POL-7);END_IF;
IF (S8=TRUE AND (ABS(POL -8))<(ABS(RASTS))) THEN RASTS:=(POL-8);
END_IF; IF (S9=TRUE AND (ABS(POL -9))<(ABS(RASTS)))
THEN RASTS:=(POL-9);END_IF; IF (S10=TRUE AND (ABS(POL -10))<(ABS(RASTS)))
THEN RASTS:=(POL-10);END_IF;
(*ODREDJIVANJE SMJERA KRETANJA LIFTA ZA SLUCAJ DA IMA POZIVA IZ LIFTA*)(*POZIV ZA GORE*)
IF (RASTS <> 12)THEN
IF (RASTS<0) AND RASTPG=0THEN MOTOR:=FALSE; GORE:=FALSE; DOLE:=FALSE;MOTOR1:=FALSE;
END_IF;IF RASTS<0 AND RASTPG<>0
THEN MOTOR:=TRUE; GORE:=TRUE; DOLE:=FALSE;END_IF;
(*POZIV ZA DOLE*)IF (RASTS>0) AND RASTPD=0
THEN MOTOR:=FALSE; GORE:=FALSE; DOLE:=FALSE;MOTOR1:=FALSE;END_IFIF RASTS>0 AND RASTPD<>0
THEN MOTOR:=TRUE; GORE:=FALSE; DOLE:=TRUE;END_IF;IF RASTS=0
THEN MOTOR:=FALSE; GORE:=FALSE; DOLE:=FALSE; MOTOR1:=FALSE;END_IF;
(*NEMA POZIVA IZ UNUTRASNJOSTI LIFTA, TADA JE PROMJENJLJIVA RASTS=12*)END_IF;(*AKO NEMA UNUTARNJIH POZIVA TADA ISPITUJEMO GDJE NAM JE NAJBLIZI POZIV ZA GORE-DOLE IZVANA*)IF (ABS(RASTPG)>ABS(RASTPD)) AND RASTS=12
THEN IF (RASTPD=0)THEN MOTOR:=FALSE; GORE:=FALSE; DOLE:=FALSE;MOTOR1:=FALSE;
ELSIF (RASTPD<>0)THEN IF (RASTPD>0)
THEN MOTOR:=TRUE; GORE:=FALSE; DOLE:=TRUE;ELSIF (RASTPD<0)
THEN MOTOR:=TRUE; GORE:=TRUE; DOLE:=FALSE;END_IF;END_IF;
14
PROGRAM ZA UPRAVLJENJE RADOM LIFTA
END_IF;IF (ABS(RASTPG)<=ABS(RASTPD)) AND RASTS=12
THEN IF (RASTPG=0)THEN MOTOR:=FALSE; GORE:=FALSE; DOLE:=FALSE; MOTOR1:=FALSE;ELSIF (RASTPG<>0)
THEN IF (RASTPG>0)THEN MOTOR:=TRUE; GORE:=FALSE; DOLE:=TRUE;ELSIF (RASTPG<0)
THEN MOTOR:=TRUE; GORE:=TRUE; DOLE:=FALSE;END_IF;END_IF;END_IF;(*ANIMIRANJE KRETANJA KABINE*)IF STOP=FALSE AND PREOPT=FALSE THENIF (MOTOR=TRUE AND GORE=TRUE AND POLVKL=0 AND POLVL0=0 AND POLVL1=0 AND POLVL2=0 AND POLVL3=0 AND POLVL4=0 AND POLVL5=0 AND POLVL6=0 AND POLVL7=0 AND POLVL8=0 AND POLVL9=0 AND POLVL10=0)
THEN POLK:=POLK-1; POL:=-0.02*POLK; MOTOR1:=TRUE;END_IF;IF (MOTOR=TRUE AND DOLE=TRUE AND POLVKL=0 AND POLVL0=0 AND POLVL1=0 AND POLVL2=0 AND POLVL3=0 AND POLVL4=0 AND POLVL5=0 AND POLVL6=0 AND POLVL7=0 AND POLVL8=0 AND POLVL9=0 AND POLVL10=0)
THEN POLK:=POLK+1; POL:=-0.02*POLK; MOTOR1:=TRUE;END_IF;END_IF;IF STOP=TRUE OR PREOPT=TRUE (*ZAUSTAVLJANJE KRETANJA LIFTA U SLUCAJU KADA JE UKLJUCEN STOP ILI PREOPTERECENO*)THEN MOTOR1:=FALSE;END_IF;(*ANIMIRANJE OTVARANJE I ZATVARANJE VRATA NA KABINI NA PRIZEMLJU*)
IF (MOTOR=FALSE AND POL=0 AND POLVL0>-15)THEN POLVL0:=POLVL0-0.5; POLVD0:=-POLVL0;
END_IF;(*KADA SU VRATA OTVORENA CEKAMO 5 SEKUNDI I ZATVARAMO IH*)
IF (POLVL0=-15)THEN sat.IN:=TRUE; S0:=FALSE; G0:=FALSE; D0:=FALSE;
END_IF;IF sat.Q=TRUE AND POLVL0<0 AND POLVKL=0
THEN POLVL0:=POLVL0+0.5; POLVD0:=-POLVL0; sat.IN:=FALSE; RASTS:=12; RASTPG:=12; RASTPD:=12;
END_IF;(*ANIMIRANJE OTVARANJE I ZATVARANJE VRATA NA KABINI BR 1*)
IF (MOTOR=FALSE AND POL=1 AND POLVL1>-15)THEN POLVL1:=POLVL1-0.5; POLVD1:=-POLVL1;
END_IF;(*KADA SU VRATA OTVORENA CEKAMO 5 SEKUNDI I ZATVARAMO IH*)
IF (POLVL1=-15)THEN sat.IN:=TRUE; S1:=FALSE; G1:=FALSE; D1:=FALSE;
END_IF;IF sat.Q=TRUE AND POLVL1<0 AND POLVKL=0
THEN POLVL1:=POLVL1+0.5; POLVD1:=-POLVL1; sat.IN:=FALSE;RASTS:=12; RASTPG:=12; RASTPD:=12;
END_IF;(*ANIMIRANJE OTVARANJE I ZATVARANJE VRATA NA KABINI BR 2*)
IF (MOTOR=FALSE AND POL=2 AND POLVL2>-15)THEN POLVL2:=POLVL2-0.5; POLVD2:=-POLVL2;
END_IF;
15
PROGRAM ZA UPRAVLJENJE RADOM LIFTA
(*KADA SU VRATA OTVORENA CEKAMO 5 SEKUNDI I ZATVARAMO IH*)IF (POLVL2=-15)
THEN sat.IN:=TRUE; S2:=FALSE; G2:=FALSE; D2:=FALSE;END_IF;IF sat.Q=TRUE AND POLVL2<0 AND POLVKL=0
THEN POLVL2:=POLVL2+0.5; POLVD2:=-POLVL2; sat.IN:=FALSE;RASTS:=12; RASTPG:=12; RASTPD:=12;
END_IF;(*ANIMIRANJE OTVARANJE I ZATVARANJE VRATA NA KABINI BR 3*)
IF (MOTOR=FALSE AND POL=3 AND POLVL3>-15)THEN POLVL3:=POLVL3-0.5; POLVD3:=-POLVL3;
END_IF;(*KADA SU VRATA OTVORENA CEKAMO 5 SEKUNDI I ZATVARAMO IH*)
IF (POLVL3=-15)THEN sat.IN:=TRUE; S3:=FALSE; G3:=FALSE; D3:=FALSE;
END_IF;IF sat.Q=TRUE AND POLVL3<0 AND POLVKL=0
THEN POLVL3:=POLVL3+0.5; POLVD3:=-POLVL3; sat.IN:=FALSE;RASTS:=12; RASTPG:=12; RASTPD:=12;
END_IF;(*ANIMIRANJE OTVARANJE I ZATVARANJE VRATA NA KABINI BR 4*)
IF (MOTOR=FALSE AND POL=4 AND POLVL4>-15)THEN POLVL4:=POLVL4-0.5; POLVD4:=-POLVL4;
END_IF;(*KADA SU VRATA OTVORENA CEKAMO 5 SEKUNDI I ZATVARAMO IH*)
IF (POLVL4=-15)THEN sat.IN:=TRUE; S4:=FALSE; G4:=FALSE; D4:=FALSE;
END_IF;IF sat.Q=TRUE AND POLVL4<0 AND POLVKL=0
THEN POLVL4:=POLVL4+0.5; POLVD4:=-POLVL4; sat.IN:=FALSE;RASTS:=12; RASTPG:=12; RASTPD:=12;
END_IF;(*ANIMIRANJE OTVARANJE I ZATVARANJE VRATA NA KABINI BR 5*)
IF (MOTOR=FALSE AND POL=5 AND POLVL5>-15)THEN POLVL5:=POLVL5-0.5; POLVD5:=-POLVL5;
END_IF;(*KADA SU VRATA OTVORENA CEKAMO 5 SEKUNDI I ZATVARAMO IH*)
IF (POLVL5=-15)THEN sat.IN:=TRUE; S5:=FALSE; G5:=FALSE; D5:=FALSE;
END_IF;IF sat.Q=TRUE AND POLVL5<0 AND POLVKL=0
THEN POLVL5:=POLVL5+0.5; POLVD5:=-POLVL5; sat.IN:=FALSE;RASTS:=12; RASTPG:=12; RASTPD:=12;
END_IF;(*ANIMIRANJE OTVARANJE I ZATVARANJE VRATA NA KABINI BR 6*)
IF (MOTOR=FALSE AND POL=6 AND POLVL6>-15)THEN POLVL6:=POLVL6-0.5; POLVD6:=-POLVL6;
END_IF;(*KADA SU VRATA OTVORENA CEKAMO 5 SEKUNDI I ZATVARAMO IH*)
IF (POLVL6=-15)THEN sat.IN:=TRUE; S6:=FALSE; G6:=FALSE; D6:=FALSE;
END_IF;IF sat.Q=TRUE AND POLVL6<0 AND POLVKL=0
THEN POLVL6:=POLVL6+0.5; POLVD6:=-POLVL6; sat.IN:=FALSE;RASTS:=12; RASTPG:=12; RASTPD:=12;
END_IF;(*ANIMIRANJE OTVARANJE I ZATVARANJE VRATA NA KABINI BR 7*)
IF (MOTOR=FALSE AND POL=7 AND POLVL7>-15)
16
PROGRAM ZA UPRAVLJENJE RADOM LIFTA
THEN POLVL7:=POLVL7-0.5; POLVD7:=-POLVL7;END_IF;
(*KADA SU VRATA OTVORENA CEKAMO 5 SEKUNDI I ZATVARAMO IH*)IF (POLVL7=-15)
THEN sat.IN:=TRUE; S7:=FALSE; G7:=FALSE; D7:=FALSE;END_IF;IF sat.Q=TRUE AND POLVL7<0 AND POLVKL=0
THEN POLVL7:=POLVL7+0.5; POLVD7:=-POLVL7; sat.IN:=FALSE;RASTS:=12; RASTPG:=12; RASTPD:=12;
END_IF;(*ANIMIRANJE OTVARANJE I ZATVARANJE VRATA NA KABINI BR 8*)
IF (MOTOR=FALSE AND POL=8 AND POLVL8>-15)THEN POLVL8:=POLVL8-0.5; POLVD8:=-POLVL8;
END_IF;(*KADA SU VRATA OTVORENA CEKAMO 5 SEKUNDI I ZATVARAMO IH*)
IF (POLVL8=-15)THEN sat.IN:=TRUE; S8:=FALSE; G8:=FALSE; D8:=FALSE;
END_IF;IF sat.Q=TRUE AND POLVL8<0 AND POLVKL=0
THEN POLVL8:=POLVL8+0.5; POLVD8:=-POLVL8; sat.IN:=FALSE;RASTS:=12; RASTPG:=12; RASTPD:=12;
END_IF;(*ANIMIRANJE OTVARANJE I ZATVARANJE VRATA NA KABINI BR 9*)
IF (MOTOR=FALSE AND POL=9 AND POLVL9>-15)THEN POLVL9:=POLVL9-0.5; POLVD9:=-POLVL9;
END_IF;(*KADA SU VRATA OTVORENA CEKAMO 5 SEKUNDI I ZATVARAMO IH*)
IF (POLVL9=-15)THEN sat.IN:=TRUE; S9:=FALSE;G9:=FALSE; D9:=FALSE;
END_IF;IF sat.Q=TRUE AND POLVL9<0 AND POLVKL=0
THEN POLVL9:=POLVL9+0.5; POLVD9:=-POLVL9; sat.IN:=FALSE;RASTS:=12; RASTPG:=12; RASTPD:=12;
END_IF;(*ANIMIRANJE OTVARANJE I ZATVARANJE VRATA NA KABINI BR 10*)
IF (MOTOR=FALSE AND POL=10 AND POLVL10>-15)THEN POLVL10:=POLVL10-0.5; POLVD10:=-POLVL10;
END_IF;(*KADA SU VRATA OTVORENA CEKAMO 5 SEKUNDI I ZATVARAMO IH*)
IF (POLVL10=-15)THEN sat.IN:=TRUE; S10:=FALSE; G10:=FALSE; D10:=FALSE;
END_IF;IF sat.Q=TRUE AND POLVL10<0 AND POLVKL=0
THEN POLVL10:=POLVL10+0.5; POLVD10:=-POLVL10; sat.IN:=FALSE;RASTS:=12;RASTPG:=12; RASTPD:=12;
END_IF;(*ANIMIRANJE PRIKAZIVANJA POLOZAJA KABINE LIFTA PO SPRATOVIMA- DISPLEJ U KABINI*)IF POL>0 AND POL<0.5THEN SPRAT0:=FALSE; SPRAT1:=TRUE; SPRAT2:=TRUE; SPRAT3:=TRUE; SPRAT4:=TRUE; SPRAT5:=TRUE; SPRAT6:=TRUE; SPRAT7:=TRUE; SPRAT8:=TRUE; SPRAT9:=TRUE; SPRAT10:=TRUE;ELSIF POL>0.5 AND POL<1.5THEN SPRAT1:=FALSE; SPRAT0:=TRUE; SPRAT2:=TRUE; SPRAT3:=TRUE; SPRAT4:=TRUE; SPRAT5:=TRUE; SPRAT6:=TRUE; SPRAT7:=TRUE; SPRAT8:=TRUE; SPRAT9:=TRUE; SPRAT10:=TRUE;ELSIF POL>1.5 AND POL <2.5THEN SPRAT0:=TRUE; SPRAT1:=TRUE; SPRAT2:=FALSE; SPRAT3:=TRUE; SPRAT4:=TRUE; SPRAT5:=TRUE; SPRAT6:=TRUE; SPRAT7:=TRUE; SPRAT8:=TRUE; SPRAT9:=TRUE; SPRAT10:=TRUE;ELSIF POL>2.5 AND POL <3.5
17
PROGRAM ZA UPRAVLJENJE RADOM LIFTA
THEN SPRAT0:=TRUE; SPRAT1:=TRUE; SPRAT2:=TRUE; SPRAT3:=FALSE; SPRAT4:=TRUE; SPRAT5:=TRUE; SPRAT6:=TRUE; SPRAT7:=TRUE; SPRAT8:=TRUE; SPRAT9:=TRUE; SPRAT10:=TRUE;ELSIF POL>3.5 AND POL <4.5THEN SPRAT0:=TRUE; SPRAT1:=TRUE; SPRAT2:=TRUE; SPRAT3:=TRUE; SPRAT4:=FALSE; SPRAT5:=TRUE; SPRAT6:=TRUE; SPRAT7:=TRUE; SPRAT8:=TRUE; SPRAT9:=TRUE; SPRAT10:=TRUE;ELSIF POL>4.5 AND POL <5.5THEN SPRAT0:=TRUE; SPRAT1:=TRUE; SPRAT2:=TRUE; SPRAT3:=TRUE; SPRAT4:=TRUE; SPRAT5:=FALSE; SPRAT6:=TRUE; SPRAT7:=TRUE; SPRAT8:=TRUE; SPRAT9:=TRUE; SPRAT10:=TRUE;ELSIF POL>5.5 AND POL <6.5THEN SPRAT0:=TRUE; SPRAT1:=TRUE; SPRAT2:=TRUE; SPRAT3:=TRUE; SPRAT4:=TRUE; SPRAT5:=TRUE; SPRAT6:=FALSE; SPRAT7:=TRUE; SPRAT8:=TRUE; SPRAT9:=TRUE; SPRAT10:=TRUE;ELSIF POL>6.5 AND POL <7.5THEN SPRAT0:=TRUE; SPRAT1:=TRUE; SPRAT2:=TRUE; SPRAT3:=TRUE; SPRAT4:=TRUE; SPRAT5:=TRUE; SPRAT6:=TRUE; SPRAT7:=FALSE; SPRAT8:=TRUE; SPRAT9:=TRUE; SPRAT10:=TRUE;ELSIF POL>7.5 AND POL <8.5THEN SPRAT0:=TRUE; SPRAT1:=TRUE; SPRAT2:=TRUE; SPRAT3:=TRUE; SPRAT4:=TRUE; SPRAT5:=TRUE; SPRAT6:=TRUE; SPRAT7:=TRUE; SPRAT8:=FALSE; SPRAT9:=TRUE; SPRAT10:=TRUE;ELSIF POL>8.5 AND POL <9.5THEN SPRAT0:=TRUE; SPRAT1:=TRUE; SPRAT2:=TRUE; SPRAT3:=TRUE; SPRAT4:=TRUE; SPRAT5:=TRUE; SPRAT6:=TRUE; SPRAT7:=TRUE; SPRAT8:=TRUE; SPRAT9:=FALSE; SPRAT10:=TRUE;ELSIF POL>9.5THEN SPRAT0:=TRUE; SPRAT1:=TRUE; SPRAT2:=TRUE; SPRAT3:=TRUE; SPRAT4:=TRUE; SPRAT5:=TRUE; SPRAT6:=TRUE; SPRAT7:=TRUE; SPRAT8:=TRUE; SPRAT9:=TRUE; SPRAT10:=FALSE;END_IF;(*SETOVANJE RADA SATA*)sat(IN:=TRUE, PT:=TIME#5S);(*RESETOVANJE POCETNIH VRIJEDNOSTI ZA POZIVE NA SPRATOVE I IZVANA*)
ELSE RASTS:=12; RASTPG:=12; RASTPD:=12;END_IF;(*OTVARANJE I ZATVARANJE VRATA NA KABINI RUCNIM KOMANDAMA*)
IF VRATAO=TRUE AND POLVKL>-70THEN POLVKL:=POLVKL-1; POLVKD:=-POLVKL;
END_IF;IF POLVKL=-70THEN VRATAO:=FALSE;
END_IF;IF VRATAZ=TRUE AND POLVKL<0
THEN POLVKL:=POLVKL+1; POLVKD:=-POLVKL;END_IF;
IF POLVKL=0THEN VRATAZ:=FALSE;END_IF;(*KRAJ PROGRAMA LIFTA*)
Korištena literatura:1. S.Odri, M.Hajduković;Programski jezici za programabilne kontrolere, NEURON, Tehnička
serija, N.Sad, 1999.2. Goran Miličić, PROGRAMABILNI LOGIČKI KONTROLERI, skripta FSB Zagreb,2000
18