Saltatu nabigazioa

Tenporizadoreak

Esku bat kronometro bat eusten
StefanPohl. Eine Stoppuhr von Hanhart (Jabari publikoa)

Prozesu askotan denbora kontrolatu behar dugu. Adibidez, beharrezkoa izan daiteke pieza bat labean debora jakin bat egotea edo beste lan bat egiteko denbora emateko mugimendu bat atzeratu behar dela. Behar guzti horietarako PLC-ek tenporizadoreak erabiltzen dituzte. Esan daiteke tenporizadore bat kronometro bat dela eta kronometro horren bitartez kontrolatu dezakegula aldez ezarritako denbora jakin bat pasa den ala ez.

Baina PLC-ek erabilitako tenporizadoreek ez dute oztopatzen prozesuaren funtzionamendu normala, hau da behin kronometroa martxan jarri dela, ziklo bakoitzean begiratuko du ea aurrezarritako denbora igaro den ala ez eta eskailera-maila horren konexioa edo deskonexioa atzeratuko du denbora pasa arte.

Bi atzerapen motak erakusten duen marrazkia. Lehenengoan konexioa atzeratzen da denbora jakin bat eta bigarrengoan deskonexioa
José Miguel Andonegi. Konexio eta deskonexio atzerapena (CC BY-SA)

Arduinorekin lan egiten ohituta bazaude, agian inoiz erabili duzu delay() funtzioa atzerapen bat sortzeko, baina funtzio honen erabilera guztiz debekatu dago PLC baten programaketan, Arduinoren arreta osoa hartzen baitu eta ezarritako denbora pasa arte ez du ezer egiten: ez du informaziorik jasotzen, ez ditu aztertzen jarritako baldintzak eta ez ditu aldatzen irteeren balioak. Denbora horretan, mundu errealean gauza asko gerta daitezke (langileak botoi bat sakatu, ate bat ireki, ibiltarte amaiera batera iritsi) eta automata ez du horren berri izango. Ondorioa: pieza akasdunak edo, kasurik okerrenean, istripuak gertatu daitezke.

plclib hainbat funtzio eskaintzen ditu tenporizadoreekin lan egiteko baina oinarrizkoak bai hauek dira:

  • Pizteko atzerapena sortzeko: timerOn
  • Itzaltzeko atzerapena sortzeko: timerOff

Bi kasuetan, bi parametro pasa behar dizkiegu:

  • Igaro den denbora kontatzeko erabiliko dugun aldagaia: unsigned long motakoa.
  • Tenporizadorearen iraupena: unsigned long motakoa (milisegundotan).

Hona hemen adibide txiki bat, plclib liburutegiaren webgunetik hartua:

unsigned long tenp_1 = 0; // 1. tenporizadorearen denbora gordetzeko aldagaia
unsigned long tenp_2 = 0; // 2. tenporizadorearen denbora gordetzeko aldagaia
void setup()
{
   setupPLC(); // Sarrera eta irteerak prestatzeko
}

void loop()
{
   in(X0);                // X0 sarreraren egoera irakurri
   timerOn(tenp_1, 2000); // 2 segundo itxaron pizteko
   out(Y0);               // Y0 irteeran egoera idatzi

   in(X1);                // X1 sarreraren egoera irakurri
   timerOn(tenp_2, 4000); // 4 segundo itxaron itzaltzeko
   out(Y1);               // Y1 irteeran egoera idatzi
}