• Rezultati Niso Bili Najdeni

5. Izdelava projekta

5.3 Programiranje PLK-ja

5.3.2 Glavna sekvenca

Glavna sekvenca programa je sestavljena iz več korakov. Ko se pogoji trenutnega koraka izpolnijo, program stopi v naslednji korak. Program je pred pričetkom delovanja v koraku 0.

Za pričetek delovanja sekvence so potrebni trije pogoji. Prvi pogoj se izpolni, ko na digitalni vhod krmilnik dobi prožilni signal TM-ja. Drugi in tretji pogoj sta stanja povezave TCP/IP med krmilnikom in kamero ter bazo podatkov. Program se postavi v korak 1, ko se izpolnijo vsi trije pogoji. V prvem koraku se v oznake (angl. tag), v katere shranimo podatek o vrednosti QR-kode, vpišejo ASCII znaki 0. ASCII znak 0 prestavlja prazen znak. S tem zagotovimo, da so informacije, ki jih kasneje zapišemo v iste oznake, res informacije trenutnega izdelka.

Informacija, ki jo prejmemo, se zapiše le v eno oznako, vendar informacijo v oznaki kasneje nekoliko obdelamo in zapišemo v druge oznake. Program gre v naslednji korak, ko zagotovimo, da so oznake prazne. V tem koraku na digitalni vhod kamere pošljemo prožilni signal in se postavimo v korak 20. Potek je prikazan na sliki 29.

Slika 29: Začetek sekvence

45 Po poslanem prožilnem signalu kamera zajame in obdela sliko. Če je bil izdelek v embalaži, na vhod krmilnika prejmemo logično 1, v oznako pa se zapiše vrednost QR-kode. V koraku 20 sta za nadaljevanje sekvence dva pogoja. Prvi pogoj je, da smo na vhod dobili logično 1. Drugi pogoj pa je, da so se v oznako z informacijo o vrednosti kode zapisali znaki. Če sta oba pogoja izpolnjena, program izklopi prožilni signal in gre v korak 30.

V koraku 20 je nastavljen tudi časovnik z zakasnitvijo vklopa. Če se pogoja nista izpolnila, časovnik po 500 ms na svoj izhod pošlje signal. S tem program stopi v korak konec sekvence in sporoči, da kamera na sliki ni našla izdelka v embalaži (slika 30).

Slika 30: Pregled informacije kamere

V koraku 30 PLK preko TCP/IP-ja pošlje vrednost QR-kode v bazo podatkov in stopi v korak 40. V koraku 40 program čaka, da se pošiljanje izvede. Ko so podatki poslani, gre program v korak 50. V koraku 50 program čaka na odgovor baze podatkov. Če informacija kode obstaja v bazi, bomo iz baze dobili sporočilo OK, ki se zapiše v oznako. Baza pošlje sporočilo NOK v primeru, da informacije ni v bazi podatkov. Tu sledi zadnja odločitev programa. V primeru, da je baza odgovorila z OK, gre program v korak 60, če pa je odgovorila z NOK, zaključimo sekvenco in sporočimo, da je koda neveljavna (slika 31).

V koraku 60 vse oznake, ki jih uporabljamo za sporočanje, da je izdelek dober, postavimo na logično 1. Na digitalni izhod, ki je povezan z digitalnim vhodom TM-ja, za 100 ms pošljemo logično 1 (slika 32). S tem TM-ju sporočimo, da je izdelek dober in da naj nadaljuje z delovanjem.

46

Slika 31: Pregled informaciji baze podatkov

Slika 32: Konec sekvence

Za povezavo TCP/IP s kamero in z bazo podatkov uporabljamo komunikacijski blok TCON (slika 33). Blok TCON ima tri različne vhode in štiri izhode.

47

Slika 33: Blok TCON

Vhodi:

• REQ: vzpostavi povezavo, ko na vhod dobi logično 1,

• ID: unikatna identifikacijska številka povezave. Identifikacijska številka se ujema z identifikacijsko številko podatkovnega bloka CONNECT,

• CONNECT: kazalec na nastavitve povezave (slika 34).

Izhodi:

• DONE: statusni parameter. V primeru, da je enak nič, se povezava še ni začela ali pa se še izvaja. Povezava je vzpostavljena, ko je na izhodu logična 1,

• BUSY: statusni parameter. V primeru, da je enak nič, se povezovanje še ni začelo ali pa je že končano. Povezovanje se izvaja, ko je na izhodu logična 1,

• ERROR: statusni parameter. V primeru, da je enak nič, na povezavi ni napak. Izhod je enak 1, ko pride do napake,

• status: sporoči trenuten status povezave [12].

Bloku določimo še dodatne nastavitve. Nastavitve odpremo s klikom škatle z orodjem na bloku TCON (slika 33). V bloku TCON se odpre okno povezava (slika 34). V nastavitvah je za partnerja treba določiti nedoločeno napravo. S to nastavitvijo krmilniku sporočimo, da se lahko poveže s katero koli napravo. Bloku sporočimo IP-naslov naprave, s katero se povezuje, in določimo vrsto povezave. Vrsta povezave je v obeh primerih uporabe tega bloka TCP. IP-naslova naprav in identifikacijski številki (ID) blokov pa sta si različni. ID številka mora biti unikatna za vsak komunikacijski blok, ki ga uporabljamo v projektu. PLK je zadolžen za ohranjanje povezave. V nastavitvah določimo, na katera vrata naj se povežemo. V primeru kamere so to vrata 2120 (slika 24), v bazo podatkov pa se povezujemo prek vrat 9000. Po končani nastavitvi se avtomatsko ustvari podatkovni blok na vhodu CONNECT.

48

Slika 34: Nastavitev povezave TCP/IP

Za vzpostavitev povezave je na vhod Req povezan globalni marker ura_1Hz. Markerju se periodično izmenjuje vrednost iz logične 1 na logično 0 in obratno. Marker ura_1Hz deluje s frekvenco 1 Hz, zato se perioda zamenja vsako sekundo. S tem dosežemo, da se PLK konstantno poskuša povezati s strežnikom. V primeru, da povezave ni, bo krmilnik vzpostavil povezavo. Blok TCON signal na vhodu Req ignorira, če je povezava že vzpostavljena.

Za prejemanje podatkov uporabimo blok TRCV (slika 35). Blok TRCV se uporablja pri povezavi s kamero in bazo podatkov.

Slika 35: Blok TRCV

49 Blok TRCV ima pet vhodov in pet izhodov.

Vhodi:

• EN_R: dokler je na vhodu logična 1, bloku dovolimo prejemanje podatkov,

• ID: identifikacijska številka povezave. Identifikacijska številka mora biti ista kot številka, ki smo jo določili pri bloku TCON,

• LEN: dolžina sprejetega podatka v bajtih. Uporabimo vrednost 0, kar pomeni, da uporabljamo optimiziran dostop, in za prejeto dolžino ni treba skrbeti,

• ADHOC: v primeru, da uporabljamo TCP protokol, mora biti ta nastavitev nastavljena na TRUE,

• DATA: kazalec na oznako, kjer hranimo podatke.

Izhodi:

• NDR: statusni parameter. V primeru, da je enak nič, se prejemanje podatkov še ni začelo ali pa se prejemanje dogaja. Izhod je enak 1, ko prejmemo nove podatke,

• BUSY: statusni parameter. V primeru, da je enak nič, se prenos še ni začel ali pa je že končan. Prenos se izvaja, ko je na izhodu logična 1,

• ERROR: statusni parameter. V primeru, da je enak nič, na povezavi ni napak. Izhod je enak 1, ko pride do napake,

• STATUS: sporoči trenuten status bloka,

• RCVD_LEN: število prejetih znakov [12].

Pri uporabi tega bloka smo naleteli na težave. Ker smo podatke shranjevali v oznako podatkovnega tipa seznam znakov (ang. array of char), smo morali določiti dolžino seznama.

Dolžina seznama je 50 znakov. Problem, do katerega smo prišli, je, da je ta oznaka poleg podatka o vrednosti QR-kode ali odgovora baze podatkov na koncu vsebovala še presledke.

Problem smo rešili tako, da smo vrednost iz oznake tipa niz znakov prenesli v oznako tipa niz znakov (ang. String). Za prenos smo uporabili blok znak v niz znakov (ang. Chars to String), ki je prikazan na sliki 36.

Slika 36: Blok znak v niz znakov

50

Blok znak v niz znakov ima tri vhode in en izhod.

Vhodi:

• Chars: na vhod pošljemo seznam znakov, ki ga želimo pretvoriti,

• pChars: mesto, na katerem se znaki začnejo pretvarjati,

• CNT: število znakov, ki jih želimo pretvorit. Za pretvorbo vseh znakov je ta vrednost 0.

Izhod:

• STRG: kazalec na oznako tipa niz znakov, v katero shranimo pretvorjen seznam znakov [12].

Po prenosu seznama znakov smo za brisanje presledkov v oznaki spisali preprosto funkcijo (slika 37). Funkcija vsebuje For zanko, if stavek in ukaz izbriši (ang. delete). For zanka se sprehaja po oznaki tipa niz znakov. Ko je znak enak presledku, se izvede if stavek. V if stavku je ukaz izbriši, ki izbriše znak na trenutnem mestu in ga nadomesti z ASCII znakom 0. Po koncu funkcije imamo v oznaki le še informacijo, ki smo jo prejeli.

Slika 37: Brisanje presledkov

Blok TSEND (Slika 38) se uporablja le pri povezavi PLK-ja z bazo podatkov. Blok TSEND se uporablja za pošiljanje podatkov preko vzpostavljene povezave. Blok TSEND ima štiri vhode in štiri izhode.

Vhodi:

• REQ: pošiljanje se začne, ko na vhod pošljemo logično 1,

• ID: identifikacijska številka povezave. Ta številka mora biti ista kot številka, ki smo jo določili pri bloku TCON (slika 34),

• LEN: število znakov, ki jih pošiljamo,

• DATA: kazalec na oznako, v kateri so shranjeni podatki, ki jih pošiljamo.

Izhodi:

• DONE: statusni parameter. V primeru, da je enak nič, se povezava še ni začela ali pa se še izvaja. Povezava je vzpostavljena, ko je na izhodu logična 1,

51

• BUSY: statusni parameter. V primeru, da je enak nič, se povezovanje še ni začelo ali pa je že končano. Povezovanje izvaja, ko je na izhodu logična 1,

• ERROR: statusni parameter. V primeru, da je enak nič, na povezavi ni napak. Izhod je enak 1, ko pride do napake,

• status: sporoči trenuten status povezave [12].

Slika 38: Blok TSEND