Binaarloogika funktsioonid
Funktsionaalset üksust, milles teostatakse binaarloogika põhioperatsioone, (näit. Boole loogikatehteid) nimetatakse loogikablokiks või ka lüliks. Graafiliselt kujutatakse lüli ristkülikuna, millel on sisendid ja väljundid. Binaarloogika põhioperatsioonide teostust saab kirjeldada ka erinevat tüüpi kontaktide abil.
NING- ja VÕI-lülid
Binaarloogika NING-lüli (tehte) väljundis on signaal väärtusega 1, kui selle kõikides sisendites on signaal väärtusega 1. Väljundsignaal on 0, isegi kui ainult ühes sisendis on signaal 0. Joonisel 4.1 on kujutatud binaarloogika NING-lülid LAD ja FBD keeles. NING-lüli võib omada rohkem kui kaht sisendit.
IF "Sisend0" AND "Sisend1" THEN
"Väljund0" := True;
ELSE
"Väljund0" := False;
END_IF;
"Väljund0" := "Sisend0" AND "Sisend1";
Binaarloogika VÕI-lüli (tehte) väljundis on signaal väärtusega 1, kui vähemalt ühes VÕI-lüli sisendis on signaal 1. Väljundsignaal on 0, kui kõikides sisendites on signaal 0. Joonisel 4.2 on kujutatud binaarloogika VÕI-lüli LAD ja FBDkeeles. VÕI-lüli võib omada rohkem kui kaht sisendit.
Tarkvara STEP 7 abil salvestatakse NING- ja VÕI-tehte tulemused PLC loogikaoperatsiooni tulemuse RLO bitti (RLO - result of logic operation). RLO biti väärtus ehk olek võib olla 1 või 0 [6]. NING- või VÕI-tehte algfaasis küsitakse esimese operandi signaali väärtust ja see salvestatakse kohe RLO bitti. NING- või VÕI-tehte teostamise järgmises faasis küsitakse ka teise operandi signaali väärtust, mis seejärel seotakse RLO bitti salvestatud väärtusega järgides binaaralgebra reegleid. Vahetulemus salvestatakse RLO bitti jne. Tehte teostamise lõpus salvestatakse RLO biti väärtus väljundlüli operandi(desse) või siis toimub programmis tingimuslik hüpe. Mõnikord on vaja (jõuga) muuta väljundlüli RLO biti väärtust 0 või 1 ilma mingi eelneva operatsioonita.
NING- ja VÕI-lülidest saab koostada keerukamaid loogikatehteid nagu NING-VÕI- ja VÕI-NING-loogikaühendused [16]. 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 FBD keeles.
NING-VÕI-tehte tulemuseks on signaal 1, kui vähemalt ühel NING-lülil on signaal 1. VÕI-NING tehte tulemuseks on signaal 1, kui mõlema VÕI-lüli tulemuseks on signaal 1.
Eitus
Binaarloogikas kasutatakse eitustehet sisendsignaali (operandi või muutuja) väärtuse inverteerimiseks ja edastamiseks lüli väljundisse. Eitustehte väljundsignaal on 1, kui sisendsignaal on 0 ja vastupidi. Joonisel 4.4 on kujutatud binaarloogika eitus LAD ja FBD keeles.
Eitust saab kasutada ka NING- ja VÕI-lüliga seotud väljundlüli juures (joonis 4.5). Eitusega NING-lüli kutsutakse EI-NING-lüliks (NAND) ja VÕI-lüli EI-VÕI-lüliks (NOR) [6].
Loogikalüli operatsiooni (tehte) tulemuseks saadud väljundi (signaali) väärtust võib binaarloogika EI tehte abil ka inverteerida. Joonisel 4.6 inverteeritakse NING-lüli ja VÕI-lüli väljundi ja saadud tulemus antakse lisaväljundisse Q 10.4.
VÄLISTAV-VÕI-lüli
Binaarloogika VÄLISTAV-VÕI-lüli (VVÕI) väljundsignaaliks on 1, kui selle lüli kahe sisendi signaalid on erineva väärtusega. Kui ühe sisendi signaal on 1 ja teise oma on 0 siis VVÕI-tehte tulemuseks on signaal 1. Joonisel 4.7 on kujutatud binaarloogika VVÕI-lüli LAD ja FBD keeles.
VVÕI-lüli võib omada rohkem kui kaht sisendit, sel juhul on VVÕI-lüli tulemuseks signaal 1, kui signaali 1 omavate sisendite arv on paaritu.
VVÕI-lüli saab kasutada koos NING- ja VÕI-lüliga.
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.
Joonistel 4.8 ja 4.9 on näidatud SR- (ülimusliku väljalülitamisega) ja RS- (ülimusliku sisselülitamisega) trigerid.
SR-trigeri väljundisse Q antakse signaal 1 kui trigeri sisendisse S (set) saabub signaal 1 ja sisendis R (reset) on signaal 0. See olek jääb kestma kuni trigeri väljalülitamiseni. Sisendi S signaali väärtuse muutus ei mõjuta väljundit Q, kui selle signaal on 1. Signaali 1 saabumisel sisendisse R muutub trigeri väljundi Q signaal 0 sõltumata sellest, milline on signaali väärtus sisendis S. Sisend R on ülimuslik. Seetõttu kutsutakse SR-trigerit ülimusliku väljalülitamisega trigeriks.
RS-trigeri väljundile Q antakse signaal 0, kui sisendis R on signaal 1 ja sisendis S on signaal 0. Trigeri olek jääb kestma kuni selle toite väljalülitamiseni. Väljundi Q signaal muutub 1 kui sisendisse S saabub signaal 1 sõltumata sellest, milline on sisendi R signaal. Seetõttu kutsutakse seda ülimusliku sisselülitamisega trigeriks. Signaali väärtuse muutus sisendis S ei mõjuta väljundit Q, kui selle signaal on juba 1 ning sisendis R on signaal 0.
NING- ja VÕI-lülidest saab koostada SR- ja RS-trigereid (joonis 4.10).
Operandi/muutuja väärtuse muutusi (ümberlülitusi) saab teha kasutajaprogrammi erinevates osades kasutades SET (S) ja RESET (R) funktsioone [6]. Nende funktsioonide kasutamne RS- ja SR-trigeris võimaldab teha eraldi sisse- ja väljalü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.11).
Signaali väärtuse muutuse avastamine
Füüsikalise signaali väärtuse muutumist mõõdetakse ja kasutatakse signaali oleku tuvastamiseks. Signaali väärtuse kasvamist (muutus 0 → 1) nimetatakse positiivseks frondiks ja signaali väärtuse vähenemist (muutus 1 → 0) negatiivseks frondiks [6]. Signaali väärtuse muutust kirjeldab lühike impulss väärtusega 1. Selle impulsi kestus on võrdne programmi 1 tsükli kestusega (joonis 4.12).
Signaali väärtuse muutuse (frondi) avastamiseks on PLCs olemas standardfunktsioonid. Programmis tuleb kasutada eraldi operandi (muutujat), kuhu salvestatakse uuritava signaali olek programmi eelmises tsüklis. Signaali muutuse saab avastada ka NING-lüli ja SR- ja RS-trigeritega.
Tõusva (ehk positiivse) frondi funktsioonid avastavad sisendoperandi muutuse 0 → 1. Sisendoperandi väärtust võrreldakse sisendoperandi eelmise tsükli ajal olnud väärtust hoidva mälubiti väärtusega.
Kui mälubiti väärtus on 0 ja sisendoperandi väärtus on 1, siis järelikult on sisendsignaal just madalast kõrgeks muutunud (on tekkinud on positiivne front).
Sellisel juhul on funktsiooni väljund 1.
Järgmise tsükli ajal, kui sisendoperandi väärtus on veel 1, siis on ka mälubiti väärtus 1, kuna see hoiab endas eelmise tsükli ajal olnud sisendoperandi väärtust.
Järelikult on signaal samaks jäänud ja funktsiooni väljund saab endale väärtuseks 0.
Nii tõusva kui langeva frondi tuvastamiseks on võimalik kasutada kolme erinevat funktsiooni. Tõusva frondi tuvastamiseks saab neist kasutada |P|, (P) ja P_TRIG.
P_TRIG funktsioon kasutab nii sisendi kui väljundina RLO registrit, mis tähendab et see ei vaja täiendavaid operande lisaks mälubitile, kuhu eelmise tsükli sisendoperandi väärtus salvestatakse.
Antud näites kontrollitakse operandi nupp positiivset fronti. Selle avastamisel (hetkel, mil nuppu vajutati) lülitatakse operand H1 üheks programmi tsükliks kõrgeks ning järgmises programmi tsüklis uuesti madalaks. See on liiga lühike aeg, et see kontrolleri väljundis jõuaks kajastuda, kuid piisav programmisiseseks kasutamiseks.
(P) funktsioon kasutab sisendiks RLO registrit, kuid ei mõjuta seda mingil moel (nö väljuv RLO jääb samaks). Selle asemel kasutab see väljundina lisaoperandi (antud näites väljundbitt).
Antud näites kontrollitakse operandi nupp positiivset fronti. Selle avastamisel (hetkel, mil nuppu vajutati) lülitatakse operand Väljundbitt üheks programmi tsükliks kõrgeks ning järgmises programmi tsüklis uuesti madalaks.
Samas funktsioon (P) ei mõjuta väljundit H1 ja H1 on aktiivne senikaua, kuni operand nupp on aktiivne.
|P| funktsioon kasutab sisendoperandiks lisaoperandi (antud näites nupp2) ning väljundoperandina RLO registrit.
Antud näiteks kontrollitakse sisendoperandi nupp2 positiivset fronti juhul, kui operand nupp on 1. Kui nupp väärtus on 1 ja nupp2 muutus loogiliseks üheks selle tsükli jooksul, siis väljund H1 väärtus muudetakse 1-ks. Järgmise tsükli ajal muudetakse see tagasi 0-ks.
SCL keeles puuduvad frondituvastusfunktsioonid, kuid tõusva frondi tuvastust annab teostada järgnevalt:
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 mälubitt, millesse paneme nupu hetkeoleku.
"nupp_1_enne" := "nupp_1";
Langeva (ehk negatiivse) frondi instruktsioonid avastavad sisendoperandi muutuse 1 → 0. Sisendoperandi väärtust võrreldakse sisendoperandi eelmise tsükli ajal olnud väärtust hoidva mälubiti väärtusega. Kui mälubiti väärtus on 1 ja sisendoperandi väärtus on 0, siis järelikult on sisendsignaal just kõrgest madalaks muutunud (on tekkinud on negatiivne front). Sellisel juhul on funktsiooni väljund 1. Järgmise tsükli ajal, kui sisendoperandi väärtus on veel 0, siis on ka mälubiti väärtus 0, kuna see hoiab endas eelmise tsükli ajal olnud sisendoperandi väärtust. Järelikult on signaal samaks jäänud ja funktsiooni väljund saab endale väärtuseks 0.
Langeva frondi funktsioonid N_TRIG, (N) ja |N| toimivad sarnaselt ülalkirjeldatud positiivse frondi tuvastamise funktsioonidele selle vahega et positiivse frondi asemel tuvastavad negatiivset.
SCL keeles puuduvad frondituvastusfunktsioonid, kuid langeva frondi tuvastust annab teostada järgnevalt:
IF NOT "nupp_1" AND "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 mälubitt, millesse paneme nupu hetkeoleku.
"nupp_1_enne" := "nupp_1";
Loogikatehted (mitmebitiliste operandidega)
Kaks muutuva väärtusega operandi (muutujat) või üks operand (muutuja) ja konstant ühendatakse omavahel loogikatehte abil. Standart IEC 61131 kasutab loogikatehete jaoks lihtsaid binaarloogika funktsioone. Need on AND, OR, XOR ja NOT (STEP 7 kasutab selle asemel INV).
Binaarloogika NING-tehte tulemuseks saadud baidi (või ka sõna/topeltsõna) mingi bitt on 1, kui
kõigi sisendoperandide vastaval kohal oleva biti väärtus on 1 (sisendoperande saab lisada rohkem kui 2).
Binaarloogika NING-tehtega saab varjata/peita mittevajalikke või mitteolulisi bitte
(nende väärtusi) operandis/muutujas. Selleks kasutatakse maski, mille abil vajalikud või
olulises kohas olevad bitid saavad signaali 1 ja teised (varjatavad) signaali 0. Maskiks
võib olla muutuja või konstant. Maskeeritav operand ja mask liidetakse binaarloogika
NING-tehte abil kokku, kus mittevajalike bittide väärtused varjatakse (signaal muutub
0) ja oluliste bittide väärtused ei muutu.
Joonisel 4.16. maskeeritakse sisendoperandi %MB1
bitid 2, 3 ja 5 ning sisendoperandi %MB2 kasutatakse maskina. Tulemus kirjutatakse operandi %MB3.
Binaarloogika VÕI-tehte baidi tulemuse mingi bitt on 1 kui vähemalt ühe sisendoperandi vastaval kohal oleva biti väärtus on 1.
Antud loogikatehet kasutatakse bitimustri täiendamiseks. Binaarloogika VÕI-tehte abil lisatakse tulemuseks
saadava kahendarvu ühte või mitmesse bitti loogiline 1.
Joonisel 4.17 oleva operandi %MB2
bittide 1, 5 ja 6 signaalid peaksid olema 1. Selleks täiendatakse VÕI loogikatehtes
bitimustrit lisades operandi %MB1 bittidesse 1, 5 ja 6 loogiline 1.
Bitid, mis operandis %MB2 olid juba 1, jäävad selleks.
Binaarloogika VVÕI-tehte tulemuseks saadud baidi bitt on 1 kui kõikide sisendoperandide vastaval kohal oelvatest bittidest on ainult ühel väärtus 1.
Antud loogikatehe võimaldab operandi bitimustris tuvastada signaali muutust ühes või mitmes biti kohas.
Selleks liidetakse VVÕI-tehte abil kokku operandi vana ja uus bitimuster. Igas kohas,
kus toimub signaali muutus 0 → 1 või 1 → 0, väljastab VVÕI-tehe signaali 1.
Joonisel 4.18 on näha, et signaali muutus on toimunud bittides 0 (0 → 1), 4 (0 → 1), 5(1 → 0) ja 7 (0 → 1).
Sisendoperand %MB1 omab vana bitimustrit ja sisendoperand %MB2 uut bitimustrit. Kui on
vaja tuvastada signaali muutust 0 → 1, siis tuleb peale VVÕI-tehet teostata uue
bitimustriga NING-tehe. Signaali muutuse 1 → 0 avastamiseks tuleb pärast
VVÕI-tehet teostada vana bitimustriga NING-tehe.
Binaarloogika EI-tehte tulemuseks on sisendoperandi inverteeritud väärtus. Kõib bitid, mille väärtus on loogiline 1 saavad oma väärtuseks loogilise nulli ja vastupidi.