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 abil.
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 | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
![]() |
|||||||||||||||
ST | LD | |||||||||||||||
//Ning tehe ST keeles
|
![]() |
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 | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
![]() |
|||||||||||||||
ST | FBD | |||||||||||||||
//Või tehe ST keeles
|
![]() |
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 | |
---|---|
![]() |
![]() |
ST | |
//NING-VÕI-Loogikalülitus
|
//VÕI-NING-loogikalülitus
|
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
|
VÕI-tehe |
//VÕI-tehe IF tingimuslause abil
|
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 | ||||||
---|---|---|---|---|---|---|---|
|
![]() |
||||||
ST | LD | ||||||
//Eitus ST keeles
|
![]() |
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
ja LD-s ikooni
.
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 |
---|---|
![]() |
![]() |
ST | |
//Eitus NING-tehte sees
|
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 |
---|---|
![]() |
![]() |
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 | |
---|---|
![]() |
![]() |
LD | |
![]() |
![]() |
ST | |
//EI-NING-tehe
|
//EI-VÕI-tehe
|
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 | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
![]() |
|||||||||||||||
ST | LD | |||||||||||||||
//VVÕI-tehe ST keeles
|
![]() |
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 |
---|---|
![]() |
![]() |
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 |
---|---|
![]() |
![]() |
ST | |
//SR-trigeri deklareerimine POU deklaratsioonialal
|
|
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 |
---|---|
![]() |
![]() |
ST | |
//RS-trigeri deklareerimine POU deklaratsioonialal
|
|
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 | |
---|---|
![]() |
![]() |
LD | |
![]() |
![]() |
ST | |
//SR-triger
|
//RS-triger
|
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 |
---|---|
![]() |
![]() |
SET ja RESET väljundi tekitamiseks kasutatakse FBD
ja LD keeles ikooni
.
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
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 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 |
---|---|
![]() |
![]() |
ST | |
//R_TRIG muutuja deklareerimine POU deklaratsioonialal
|
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 |
---|---|
![]() |
![]() |
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| kasutus koos SET ja RESET funktsioonidega FBD keeles
- |P| kasutus koos SET ja RESET funktsioonidega LD keeles
|P| funktsiooni tekitamiseks kasutatakse FBD
keeles ikooni
ja LD keeles ikooni
.
Nende abil saab tuvastada positiivset fronti ka väljundi juures või kusagil programmi keskel nagu näidatud
joonisel 4.21.
LD | |
---|---|
![]() |
![]() |
FBD | |
![]() |
![]() |
Joonisel 4.21 vasakul pool olevas programmis kasutatakse
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
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.
![]() |
![]() |
![]() |
![]() |
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
|
Negatiivne signaali tuvastus |
IF NOT(Sisend1) AND Sisend1_enne THEN
|
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 | |
![]() |
|
Network 2: Muutuja lamp_1 oleku muutmine | |
![]() |