You are on page 1of 18

PROGRAM ZA UPRAVLJENJE RADOM LIFTA PROJEKTOVANJE POMOU RAUNARA

Ime i prezime: MARKO JAKI Vjeba 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 sledee 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 preoptereenja, komande za otvaranje i zatvaranje vrata na spratu te pokazivanje trenutnog poloaja lifta na displeju. Pri radu lifta prioritet imaju komande zadate iz kabine, a komande poziva izvana se izvravaju u zavisnosti od smijera kretanja lifta, dok lift ide prema gore onda staje na sve pozive na koje usput naie prema gore, a isto tako i prema dole. Kod odluivanja gdje da lift krene uzeti u obzir najkrai potreban put da lift obavi zadane radnje. IZRADA: Za uspenu izradu programa moramo se drati odreenog redosleda radnji i postupaka koji e nas dovesti do konanog cilja zadatka. Kao prvi korak moramo odrediti ukupan broj i vrstu ulaza i izlaza u na upravljaki sistem. Za na konkretni sluaj to iznosi: ULAZI: -Poziv za gore na svakom spratu osim na 10 -Poziv za dole na svakom spratu osim u prizemlju -Otvaranje i zatvaranje vrata kabine -STOP i Preoptereeno -Poziv unutar lifta za svaki sprat IZLAZI: -Komanda za motor ukljuen-iskljuen -Komanda za smer gore - dole motora -Indikatori poloaja kabine -Komande za otvaranje vrata po spratovima 9+Pr=10 BOOL ulaza 10=10 BOOL ulaza 1+1=2 BOOL ulaza 1+1=2 BOOL ulaza 10+Pr=11 BOOL ulaza 1=1 BOOL izlaz 1+1=2 BOOL izlaza 10+Pr=11 BOOL izlaza 10+Pr=11 BOOL izlaza

UNUTARNJE VARIJABLE: -One e biti definirane tokom procesa izrade programa. Sledei korak bi bio da pokrenemo CodeSys program i da u njegovom okruenju iscrtamo grafiki dio koji e nam biti potreban za animaciju. On u konkretnom sluaju moe da izgleda ovako, a stvar je ukusa i stila kako e on biti u konkretnoj situaciji prikazan. Pri tome treba teiti pojednostavljenju pri emu se ne smije zanemariti prikaz to je mogue vjernijih komandi i kretanja koja se mogu deavati u stvarnoj situaciji. 1

PROGRAM ZA UPRAVLJENJE RADOM LIFTA

Sl.1 Predloeni grafiki izgled lifta Kada smo uradili ovaj dio posla, tada prelazimo na sam proces programiranja koji zahtijeva dosta snalaljivosti i detaljnog poznavanja procesa koji treba opisati. Da bi to sebi olakali posao potrebno je prethodno uraditi algoritam rada lifta, pa onda na osnovu algoritma pisati program, a u toku pisanja programa ili po njegovom zavretko potrebno je pojedine promjenjljive vezivati za pripadajue grafie objekte, te emo na taj nain dobiti i vizuelni prikaz rada samog programa. Time se posao raslanjuje na tri operacije, te se tako na laki i pregledniji nain dolazi do konanog reenja. ALGORITAM RADA LIFTA 2

PROGRAM ZA UPRAVLJENJE RADOM LIFTA


Kod izrade algoritma rada lifta moramo voditi rauna o tome kako da definiemo sam rad lifta. Naime, mi u ovisnosti od namjene lifta moemo odmah da pretpostavimo odreene zakonitosti rada lifta i da ih kao takve odmah ugradimo u algoritam rada, a samim tim i u program. Budui da se radi o liftu za prevoz stanara u zgradi, to e mo i algoritam rada tog lifta prilagoditi tom nainu upotrebe. Za tu svrhu pretpostavit emo sledea 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, preoptereenost, ..) 2. Ako nema nikakvih naredbi iz unutranjosti lifta, onda se izvravaju naredbe date van kabine lifta (poziv gore-dole, otvaranje i zatvaranje vrata). 3. Kod samih poziva i odluivanja smjera kretanja mora se ispotovati naelo najkraeg puta, a samim tim i nakraeg 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 naie, a isto to vai i kod puta prema dole. 5. Kod naredbe stop i preoptereeno, kabina treba odmah da stane i da omogui otvaranje vrata za izlazak vika putnika. 6. U kabini lifta i na svakom spratu treba da postoji indikacija smjera koji trenutno lift ima te poloaj na kom se trenutno spratu nalazi. Da bi uopte kabina lifta krenula potrebno je da postoji bar jedan poziv sa bilo koje lokacije na liftu ili van lifta. Programski to rjeavamo sa jednom IF petljom koja u naem sluaju 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 OR G0=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 OR S0=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 rjeenje problema kretanja same kabine lifta kao prvi uslov moramo definisati nain 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 poloaja. Nazovimo te promjenjljive sa: RASTS- Najmanja udaljenost poziva za sprat od poloaja kabine RASTPG- Najmanja udaljenost poziva za gore od poloaja kabine RASTPD- Najmanja udaljenost poziva za dole od poloaja kabine Sada moemo definirati algoritam za iznalaenje najmanje mogue udaljenosti poziva za lift od njegovog stvarnog poloaja. Za pozive lifta ka gore izvana algoritam izgleda: 3

PROGRAM ZA UPRAVLJENJE RADOM LIFTA

START

RASTPG:= 12 RASTPD:= 12 RASTS:= 12 POL:= 0

IF G0= 1

DA

IF [POL-0] < [RASTPG]

DA RASTPG:= POL - 0

IF G1= 1

DA

IF [POL-1] < [RASPG]

DA RASTPG:= POL - 1

Sl.2 Algoritam za RASTPG Na taj nain 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: izraunavanje 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 slian nain i po slinim algoritmima proraunavaju 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.

PROGRAM ZA UPRAVLJENJE RADOM LIFTA

IF D1= 1

DA

IF [POL-1] <[RASTPD]

DA RASTPD:= POL - 1

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:

DA RASTS:= POL - 0

IF [POL-0] <[RASTS]

DA

IF S0= 1

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 ii 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 odluujemo i to:

PROGRAM ZA UPRAVLJENJE RADOM LIFTA


Ako lift ide prema gore tj. RASTS je negativno, onda ako na svom putu naie 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 sluaju 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 odredita i u tom sluaju motor mora stati, vrata otvoriti i pustiti da putnici izau. Algoritam za gore navedeno izgleda ovako:

IF RASTS <0

DA

IF RASTPG= 0

DA

MOTOR= FALSE GORE= FALSE DOLE= FALSE

NE MOTOR= TRUE GORE= TRUE DOLE= FALSE

IF RASTS> 0

DA

IF RASTPG= 0

DA

MOTOR= FALSE GORE= FALSE DOLE= FALSE

NE MOTOR= TRUE GORE= FALSE DOLE= TRUE

NE

IF RASTS= 12

DA

Sl.5 Algoritam rada lifta za RASTS Programski to izgleda ovako:

IF (RASTS<0) AND RASTPG=0 THEN 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; IF (RASTS>0) AND RASTPD=0

PROGRAM ZA UPRAVLJENJE RADOM LIFTA


THEN 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 znai da nemamo nikakvih poziva iz kabine lifta i u tom sluaju ponovo imamo tri novonastale situacije a) RASTPG>RASTPD, to znai da poziv koji poziva lift u smjeru ka dole ima prioritet i lift treba prvo njega da izvrava. b) RASTPG<RASPD, to znai da poziv koji poziva lift u smeru ka gore ima prioritet i lift treba prvo njega da izvrava c) RASTPG=0 ili RASPD=0, to znai da je lift stigao do eljenog poziva i da mora stati. Program za sluaj pod (a) izgleda ovako:
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;

Program za sluaj pod (b) izgleda ovako:


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;

Algoritam za to izgleda ovako

PROGRAM ZA UPRAVLJENJE RADOM LIFTA

NE

IF RASTS= 12

DA IF ABS(RASTPG)> ABS(RASTPD) MOTOR= FALSE GORE= FALSE DOLE= FALSE

NE

DA

IF RASTPD= 0

DA

NE MOTOR= TRUE GORE= TRUE DOLE= FALSE MOTOR= TRUE GORE= FALSE DOLE= TRUE

NE

IF RASTPD> 0

DA

IF RASTPG= 12 V IF RASTPD= 12

NE

DA

STOP

Sl.6 Algoritam za situaciju pod (a)

NE

IF RASTS= 12

DA MOTOR= FALSE GORE= FALSE DOLE= FALSE IF ABS(RASTPG)> ABS(RASTPD)

DA

IF RASTPG= 0

NE

NE MOTOR= TRUE GORE= FALSE DOLE= TRUE NE MOTOR= TRUE GORE= TRUE DOLE= FALSE

DA

IF RASTPG> 0

IF RASTPG= 12 V IF RASTPD= 12

DA

STOP

Sl.7 Algoritam za situaciju pod (b) 8

PROGRAM ZA UPRAVLJENJE RADOM LIFTA


Sa ovim gore navedenim nisu reeni svi problemi vezani za izradu programa za lift. Ostaje nam jo da rijeimo problem animiranja kretanja kabine, otvaranja i zatvaranja vrata, ukljuenje i iskljuenje 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 karakteristine dijelove programa. Animiranje kretanja kabine: Animiranje e mo izvriti tako to e mo uvesti jednu novu unutarnju promjenljivu i dati joj ime POLK kao skraenice za poloaj 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>-70 THEN 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 THEN VRATAZ:=FALSE;

PROGRAM ZA UPRAVLJENJE RADOM LIFTA


END_IF;

A prikazivanje poloaja na kom se nalazi trenutno lift je rijeeno ovako:


IF POL>0 AND POL<0.5 THEN 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 rijeen u programskom jeziku ST, pomou programskog paketa CodeSys, i njego itav kod je naveden dole, izvorno kako je i napisan. ZAKLJUAK: Kroz primer ovog zadatka dat je saet prikaz postupka reavanja sloenijih problema koji se na relativno jednostavan i lak nain rjeavaju primenom PLC_a, to donosi znaajne utede kako u vremenu samog projektovanja, tako i u ukupnoj cijeni konanog proizvoda. Kada bi se uzele u obzir i mogue modifikacije koje na veoma lak i pristupaan nain moemo izvriti mijenjanjem samo programa onda se tek dolazi do pravih prednosti koritenja PLC u industrijskom upravljanju.

PROGRAM PLC_PRG

10

PROGRAM ZA UPRAVLJENJE RADOM LIFTA


VAR RASTPD:REAL:=12; (* NAJMANJA UDALJENOST POZIVA ZA DOLE ODTRENUTNOG POLOZAJA KABINE12 JE ZADANO KAO NEMOGUCE*) RASTPG:REAL:=12;(* NAJMANJA UDALJENOST POZIVA ZA GORE ODTRENUTNOG POLOZAJA KABINE12 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; POLVD3: REAL;

11

PROGRAM ZA UPRAVLJENJE RADOM LIFTA


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 OR G0=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 OR S0=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); END_IF;

12

PROGRAM ZA UPRAVLJENJE RADOM LIFTA


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))) THEN RASTS:=(POL-3);

13

PROGRAM ZA UPRAVLJENJE RADOM LIFTA


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=0 THEN 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_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; (*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; END_IF;

14

PROGRAM ZA UPRAVLJENJE RADOM LIFTA


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 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 (*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; (*KADA SU VRATA OTVORENA CEKAMO 5 SEKUNDI I ZATVARAMO IH*)

15

PROGRAM ZA UPRAVLJENJE RADOM LIFTA


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) THEN POLVL7:=POLVL7-0.5; POLVD7:=-POLVL7;

16

PROGRAM ZA UPRAVLJENJE RADOM LIFTA


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.5 THEN 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.5 THEN 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.5 THEN 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 THEN SPRAT0:=TRUE; SPRAT1:=TRUE; SPRAT2:=TRUE; SPRAT3:=FALSE; SPRAT4:=TRUE; SPRAT5:=TRUE; SPRAT6:=TRUE; SPRAT7:=TRUE; SPRAT8:=TRUE; SPRAT9:=TRUE; SPRAT10:=TRUE;

17

PROGRAM ZA UPRAVLJENJE RADOM LIFTA


ELSIF POL>3.5 AND POL <4.5 THEN 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.5 THEN 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.5 THEN 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.5 THEN 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.5 THEN 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.5 THEN 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.5 THEN 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>-70 THEN 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 THEN VRATAZ:=FALSE; END_IF; (*KRAJ PROGRAMA LIFTA*)

Koritena literatura: 1. S.Odri, M.Hajdukovi;Programski jezici za programabilne kontrolere, NEURON, Tehnika serija, N.Sad, 1999. 2. Goran Milii, PROGRAMABILNI LOGIKI KONTROLERI, skripta FSB Zagreb,2000

18

You might also like