Preskoči na sadržaj
FORTRONIQ

MODUL 4 · UPOZNAVANJE I OSNOVE RADA U ROBOTSKOM SIMULACIJSKOM OKRUŽENJU

Nastavna jedinica 4.4

Korištenje baza podataka u simulacijskom okruženju

Kada podaci o pozicijama, masama i kutovima stoje upisani među naredbama, svaka izmjena proizvoda znači ulazak u kod. Odvajanjem podataka u zasebnu datoteku program prestaje ovisiti o tome što se toga dana izrađuje: kod ostaje isti, a mijenja se samo sadržaj datoteke koju robot čita na početku ciklusa.

Moći ću:
  • obrazložiti zašto se podaci zadatka odvajaju od programskog koda
  • opisati ustroj jednostavne baze u tekstualnoj datoteci sa stupcima i graničnikom
  • napisati slijed otvaranja, čitanja redak po redak i zatvaranja datoteke
  • razdvojiti redak po graničniku i pretvoriti polja u odgovarajuće tipove
  • provjeriti ispravnost pročitanog retka i odrediti ponašanje pri neispravnom zapisu

Zašto podatke odvajamo od koda

Program koji u naredbama nosi konkretne brojeve radi točno jedan posao. Promjena visine kutije traži otvaranje programa, pronalaženje svih mjesta na kojima se ta visina pojavljuje i ispravak svakoga od njih. Svaki takav zahvat nosi rizik: dovoljno je propustiti jedno mjesto pa da robot na posljednjem sloju udari u složaj.

Odvajanje podataka od koda rješava to na razini ustroja. Program zna kako se slaže, a datoteka zna što se slaže i gdje. Prednosti su tri. Izmjenu smije napraviti tehnolog koji ne poznaje robotski jezik. Isti program poslužuje više proizvoda. Povijest izmjena vidljiva je u datoteci, a ne skrivena u kodu.

Podaci u koduPodaci u datoteci
Promjena proizvodaizmjena programaizmjena datoteke
Tko smije mijenjatiprogramer robotatehnolog ili pripremljač
Rizik pri izmjenivelik, podaci su na više mjestamanji, podatak postoji jednom
Više izvedbi istodobnoviše inačica programajedan program, više datoteka
Dodatna obvezanema jeprovjera ispravnosti pročitanog

Oblik jednostavne baze

Za potrebe robotske ćelije baza podataka ne mora biti poslužiteljski sustav. Dovoljna je tekstualna datoteka u kojoj je svaki redak jedan zapis, a polja su odvojena graničnikom — točkom sa zarezom, zarezom ili znakom tabulatora. Prvi redak obično nosi nazive stupaca, a redci koji počinju posebnim znakom smatraju se komentarom.

StupacTipZnačenjePrimjer
oznakaznakovni nizoznaka pozicije ili obratkaPOZ_A12
xrealni brojkoordinata u korisničkom sustavu, mm412.5
yrealni brojkoordinata u korisničkom sustavu, mm-238.0
zrealni brojvisina hvatanja, mm96.0
kutrealni brojzakret oko okomite osi, stupnjevi90.0
masarealni brojmasa obratka, kg2.4
# oznaka;x;y;z;kut;masa
POZ_A01;412.5;-238.0;96.0;0.0;2.4
POZ_A02;632.5;-238.0;96.0;0.0;2.4
POZ_A03;852.5;-238.0;96.0;90.0;2.4
POZ_B01;412.5;-78.0;96.0;0.0;3.1

Takav zapis ima dvije velike prednosti. Čitljiv je bez posebnog programa, pa se otvara i provjerava u bilo kojem uređivaču teksta, i lako nastaje iz proračunske tablice, čime priprema podataka ostaje na mjestu na kojem se ionako radi.

Otvaranje, čitanje i zatvaranje

Rad s datotekom uvijek ima isti slijed: otvoriti, čitati dok ima redaka, zatvoriti. Otvaranje vraća oznaku kojom se datoteci kasnije pristupa. Čitanje vraća jedan redak i pomiče se na sljedeći. Kada redaka više nema, čitanje javlja kraj datoteke. Zatvaranje oslobađa datoteku, i ono se nikada ne izostavlja.

VAR iodev baza;
VAR string redak;
VAR num ukupno := 0;

Open "HOME:/podaci/pozicije.csv", baza \Read;
redak := ReadStr(baza);
WHILE redak <> EOF DO
    IF StrPart(redak, 1, 1) <> "#" THEN
        obradiRedak redak;
        ukupno := ukupno + 1;
    ENDIF
    redak := ReadStr(baza);
ENDWHILE
Close baza;
TPWrite "Učitano zapisa: " \Num := ukupno;

Pažnja

Datoteku zatvorite i kada obrada završi pogreškom. Otvorena datoteka zauzima resurs kontrolera, a pri ponovnom pokretanju programa drugo otvaranje iste datoteke može biti odbijeno. U jezicima koji podržavaju obradu pogreške, zatvaranje ide u dio koji se izvodi u svakom slučaju.

Razdvajanje i pretvorba tipova

Pročitani redak je niz znakova. Da bi se iz njega dobile brojčane vrijednosti, redak se najprije razdvoji po graničniku na polja, a zatim se svako polje pretvori u traženi tip. Pretvorba je korak na kojem se najčešće otkrije da podatak nije ono što se očekivalo: umjesto broja stoji prazno polje, decimalni zarez umjesto točke ili tekst zaostao iz proračunske tablice.

PROC obradiRedak(string redak)
    VAR string polje{6};
    VAR num brojPolja;
    VAR bool ok;
    VAR num x;
    VAR num y;
    VAR num z;
    brojPolja := Razdvoji(redak, ";", polje);
    IF brojPolja <> 6 THEN
        TPWrite "Neispravan broj polja: " + redak;
        RETURN;
    ENDIF
    ok := StrToVal(polje{2}, x) AND StrToVal(polje{3}, y)
          AND StrToVal(polje{4}, z);
    IF NOT ok THEN
        TPWrite "Polje nije broj: " + redak;
        RETURN;
    ENDIF
    spremiPoziciju polje{1}, x, y, z;
ENDPROC

Pretvorba se nikada ne radi bez provjere uspjeha. Naredba koja niz pretvara u broj vraća i podatak o tome je li pretvorba uspjela; taj se podatak mora ispitati. Kod koji pretpostavlja da je pretvorba uspjela nastavlja rad s neodređenom vrijednošću, a robot tada odlazi na točku koja nije nigdje zapisana.

Provjera ispravnosti i neispravan redak

Ispravnost se provjerava u tri koraka. Prvi je oblik: ima li redak očekivani broj polja i jesu li brojčana polja doista brojevi. Drugi je raspon: nalaze li se koordinate unutar radnog prostora i je li masa manja od nosivosti. Treći je smisao u odnosu na ostale zapise: ne ponavlja li se ista oznaka, ne preklapaju li se dvije pozicije.

Vrsta pogreškeKako se prepoznajeRazuman postupak
prazan redakduljina retka je nulapreskočiti bez poruke
komentarprvi znak je oznaka komentarapreskočiti bez poruke
krivi broj poljarazdvajanje vraća drugi brojzapisati u dnevnik i preskočiti
polje nije brojpretvorba javlja neuspjehzapisati u dnevnik i preskočiti
izvan radnog prostorakoordinata izvan granicapreskočiti i upozoriti operatera
masa iznad nosivostiusporedba s dopuštenom masomzaustaviti ciklus

Odluka o ponašanju pri neispravnom retku dio je zadatka, a ne stvar ukusa. Za paletizaciju je razumno preskočiti neispravan zapis, nastaviti s ostalima i na kraju javiti koliko ih je preskočeno. Za zavarivanje je razumno zaustaviti ciklus, jer preskočeni šav znači neispravan proizvod koji se ne vidi. U oba se slučaja u dnevnik zapisuje redni broj retka i njegov sadržaj.

Primjer

Datoteka ima 48 redaka. Prvi je zaglavlje, dva su prazna, jedan ima pet polja umjesto šest, a u jednom je masa 12 kg uz nosivost od 10 kg. Program učita 43 ispravna zapisa, dva preskoči uz zapis u dnevnik i zaustavi se na retku s prekoračenom masom.

Koliko je zapisa u datoteci ispravno?Računski prikaz

Prikaz razvrstava retke datoteke i računa koliko zapisa ostaje za izvođenje. Zaglavlje, prazni redci i komentari ne broje se u pogreške; ostali neispravni zapisi preskaču se uz zapis u dnevnik.

Ispravnih zapisa—
Preskočenih zapisa—
Udio ispravnih—%

Ključni pojmovi

PojamZnačenje
GraničnikZnak koji u retku razdvaja polja, najčešće točka sa zarezom, zarez ili tabulator.
ZapisJedan redak datoteke koji opisuje jednu poziciju ili jedan obradak.
ZaglavljePrvi redak s nazivima stupaca; ne obrađuje se kao podatak.
Pretvorba tipaPostupak kojim se znakovni niz pretvara u broj ili logičku vrijednost.
Kraj datotekeOznaka koju čitanje vraća kada više nema redaka.
DnevnikZapis o preskočenim i neispravnim redcima, s rednim brojem i sadržajem.

Provjeri se

Kratka provjera prije prelaska na sljedeću jedinicu. Odgovor se potvrđuje klikom, a obrazloženje se prikazuje odmah.

Pitanje 1 od 3

Glavna prednost odvajanja podataka od programskog koda jest:

Program ostaje nepromijenjen, a mijenja se sadržaj datoteke koju robot čita.

Pitanje 2 od 3

Nakon razdvajanja retka po graničniku polja su:

Redak je niz znakova, pa su i polja znakovni nizovi; pretvorba u broj je zaseban korak.

Pitanje 3 od 3

Redak s masom većom od nosivosti robota razumno je:

Prekoračenje nosivosti ugrožava robot i teret, pa se ciklus zaustavlja, a ne nastavlja.

Odgovoreno 0 od 3.