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.
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
}