CoDeSys
Siemens S7-1200 viide Siemens LOGO! viide Automatiseerimise viide Mehhatroonikaseadmete viide Pneumoautomaatika viide

Binaarloogika funktsioonid

Funktsionaalset üksust, milles teostatakse binaarloogika põhioperatsioone (nt. Boole loogikatehteid), nimetatakse loogikablokiks või ka lüliks. Graafiliselt kujutatakse lüli sisendite ja väljunditega ristkülikuna. Binaarloogika põhioperatsioonide teostust saab kirjeldada ka erinevat tüüpi kontaktide abil.

Tabelis 4.1 on esitatud põhilised binaarloogika elemendid FBD, LD ja ST keeles, millest saab koostada binaarloogika funktsioone. FBD keeles lisatakse eituse puhul ring sisendi juurde enne kasti. Väljundi jaoks kasutatakse FBD keeles pikemat joont, mille lõppu kirjutadakse muutuja nime. See lisatakse ikooni VAR abil.

FBD LD ST Nimetus
AND AND AND NING
OR OR OR VÕI
NOT NOT NOT EI
Väljund Väljund := Väljund

NING- ja VÕI-lülid

NING-lüli

Joonisel 4.1 on kujutatud binaarloogika NING-lüli (tehe) FBD, ST ja LD keeles. Nagu joonisel 4.1 esitatud olekutabelist näeb on NING-lüli väljundis signaal väärtusega loogiline 1, kui selle kõikides sisendites on signaal väärtusega loogiline 1. Väljundis on signaal loogiline 0 isegi siis kui ainult ühes sisendis on signaal loogiline 0. NING-lüli võib omada rohkem kui kaht sisendit.

Olekutabel FBD
Sisend1 Sisend2 Valjund1
0 0 0
0 1 0
1 0 0
1 1 1
NING FBD
ST LD
//Ning tehe ST keeles
Valjund1 := Sisend1 AND Sisend2;
NING LD

Joonisel 4.1 esitatud binaarloogika NING-lüli võib lugeda järgmiselt:
  Muutuja Valjund1 on aktiivne kui muutuja Sisend1 väljastab signaali väärtusega loogiline 1 NING muutuja Sisend2 on ka aktiivne (väljastab signaali väärtusega loogiline 1).

Järgnevalt on esitatud CoDeSys koostatud NING-lüli näite failid, mis saab laadida alla ja testida arvutis.

VÕI-lüli

Joonisel 4.2 on kujutatud binaarloogika VÕI-lüli (tehte) LD, ST ja FBD keeles. Nagu joonisel 4.2 esitatud olekutabelist näeb on VÕI-lüli väljundis signaal väärtusega loogiline 1, kui vähemalt ühes VÕI-lüli sisendis on signaal väärtusega loogiline 1. Väljundis on signaal loogiline 0, kui kõikides sisendites on signaal loogiline 0. VÕI-lüli võib omada rohkem kui kaht sisendit.

Olekutabel LD
Sisend1 Sisend2 Valjund1
0 0 0
0 1 1
1 0 1
1 1 1
VÕI LD
ST FBD
//Või tehe ST keeles
Valjund1 := Sisend1 OR Sisend2;
OR FBD

Joonisel 4.2 esitatud binaarloogika VÕI-lüli võib lugeda järgmiselt:
  Muutuja Valjund1 on aktiivne kui muutuja Sisend1 väljastab signaali väärtusega loogiline 1 VÕI muutuja Sisend2 on ka aktiivne (väljastab signaali väärtusega loogiline 1).

Järgnevalt on esitatud CoDeSys koostatud VÕI-lüli näite failid, mis saab laadida alla ja testida arvutis.

NING- ja VÕI-lüli kombinatsioon

NING- ja VÕI-lülidest saab koostada keerukamaid loogikatehteid nagu NING-VÕI- ja VÕI-NING-loogikaühendused [viide]. NING-VÕI-loogikaühenduses on NING-tehte väljund ühendatud VÕI-tehte sisendiga. VÕI-NING-loogikaühenduse puhul on vastupidi. Joonisel 4.3 on kujutatud antud loogikaühendused LD ja ST keeles.

LD
NING-VÕI-tehe VÕI-NING-tehe
ST
//NING-VÕI-Loogikalülitus
Valjund1 := (Sisend1 AND Sisend2) OR
        (Sisend3 AND Sisend4);
//VÕI-NING-loogikalülitus
Valjund1 := (Sisend1 OR Sisend2) AND
        (Sisend3 OR Sisend4);

NING-VÕI-tehte tulemuseks on signaal loogiline 1, kui vähemalt üks NING-lüli väljundsignaal on loogiline 1. Näiteks peavad muutujad Sisend1 ja Sisend2 olema aktiivsed, et muutuja Väljund1 oleks ka aktiivne. VÕI-NING-tehte tulemuseks on signaal loogiline 1, kui mõlema VÕI-lüli tulemuseks on signaal loogiline 1. Näiteks kui muutujad Sisend1 ja Sisend4 on aktiivsed, siis on ka muutuja Väljund1 aktiivne.

IF tingimuslause

//IF tingimuslause põhi osad
IF (*Tingimus 1*) THEN
    (*Programmi lõik 1*);
ELSIF (*Tingimus 2*) THEN
    (*Programmi lõik 2*);
ELSE
    (*Programmi lõik 3*);
END_IF;

IF tingimuslauset kasutatakse kui soovitakse, et ST keeles koostatud programmi lõik käivitub ainult siis kui mingi kindel tingimus on täidetud. Joonisel 4.4 on asitatud IF tingimuslause ehitus. IF tingimuslause tingimused peavad olema sellised, mis annad tulemus(te)na välja vastuse TÕENE (loogiline signaal 1) või VÄÄR (loogiline signaal 0). Programmi lõigud võivad sisaldada koodi/käske.

Järgnevalt on seletatud lahti IF tingimuslause tööpõhimõte.
Kui IF juures olev tingimus 1 on TÕENE, siis täidetakse IF rea järel olevat programmi lõiku 1. Ülejäänud programmi lõigud jäetakse vahele kuna nendest hüpatakse üle (liigutatakse kohe END_IF juurde).
ELSEIF rea järel olevat programmi lõiku 2 täidetakse kui IF juures olev tingimuse 1 on VÄÄR aga ELSIF juures olev tingimus 2 on TÕENE.
ELSE rea järel olevat programmi lõiku 3 täidetakse kui IF ja ELSIF juures olevad tingimused on VÄÄRAD.
Kui IF ja ELSIF juures olevad tingimused (mõlemad) on TÕESED, siis täidetakse ainult IF lause järel olevat programmi lõiku 1. ELSIF järel olevat programmi lõiku 2 ei täideta, kuna see jäetakse vahele. Seega tuleks teha tingimused sellised, mis välistaksid seisundit, kus kõik tingimused on TÕESED.

Kui lisatingimusi on vaja rohkem kui üks, siis võib lisada juurde teisi ELSIF-e. Lisatavad ELSIF osad peavad olema eespool kui ELSE. Vastasel juhul neid ei täideta, kuna programmis hüpatakse neist üle. Kui lisatingimusi ei ole vaja, siis võib ELSIF osa ära jätta. Ka ELSE osa võib ära jätta kui seda ei ole vaja.

//Üks IF tingimuslause teise sees
IF (*Tingimus 1*) THEN
    (*Programmi lõik 1 osa 1*);
    IF (*Tingimus 2*) THEN
        (*Programmi lõik 2*);
    END_IF;
    (*Programmi lõik 1 osa 2*);
ELSE
    (*Programmi lõik 3*);
END_IF;

Ühe IF tingimuslause sisse võib panna ka teise IF tingimuslause (joonis 4.5). Kuid siin tuleb vaadata et END_IF pannakse õigesse kohta. Vastasel juhul ei pruugi esimene IF tingimuslause töötada nii nagu vaja.

Joonisel 4.6 on esitatud NING- ja VÕI-lülid IF tingimuslause abil.

NING-tehe
//NING-tehe IF tingimuslause abil
IF Sisend1 AND Sisend2 THEN
(*Muutuja Valjund1 saab loogilise signaali 1, kui Sisend1 ja Sisend2 on aktiivsed*)
    Valjund1 := TRUE;
ELSE
(*Muutuja Valjund1 saab loogilise signaali 0, kui vähemalt üks sisendmuutujatest omab loogilist signaali 0*)
    Valjund1 := FALSE;
END_IF;
VÕI-tehe
//VÕI-tehe IF tingimuslause abil
IF Sisend1 OR Sisend2 THEN
(*Muutuja Valjund1 saab loogilise signaali 1, kui vähemalt üks sisendmuutujatest omab loogilist signaali 1*)
    Valjund1 := TRUE;
ELSE
(*Muutuja Valjund1 saab loogilise signaali 0, kui Sisend1 ja Sisend2 on mitte aktiivsed*)
    Valjund1 := FALSE;
END_IF;

Järgnevalt on esitatud CoDeSys koostatud IF tingimuslause näite failid, mis saab laadida alla ja testida arvutis.

Eitus

Joonisel 4.7 on kujutatud binaarloogika eituse lüli FBD, LD ja ST keeles. Nagu joonisel 4.7 esitatud olekutabelist näeb on eituse väljundis signaal väärtusega loogiline 1, kui selles sisendis on signaal väärtusega loogiline 0. Väljundis on signaal loogiline 0 kui sisendis on signaal loogiline 1. Eitus võimaldab binaarloogikas inverteerida sisendsignaali (operandi või muutuja) väärtust ja edastada saadud tulemuse lüli väljundisse.

Olekutabel FBD
Sisend1 Valjund1
0 1
1 0
Eitus FBD
ST LD
//Eitus ST keeles
Valjund1 := NOT Sisend1;
Eitus LD

Joonisel 4.7 esitatud binaarloogika eitust võib lugeda järgmiselt:
  Muutuja Valjund1 on aktiivne kui muutuja Sisend1 EI OLE aktiivne.

Järgnevalt on esitatud CoDeSys koostatud Eituse näite failid, mis saab laadida alla ja testida arvutis.

Eituse tekitamiseks FBD-s kasutatakse ikooni NOT ja LD-s ikooni NOT. Eituse lisamiseks tuleb valida sobiv joon/element ja siis vajutada vastava ikooni peale.

Joonisel 4.8 on esitatud eitust sisaldav NING-lüli FBD, LD ja ST keeles. Nagu näha ei pea kasutama eitust eraldi. Seda saab kasutada teiste loogikalülide või muude funktsioonide juures. FBD keeles võib panna eituse ka NING-lüli sisendi juurde (otse kasti vastu).

FBD LD
Eitus FBD Eitus LD
ST
//Eitus NING-tehte sees
Valjund2 := Sisend1 AND (NOT Sisend2);

Joonisel 4.8 esitatud programmi võib lugeda järgmiselt:
  Muutuja Valjund1 on aktiivne kui muutuja Sisend1 on aktiivne NING muutuja Sisend2 EI OLE aktiivne.

Loogikalüli operatsiooni (tehte) tulemuseks saadud väljundi (signaali) väärtust võib binaarloogika ka inverteerida. Selleks on CoDeSys-s FBD ja LD keeles olemas inverteeritud väljund operatsioon (/) (joonis 4.9). Inverteeritud väljund võtab eespool olevast loogikalüli väljundist tuleva signaali väärtuse vastu, inverteerib selle ja annab saadud tulemuse otse muutujale edasi. Inverteeritud signaal ei kandu kuhugi mujale edasi, kui just vastavat muutujat (Valjund2) ei kasutata kusagil mujal programmis.

FBD LD
Eitus FBD Eitus LD

Joonisel 4.9 esitatud programmi võib lugeda järgmiselt:
  Muutuja Valjund2 on aktiivne kui muutuja Sisend1 EI OLE aktiivne. Muutuja Valjund1 on aktiivne kui muutuja Sisend1 on ka aktiivne.

Ehk siis muutuja Sisend1 signaal kantakse otse edasi muutujasse Valjund1, aga muutujasse Valjund2 inverteeritud kujul.

Eitust saab kasutada ka NING- ja VÕI-lüliga seotud väljundlüli juures (joonis 4.10). Eitusega NING-lüli kutsutakse EI-NING-lüliks (NAND) ja VÕI-lüli EI-VÕI-lüliks (NOR) [viide]. LD keeles tuleb kasutada NING- ja VÕI-lüli lõpus tavalise väljundi asemel (joonised 4.1 ja 4.2) inverteeritud väljundit, et teha neist NAND ja NOR elemendid.

FBD
Eitus FBD Eitus FBD
LD
Eitus LD Eitus FBD
ST
//EI-NING-tehe
Valjund1 := NOT (Sisend1 AND Sisend2);
//EI-VÕI-tehe
Valjund2 := NOT (Sisend3 OR Sisend4);

VÄLISTAV-VÕI-lüli

Joonisel 4.11 on kujutatud binaarloogika VÄLISTAV-VÕI-lüli (VVÕI - XOR) LD, ST ja FBD keeles. Binaarloogika VVÕI-lüli väljundsignaaliks on loogiline 1, kui selle lüli kahe sisendmuutuate signaalid on erineva väärtusega. Kui ühe sisendmuutuja signaal on loogiline 1 ja teise oma on loogiline 0 siis on VVÕI-lüli tulemuseks signaal loogiline 1.

Olekutabel LD
Sisend1 Sisend1 Valjund1
0 0 0
1 0 1
0 1 1
1 1 0
XOR LD
ST LD
//VVÕI-tehe ST keeles
Valjund1 := Sisend1 XOR Sisend2;
XOR FBD

Joonisel 4.11 esitatud binaarloogika VVÕI-lüli võib lugeda järgmiselt:
  Muutuja Valjund1 on aktiivne kui AINULT muutuja Sisend1 on aktiivne VÕI AINULT muutuja Sisend2 on aktiivne.

Järgnevalt on esitatud CoDeSys koostatud VVÕI-lüli näite failid, mis saab laadida alla ja testida arvutis.

VVÕI-lüli võib omada rohkem kui kaht sisendit, seljuhul on VVÕI-lüli tulemuseks signaal loogiline 1, kui signaali loogilist 1 omavate sisendite (muutujate) arv on paaritu.

VVÕI-lüli saab koostada ka NING- ja VÕI-lülidest, kui see puudub programmeerimiskeeles (joonis 4.12).

FBD LD
XOR FBD XOR LD

SR- ja RS-trigerid

SR- ja RS-trigereid kasutatakse lüli sisendisse saabuva lühiajalise signaali oleku (eluea) pikendamiseks. Sisendsignaali väärtus salvestatakse lülis. Trigerid teostavad mälufunktsioone.

SR-triger

Joonisel 4.13 on kujutatud SR-trigerit FBD, LD ja ST keeles. CoDeSys-s tuleb iga uus SR-triger deklareerida vastava POU muutujate deklaratsioonialas. See tähendab et anda nimi. Põhjus on selles, et SR-triger on defineeritud CoDeSys-s kui FB ja see vajab mälu muutujate väärtuste meelespidamiseks. Antud näites näeb SR-trigeri deklaratsioon välja järgmine: SR_Trig1 : SR;.

FBD LD
SR FBD SR LD
ST
//SR-trigeri deklareerimine POU deklaratsioonialal
SR_Trig1 : SR;

//SR-triger ST keeles
SR_Trig1(SET1 := Sisend1, RESET := Sisend2, Q1 => Valjund1);
Signaalide ajadiagramm
Signaalide ajadiagramm

SR-trigeri (joonis 4.13) väljundile Q1 antakse signaal loogiline 0, kui sisendis RESET on signaal loogiline 1 ja sisendis SET1 on signaal loogiline 0. Trigeri olek jääb kestma kuni selle toite sisselülitamiseni (SET1 aktiivseks). Väljundi Q1 signaal muutub loogiliseks 1, kui sisendisse SET1 saabub signaal loogiline 1 sõltumata sellest, milline on sisendi RESET signaal. Sisend SET1 on ülimuslik. Seetõttu kutsutakse SR-trigerit ülimusliku sisselülitamisega trigeriks. Signaali väärtuse muutus sisendis SET1 ei mõjuta väljundit Q1, kui viimase signaal on juba loogiline 1 ning sisendis RESET on signaal loogiline 0.

Järgnevalt on esitatud CoDeSys koostatud SR-trigeri näite failid, mis saab laadida alla ja testida arvutis.

RS-triger

Joonisel 1.14 on kujutatud RS-trigerit FBD, LD ja ST keeles. Ka RS-triger tuleb deklareerida nagu SR-triger vastava POU muutujate deklaratsioonialas. Antud näites näeb RS-trigeri deklaratsioon välja järgmine: RS_Trig1 : RS;.

FBD LD
RS FBD RS LD
ST
//RS-trigeri deklareerimine POU deklaratsioonialal
RS_Trig1 : RS;

//SR-triger ST keeles
RS_Trig1(SET := Sisend3, RESET1 := Sisend4, Q1 => Valjund2);
Signaalide ajadiagramm
Signaalide ajadiagramm

RS-trigeri (joonis 1.14) väljundisse Q1 antakse signaal loogiline 1, kui trigeri sisendisse SET saabub signaal loogiline 1 ja sisendis RESET1 on signaal loogiline 0. See olek jääb kestma kuni trigeri väljalülitamiseni (sisendile RESET1 antakse peale signaal loogiline 1). Sisendi SET signaali väärtuse muutus ei mõjuta väljundit Q1, kui viimase signaal on loogiline 1. Signaali loogiline 1 saabumisel sisendisse RESET1 muutub trigeri väljundi Q1 signaal loogiliseks 0 sõltumata sellest, milline on signaali väärtus sisendis SET. Sisend RESET1 on ülimuslik. Seetõttu kutsutakse RS-trigerit ülimusliku väljalülitamisega trigeriks.

Järgnevalt on esitatud CoDeSys koostatud RS-trigeri näite failid, mis saab laadida alla ja testida arvutis.

Trigerid NING-, VÕI-lüli ja eituse abil

NING- ja VÕI-lülidest ning eitusest saab koostada SR- ja RS-trigeri (joonis 4.15).

FBD
SR FBD RS FBD
LD
SR LD RS LD
ST
//SR-triger
Q_1 := Set1 OR (Q_1 AND NOT(Reset));
//RS-triger
Q_1 := NOT(Reset1) AND (Q_1 OR Set);

SET ja RESET funktsioonid

Operandi/muutuja väärtuse muutusi (ümberlülitusi) saab teha PLC programmi erinevates osades kasutades SET (S) ja RESET (R) funktsioone [viide]. Need funktsioonid võimaldavad lõhkuda SR- ja RS-trigerid erinevateks osadeks tehes eraldi erinevates kohtades muutujate sisse- ja välja-lülitamise operatsioone. Puuduseks on ülevaate kaotamine programmis selle üle, mis tingimustel toimus mingi väljundi väärtuse muutus (trigeri lülitus). Samas saab üht sisendtingimust (signaali üht väärtust) kasutada rohkem kui ühe trigeri väljundi juhtimiseks (joonis 4.16).

FBD LD
Trigeid FBD Trigeid LD

SET ja RESET väljundi tekitamiseks kasutatakse FBD ja LD keeles ikooni Trigeid FBD. Vastava väljundi lisamiseks valida sobiv joon ja siis vajutada nii mitu korda ikooni kuni tekib sobiv väljundfunktsioon.

Järgnevalt on esitatud CoDeSys näidis failis, kus on koostatud RS-triger kasutades SET ja RESET funktsioone. Failid saab laadida alla ja testida arvutis.

(*SET funktsioon ST keeles*)
IF Set_1 THEN
    Q_1 := TRUE;
END_IF;

(*RESET funktsioon ST keeles*)
IF Reset_1 THEN
    Q_1 := FALSE;
END_IF;

ST keeles puuduvad SET ja RESET funktsioonid, kuid neid saab teostada IF tingimuslause abil. Joonisel 4.17 on teostatud SR-triger. Set_1 on sisend, mis muudab väljundi väärtuse üheks. Reset_1 on sisend, mis muudab väljundi väärtuse nulliks. Q_1 on väljund, mis väljastab SET või RESET funktsiooni tulemuse. IF tingimuslausete järjekorra muutmisega saab teha, et SET funktsioon oleks ülemuslik. Praegu jääb peale RESET funktsioon.

Tabelis 4.2 on esitatud muutujad koos andmetüüpide ja kirjeldusega.

Muutuja Sisend/Väljund Andmetüüp Kommentaar
Sisend1, Sisend3, Set_1 SET1, SET BOOL SET sisend
Sisend2, Sisend4, Reset_1 RESET, RESET1 BOOL RESET sisend
Valjund1, Valjund2, Q_1 Q1 BOOL Väljund, kuhu väljastatakse trigeri tulemus

Signaali väärtuse muutuse tuvastamine

Joonis 4.18.

Füüsikalise signaali väärtuse muutumist mõõdetakse ja kasutatakse signaali oleku muutuse tuvastamiseks. Signaali väärtuse kasvamist (muutus 0 → 1) nimetatakse positiivseks frondiks ja signaali väärtuse vähenemist (muutus 1 → 0) negatiivseks frondiks [viide]. Signaali väärtuse muutust kirjeldab lühike impulss väärtusega loogiline 1. Selle impulsi kestus on võrdne ühe programmi täitmistsükli kestusega (joonis 4.18).

Signaali väärtuse muutuse (frondi) tuvastamiseks on PLC-s jaoks olemas standardfunktsioonid. Mõne funktsiooni juures tuleb kasutada eraldi muutujat, mis seotakse vastava funktsiooni juures kasutatud muutujatega, et pidada meeles nende väärtusi eelmises PLC töötsükli ajal.

Nii positiivse (tõusva) kui ka negatiivse (langeva) frondi avastamiseks pakub CoDeSys kolme eri tüüpi funktsiooni. Järgnevalt kirjeldatakse lahti positiivse frondi funktsioonid:

  • R_TRIG
  • |P|
  • Kolmnurk

R_TRIG funktsioon

R_TRIG funktsioon (joonis 4.19) võtab sissetuleva signaali sisendis CLK vastu (mis kantakse temani jooni mööda FBD ja LD keeles) ja kontrollib selle frondi muutust. Tulemus väljastatakse väljundi Q kaudu ja kantakse ühendusjoone(te) kaudu edasi teiste programmeerimiskeele elementideni/funktsioonideni. See võimaldab kasutada seda funktsiooni igal pool PLC programmis positiivse frondi tuvastamiseks. Selles funktsioonis kasutatakse ainult üht muutujat nimega POS1, milles hoitakse selle funktsiooniga seotud muutujate väärtusi ning salvestatakse eelmises tsüklis olnud sisendi CLK väärtus. R_TRIG funktsiooni muutuja deklaratsioon näeb välja järgmine: POS1 : R_TRIG;.

FBD LD
R_TRIG FBD R_TRIG LD
ST
//R_TRIG muutuja deklareerimine POU deklaratsioonialal
POS1 : R_TRIG;

//R_TRIG ST keeles
POS1 (CLK := Sisend1, Q => Valjund1);

Järgnevalt on esitatud CoDeSys koostatud R_TRIG funktsiooni näite failid, mis saab laadida alla ja testida arvutis. Siin tuleb arvestada, et palja inimese silmaga selle funktsioonitööd ei näe.

Joonisel 4.19 kujutatud näites kontrollitakse operandi Sisend1 positiivset fronti. Selle tuvastamisel (hetkel, mil Sisend1 väärtus muutus üheks) muutub operand Valjund1 väärtus kõrgeks üheks programmi tsükliks. Järgmisel programmi täitmise tsüklil muutub operandi Valjund1 väärtus tagasi madalaks, kuna operandi Sisendi1 väärtus ei muutunud või see muutus nulliks antud tsüklis. Enamasti on PLC-s ühe programmi täitmise tsükliaeg liiga lühike, et kajastada frondi muutust PLC väljundis. Selleks tuleks kasutada SET ja RESET funktsioone.

|P| funktsioon

|P| funktsioon võimaldab tuvastada FBD ja LD keeles mingi kindla muutuja positiivset fronti. Joonisel 4.20 esitaud näites on selleks muutujaks Sisend2. Tulemus kantakse joone kaudu edasi teiste programmeerimiskeele elementideni/funktsioonideni. Selle funktsiooni jaoks ei ole vaja defineerida eraldi operandi. |P| funktsioon puudub ST keeles.

FBD LD
|P| funktsioon |P| funktsioon

Järgnevalt on esitatud CoDeSys koostatud |P| funktsiooni näite failid, mis saab laadida alla ja testida arvutis. Siin tuleb arvestada, et palja inimese silmaga selle funktsioonitööd ei näe.

Joonisel 4.20 kujutatud näites kontrollitakse muutuja Sisend2 positiivset frondi olemasolu kui muutuja Sisend1 on aktiivne (signaal on loogiline 1). Muutuja Sisend1 abil juhitakse muutuja Sisemd2 frondi muutuse tuvastust (kas anda luba frondi muutuse tuvastamiseks või mitte). Kui Sisend1 väärtus on loogiline 1 ning Sisend2 signaal muutus loogiliseks üheks (kõrgeks, 0→1) selles programmitsüklis, siis muutuja Valjund1 väärtus muutub ka loogiliseks 1. Järgmise programmitsükli ajal muudetakse muutuja Valjund1 tagasi loogilisesks 0.

Funktsiooni |P| paremaks mõistmiseks on täiendatud kahte eelmist näidis faili SET ja RESET funktsioonidega. SET funktsioon aktiveerub kui on tuvastatud positiivne signaalimuutus muutujas Sisend2 ja aktiveerib muutuja Valjund1. Valjund1 deaktiveerimiseks kasutatakse RESET funktsiooni ja vastavat nuppu animatsioonis. Järgmised failid saab laadida alla ja testida arvutis.

|P| funktsiooni tekitamiseks kasutatakse FBD keeles ikooni Front FBD-s ja LD keeles ikooni Front LD-s. Nende abil saab tuvastada positiivset fronti ka väljundi juures või kusagil programmi keskel nagu näidatud joonisel 4.21.

LD
PosFront PosFront
FBD
PosFront PosFront

Joonisel 4.21 vasakul pool olevas programmis kasutatakse Kolmnurk funktsiooni positiivse frondi tuvastamiseks. Kontrollitav signaal siseneb vasakult poolt mööda ühendusjoont funktsiooni ja selle tulemus väljastatakse paremalt poolt ühendusjoone(te) abil.

Negatiivne front

Negatiivse frondi funktsioonid F_TRIG, |N| ja Kolmnurk toimivad sarnaselt ülalkirjeldatud positiivse frondi tuvastuse funktsioonidele selle vahega, et positiivse frondi asemel tuvastatakse negatiivset (1→0). Joonisel 4.22 on esitatud negatiivse frondi funktsioonid LD keeles.

NegFront NegFront
NegFront NegFront

Tabelis 4.3 on esitatud muutujad, mida kasutati eespool signaali muutuste tuvastamiseks frondi trigerite juures, koos andmetüüpidega ja kirjeldusega.

Muutuja Sisend/Väljund Andmetüüp Kommentaar
Sisend1, Sisend2 CLK BOOL Sisendoperand, mille signaali muutust kontrollitakse trigeriga
POS1 R_TRIG Muutuja, kuhu salvestatakse positiivse frondi tuvastamiseks vajalikud väärtused
NEG1 F_TRIG Muutuja, kuhu salvestatakse negatiivse frondi tuvastamiseks vajalikud väärtused
Valjund1, Valjund2, Q BOOL Väljundmuutuja, mis näitab kas sisendoperandi väärtus muutus või ei muutunud

Frondi tuvastus ST keeles

ST keeles on võimalik teha frondi tuvastamist ka IF tingimuslause abil nagu kujutatud joonisel 4.23. Selles esitatud viimane programmirida peab kindlasti olema IF tingimuslausest allpool. Kui see asub tingimuslause sees või sellest eespool, siis frondi tuvastamine ei tööta.

Positiivne signaali tuvastus
IF Sisend1 AND NOT(Sisend1_enne) THEN
  Valjund1 := TRUE;
ELSE
  Valjund1 := FALSE;
END_IF;
//Sisendi1 olek jäetakse meelde järgmiseks PLC tsükliks
//Panna see osa peale IF lauset
Sisend1_enne := Sisend1;
Negatiivne signaali tuvastus
IF NOT(Sisend1) AND Sisend1_enne THEN
  Valjund1 := TRUE;
ELSE
  Valjund1 := FALSE;
END_IF;
//Sisendi1 olek jäetakse meelde järgmiseks PLC tsükliks
//Panna see osa peale IF lauset
Sisend1_enne := Sisend1;

Järgnevalt on esitatud programmiosa ST keeles, kus positiivse frondi peale lülitatakse lampi sisse või välja.

IF nupp_1 AND NOT nupp_1_enne THEN
  lamp_1 := NOT lamp_1; //Muudame lambi oleku vastupidiseks
END_IF;

//Selle tsükli ajal oleva sisendi oleku meelde jätmine järgmiseks tsükliks
//nupp_1_enne on muutuja, millesse paneme nupu hetkeoleku.
nupp_1_enne := nupp_1;

Järgnevalt on esitatud programmiosa LD keeles, kus positiivse frondi peale lülitatakse lampi sisse või välja.

LAD
Network 1: Muutuja nupp_1 positiivse frondi tuvastamine
Tabeli joonis
Network 2: Muutuja lamp_1 oleku muutmine
Tabeli joonis
Creative Commons Licence
"CoDeSys" is licensed under a Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Unported License .