Keerulisemad binaarloogika funktsioonid
Taimerid ehk viivituse teostajad
| Nimi | Käsutüübid | 
|---|---|
| Sisselülitusviivitusega taimer | TON | 
| Väljalülitusviivitusega taimer | TOF | 
| Impulsstaimer | PT | 
Juhtimisülesannetes kasutatakse tihti erinevaid taimeri funktsioone nt signaalide eluea pikendamiseks, väljundi hilisem aktiveerimine, jne. Programmis määrab taimeri sätted, nt viivitusaja ja taimeri aktiveerimise tingimuse programmeerija. Standard IEC 61131 määratleb taimeritele ainult 3 erinevat ajafunktsiooni, mis on esitatud tabelis 5.1.
                        Iga programmis kasutatud taimeri jaoks on vaja luua üks muutuja 
                        POU muutujate deklaratsioonialas 
                        nagu Timer_ON_0 : TON;. 
                        Selles hoitakse mälus taimeriga seotud väärtusi. Ühte muutujat ei tohi kasutada mitme paralleelse ajalise 
                        funktsiooni teostamiseks. Kui ühte tüüpi taimereid kasutatakse erinevates kohtades ja erinevatel aegadel 
                        siis võib kasutada sama muutujat nende tähistamiseks. Probleemide vältimiseks on soovitav 
                        siiski kasutada iga taimeri jaoks eraldi muutujat.
                    
Joonisel 5.1 on kujutatud sisselülitusviivitusega taimer LD, FBD ja ST keeles. Teised taimerid näevad samasugused välja, ainus erinevus seisneb taimeri käsutüübi tähises (tabel 5.1). Näiteks väljalülitusviivitusega taimeri kasutamiseks ST keeles tuleb taimeri muutuja deklaratsioonis asendada käsk TON käsuga TOF.
Tabelis 5.2 on esitatud taimerite juures kasutatud muutujad, sisendid ja väljundid.
| Muutuja | Sisend/Väljund | Andmetüüp | Kommentaar | 
|---|---|---|---|
| Sisend1 | IN | BOOL | Binaarsisend taimeri aktiveerimiseks (ühebitine binaarsignaal taimeri aktiveerimiseks) | 
| PT | TIME | Sisend taimerile ajaintervalli määramiseks (viivituseaja väärtus) | |
| Valjund1 | Q | BOOL | Binaarväljund, mis näitab taimeri tulemust (olekut) | 
| Aeg_Valja | ET | TIME | Väljund, mis väljastab taimeris loendatud aja väärtuse (loendatud aja väärtus) | 
| Timer_ON_0, Timer_OFF_0, Timer_TP_0 | TON, TOF, TP | Muutuja, kuhu salvestatakse taimeriga seotud väärtused | 
                        Taimerid töötavad määratud aja jooksul. Lihtsam viis ajaintervalli (viivitusaja) määramiseks on kirjutada 
                        see konstandina taimeri sisendisse PT. Ajaintervall 
                        kirjutatakse CoDeSys järgmiselt:
						T#aaDbbHccMddSeeeMS,
                        kus:
                    
- aa - päevad
- bb - tunnid
- cc - minutid
- dd - sekundid
- eee - millisekundid
                    	Näide ajakonstandist T#2D3H10M3S10MS (2 päeva, 3 tundi, 19 minutit, 3 sekundit ja 10 millisekundit). 
                    	Taimerile võib ette anda ajaintervalli ka muutujana, mille deklareeritud andmetüüp on 
                    	TIME. Vaata ka pt "Elementaarsed andmetüübid" 
                    	ajaintervalli ja andmetüübi TIME kohta.
                    
Sisselülitusviivitusega taimer (TON)
						Kui taimeri (joonis 5.2) sisendis IN tuvastatakse loogiline 1, siis hakkab 
                   		taimer aega loendama kuni ET väärtus saavutab ettemääratud 
                   		PT aja. Selle saavutamisel aktiveeritakse (seatakse kõrgeks) 
                   		väljund Q. Väljund Q jääb aktiivseks kuni sisendist IN kaob loogiline 1. 
                   		Kui IN signaal kaob enne kui taimeri aeg ET 
                   		saavutab PT väärtuse (enne kui taimeri aeg saab täis), siis 
                   		peatatakse aja lugemine ja taimeri ajaline väärtus nullitakse. Sel puhul ei aktiveerita väljundit Q.
                    
| FBD | Signaalide ajadiagramm | 
|---|---|
|  |  | 
                        Joonisel 5.2 on kujutatud väljalülitusviivitusega taimer FBD 
                        keeles ja selle signaalide olekudiagramm. PT on taimerile 
                        ette antud ajaintervall (väljalülituse viivituseaeg) ning ET 
                        väljastab taimeri poolt loetud aja.
                    
Järgnevalt on esitatud CoDeSys koostatud taimeri TON näite failid, mis saab laadida alla ja testida arvutis.
Väljalülitusviivitusega taimer (TOF)
                        Kui taimeri (joonis 5.3) sisendis IN tuvastatakse loogiline 1, siis aktiveeritakse kohe taimeri väljund Q. Taimer hakkab loendama ajaintervalliga 
                        PT määratud aega, kui sisendi IN signaal muutub 
                        nulliks. Loendamine kestab taimeris kuni etteantud viivitusaja PT 
                        lõpuni (kuni ET saavutab PT 
                        väärtuse). Väljund Q desaktiveeritakse (loogiline 0), kui taimeri viivitusaeg on läbi saanud 
                        ja sisend IN on 0. Kui aja loendamise kestel tuleb sisendisse IN positiivse frondiga 
                        signaal (0 muutub 1), siis peatatakse loendamine. Loendamine algab otsast peale, kui sisendi IN 
                        väärtus muudetakse nulliks.
                    
| FBD | Signaalide ajadiagramm | 
|---|---|
|  |  | 
                    	Joonisel 5.4 on kujutatud väljalülitusviivitusega taimer FBD 
                    	keeles ja selle signaalide olekudiagramm. PT on taimerile ette 
                    	antud ajaintervall (väljalülituse viivituseaeg) ning ET väljastab 
                    	taimeri poolt loetud aja.
                    
Järgnevalt on esitatud CoDeSys koostatud taimeri TOF näite failid, mis saab laadida alla ja testida arvutis.
Impulsstaimer (TP)
                        Kui taimeri (joonis 5.4) sisendis IN tuvastatakse signaali tõusev front, 
                        siis hakkab taimer aega loendama kuni taimeri ajaväärtus ET 
                        saavutab ettemääratud aja PT. Väljund Q on aktiivne 
                        kuni taimer töötab ja etteantud aeg PT pole möödas. Sisendi 
                        IN signaali muutus (nulliks ja tagasi üheks) ei mõjuta taimeri tööd enne kui impulsi etteantud aeg 
                        PT pole möödas. 
                    
| FBD | Signaalide ajadiagramm | 
|---|---|
|  |  | 
                    	Joonisel 5.4 on kujutatud impulsstaimer FBD 
                    	keeles ja selle signaalide olekudiagramm. PT on taimerile ette 
                    	antud ajaintervall (impulsiaeg) ning ET väljastab taimeri poolt 
                    	loetud aega.
                    
Järgnevalt on esitatud CoDeSys koostatud taimeri TP näite failid, mis saab laadida alla ja testida arvutis.
Taimeri jupitamine ST keeles
						//Taimeri põhi keha, mis tegeleb aja loendamisega
						Timer_ON_0 (IN := Sisend1, PT := T#4S);
						//Taimeri väljundi Q väärtus omistatakse muutujale Valjund1
						Valjund1 =: Timer_ON_0.Q;
						//Taimeri ajaline väärtus ET omistatakse muutujale Aeg_Valja
						Aeg_Valja =: Timer_ON_0.ET;
                     
                     
                		
               			ST keeles ei pea siduma kõik muutujad taimeriga ühes 
               			kohas. Selle võib jagada juppideks nagu seda on tehtud joonisel 5.5. Samas võib jätta 
               			kaks alumist programmiosa välja ja kasutada taimeri nime koos vajalike lühenditega programmis otse. Nt muutujate 
               			Valjund1 ja Aeg_Valja asemel võib 
               			kasutada taimeri muutujat otse, lisades selle nime lõppu punktiga eraldatud väljundi tähis, nt 
               			Timer_ON_0.Q ja 
               			Timer_ON_0.ET.
               		
Loendur
| Nimi | Käsutüübid | 
|---|---|
| Ülesloendur | CTU | 
| Allaloendur | CTD | 
| Üles-alla loendur | CTUD | 
Impulsside loendamiseks (nt esemete loendamiseks tootmisliinis) ja asendi või kauguse hindamiseks kasutatakse tihti loendusfunktsioone. Standardis IEC 61131 on määratud 3 loendusfunktsiooni, mis on ka CoDeSys olemas (tabel 5.3).
                    	Nagu taimeridki vajavad loendurid oma tööks muutujaid, mis seotakse vastava loenduriga ja kasutatakse 
                    	loenduriga seotud väärtuste meelespidamiseks. Need muutujad võib deklareerida 
                    	POU muutujate deklaratsioonialas 
                    	nagu nt Loend_UA : CTUD;. 
                    	Iga loenduri jaoks on soovitav kasutada eraldi muutujat.
                    
     
                        Joonisel 5.6 on kujutatud üles-alla loendur FBD, 
                        LD ja 
                        ST keeles. Ülejäänud kaks loendurit omab 
                        samu komponente. Ainus erinevus seisneb selles, et osadel loenduritel puuduvad osaliselt järgmised 
                        sisendid: CU, CD, RESET või LOAD. 
                        Nt ülesloenduris puuduvad sisendid CD ja LOAD ning väljundist on puudu 
                        QD. Väljund QU esitatakse ülesloenduris ainult Q tähisena. 
                        Ülejäänud osa on nii nagu kujutatud joonisel 5.6 (loenduri muutuja nimi võib-
                        olla teine).
                    
Tabelis 5.4 on esitatud loenduri juures kasutatud muutujad, sisendid ja väljundid.
| Muutuja | Sisend/Väljund | Andmetüüp | Kommentaar | 
|---|---|---|---|
| Ules | CU | BOOL | Binaarsisend, mis suurendab loenduri väärtust ühe võrra, kui selles tuvastatakse tõusev front | 
| Alla | CD | BOOL | Binaarsisend, mis vähendab loenduri väärtust ühe võrra, kui selles tuvastatakse tõusev front | 
| Nulli | R | BOOL | Binaarsisend, mis nullib loenduri (loenduri väärtus muutub nulliks) | 
| Lae | LD | BOOL | Binaarsisend, mille peale laetakse loenduri väärtuseks PV sisendis olev algväärtus | 
| PV | WORD | Loendurile etteantud algväärtus (ainult täisarv). Võib kasutada ka muutujaid, millesse on salvestatud sobiv väärtus | |
| Valjund1 | Q, QU | BOOL | Binaarväljund, mis on aktiivne kui loenduri väärtus CV on saavutanud algväärtusega PV sama või suurema väärtuse | 
| Valjund2 | Q, QD | BOOL | Binaarväljund, mis on aktiivne kui CV loenduri väärtus on nulliga sama või väiksem sellest | 
| Vaartus | CV | WORD | Väljund, mis väljastab loendustulemi täisarvuna | 
| Loend_UA, Loend_U, Loend_A | CTUD, CTU, CTD | Muutuja, kuhu salvestatakse loenduriga seotud väärtused | 
Ülesloendur (CTU)
						Ülesloenduri esmakäivitusel on selle loendi väärtus CV (loendustulem) null 
						(joonis 5.7). Loenduri väärtus CV suureneb ühe võrra (+1), kui 
						loenduri sisendi CU signaalis tuvastatakse tõusev front. Loenduri 
						lõpuväärtust ehk väärtust, mille saavutades annab loendi väljundisse Q loogilise 1, saab määrata 
						sisendis PV. Kui CV on saavutanud PV-ga sama või suurema väärtuse, siis 
						annab väljund Q välja loogilise 1. Loenduri väärtus CV nullitake kui sisendi 
						RESET signaaliks on loogiline 1.
					
| FBD | Signaalide ajadiagramm | 
|---|---|
|  |  | 
Järgnevalt on esitatud CoDeSys koostatud ülesloenduri CTU näite failid, mis saab laadida alla ja testida arvutis.
Allaloendur (CTD)
                    	Allaloenduri esmakäivitusel on selle loendi väärtus CV (loendustulem) null 
                    	(joonis 5.8). Enamasti on alla lugeva loenduri puhul kasulik laadida eelmääratud 
                    	väärtus sisendist PV loendi väärtusesse CV, et oleks number, millest alla 
                    	lugema hakata. Seda saab teha, kui sisendisse LOAD anda loogiline 1.
                    
| FBD | Signaalide ajadiagramm | 
|---|---|
|  |  | 
                    	Kui sisendisse CD tuleb positiivse frondiga signaal, siis 
                    	vähendatakse loenduri väärtust CV ühe võrra (-1). Kui loenduri väärtus langeb nullini, siis 
                    	muutub väljund Q aktiivseks. Et taastada loenduri algset määratud väärtust, tuleb anda 
                    	sisendisse LOAD loogiline 1, mispeale laetakse loendi väärtuseks CV loenduri 
                    	sisendis määratud väärtus PV.
                    
Järgnevalt on esitatud CoDeSys koostatud allaloenduri CTD näite failid, mis saab laadida alla ja testida arvutis.
Üles-alla loendur(CTUD)
                    	Üles-alla loenduri (joonis 5.6) väärtus CV (loendustulem) on null 
                    	esmakäivitusel (joonis 5.9). Loenduri väärtus suureneb ühe võrra (+1), kui loenduri 
                    	sisendis CU tuvastatakse tõusev front. Tõusva 
                    	frondiga signaal sisendis CD vähendab loenduri väärtust ühe võrra (-1). Kui mõlemas sisendis 
                    	CU ja CD tuvastatakse positiivne signaalifront, siis 
                    	täidetakse mõlemat käsku korraga ja loenduri väärtus ei muutu. Loogiline 1 sisendis RESET viib 
                    	loenduri väärtuse nulli. Sisendis LOAD olev loogiline 1 laeb loenduri väärtuseks CV 
                    	sisendis PV olev väärtuse, kui sisendis RESET ei ole loogilist 1. Üles-alla loenduri 
                    	signaalide olekud on kujutatud joonis 5.9.
                    
Järgnevalt on esitatud CoDeSys koostatud üles-alla loenduri CTUD näite failid, mis saab laadida alla ja testida arvutis.
Loenduri jupitamine ST keeles
						//Loenduri põhi keha, mis tegeleb mingi väärtuse loendamisega
						Loend_UA (CU := Ules, CD := Alla, RESET := Nulli, LOAD := Lae, PV := 4);
						//Loenduri väljund QU omistatakse muutujale
						Valjund1 =: Loend_UA.QU;
						//Loenduri väljund QD omistatakse muutujale
						Valjund2 =: Loend_UA.QD;
                    	//Loenduri loendustulem CV omistatakse muutujale
                    	Vaartus =: Loend_UA.CV;
                     
                     
                	
                    	Ka loendurite juures ei pea siduma kõik muutujad loenduriga ühes kohas ST 
                    	keels. Selle võib jagada juppideks nagu seda on tehtud joonisel 5.10. Samas võib jätta alumise programmiosa välja ja kasutada loenduri nime koos vajalike lühenditega programmis otse. Nt muutujate Valjund1, Valjund2 ja Vaartus asemel võib kasutada loenduri muutujat otse, lisades selle nime lõppu punktiga eraldatud väljundi tähis, nt Loend_UA.QU, Loend_UA.QD ja Loend_UA.CV.
                    
Komparaator
Komparaatoritega (e võrdlusplokkidega) võrreldakse kahes sisendis olevate samatüübiliste andmete (muutujate) väärtusi. Võrdlustulemus väljastatakse binaarväljundi kaudu [viide]. Selle väljundi signaal on loogiline 1, kui võrdlustulemus on TÕENE, või loogiline 0, kui see on VÄÄR. Joonisel 5.11 on esitatud standardi IEC 61131 kohased võrdlused, mis on ka CoDeSys olemas. FBD ja LD keeles kasutatakse vastava komparaatori tähistamiseks tähtede kombinatsiooni. ST keeles märkide kombinatsiooni.
						Joonisel 5.12 on esitatud "suurem kui või võrdne" komparaator 
                       	FBD ja LD 
                       	keeles. Muutuja SArv1 väärtust võrreldakse muutuja 
                       	SArv2 väärtusega. Komperaator väljastab loogilise 1, kui mõlema 
                       	muutuja väärtused on võrdsed või kui muutuja SArv1 väärtus on suurem 
                       	kui muutuja SArv2 väärtus. Ehk siis SArv1 ≥ 
                       	SArv2. Komparaator tulemus kantakse edasi teistele funktsioonidele ja/või muutujatele. Selle 
                       	tulemusel muutub muutuja Valjund1 aktiivseks (loogiline 1). Kui eespool 
                       	loetletud võrdlustingimused ei ole täidetud, siis väljastab komparaator loogilise 0. Seega ei aktiveeru muutuja 
                       	Valjund1.
                    
| FBD | LD | 
|---|---|
|  |  | 
                        Mõnikord on komparaatoritel (joonis 5.13) olemas ka aktiveerimissisend 
                        EN. Sellega saab mõjutada komparaatori täitmist. Komparaatoris määratud võrdlus 
                        teostatakse ja saadud tulemus edastatakse muutujale Valjund1 kui muutuja 
                        Vordle omab signaali loogilist 1. Kui muutujal 
                        Vordle on väärtuseks loogiline 0, siis sõltmuata komparaatori tulemusets on 
                        ka muutuja Valjund1 väärtuseks loogiline 0. Kui komparaatoris olevat 
                        võrdlust soovitakse teostada kogu aeg, siis tuleb muutuja Vordle asendada 
                        väärtusega TRUE või jätta see sinna lisamata 
                        (LD keeles tuleb kustutada ka avatud kontakt). 
						Vaata ka järgmist pt aktiveerimisignaalide kohta.
                    
| FBD | LD | 
|---|---|
|  |  | 
Järgnevalt on esitatud CoDeSys koostatud komparaatorite näite failid, mis saab laadida alla ja testida arvutis.
Tabelis 5.5 on esitatud komparaatorite juures kasutatud muutujad, sisendid ja väljundid. Oluline on jätta meelde, et võrdluses tuleks kasutada sama andmetüübiga muutujaid.
| Muutuja | Andmetüüp | Kommentaar | 
|---|---|---|
| Vordle | BOOL | Sisend EN, mis lubab teostada võrdlust | 
| SArv1 | BYTE, WORD, DWORD, LWORD, SINT, INT, DINT, LINT, USINT, UINT, UDINT, ULINT, REAL, LREAL, STRING, WSTRING, DATE, TIME, LTIME, DT, TOD | Sisend A, mille väärtust tahetakse võrrelda sisendiga B | 
| SArv2 | Sisend B, mille väärtust tahetakse võrrelda sisendiga A | |
| Valjund1 | BOOL | Binaarväljund, millega väljastatakse komparaatori tulemus | 
Komparaatoris võib kasutada muutujate asemel ka konstante e siis väärtusi (nt 32, T#10s, jne), mis sobivad muutujale valitud andmetüübiga kokku.
						//Komparaator on seotud otse väljundmuutujaga
						Valjund1 := SArv1 > SArv2;
						//Komparaatorit on kasutatud IF tingimusluases
						IF SArv1 > SArv2 THEN
						    Valjund1 := TRUE;
						ELSE
						    Valjund1 := FALSE;
						END_IF;
                     
                     
                	
						Joonisel 5.14 on esitatud kaks võimaliku varianti "suurem kui" komparaatorit ST keeles. Esimese puhul on komparaator seotud otse muutuja Valjund1 tehtega. Teise puhul kasutatakse IF tingimuslauset muutuja Valjund1 väärtuse muutmiseks.
    				
Järgnevalt on esitatud CoDeSys koostatud ST keeles komparaatorite näited, mis saab laadida alla ja testida arvutis.
Funktsioonide ja funktsioonplokkide aktiveerimissignaalid
FBD ja LD keeles on funktsiooni plokkidel ja osadel funktsioonidel aktiveerimissignaalid (joonis 5.15) nagu sisendit EN ja väljundit ENO. Need esinesid ka eelmises peatükis esitatud komparaator funktsioonides (joonis 5.13).
Sisend EN on aktiveerimissisend, mis võimaldab mõjutada funktsiooni täitmist. Kui aktiveerimissisendi EN signaal on loogiline 1, siis täidetakse antud funktsiooni. Signaali loogiline 0 puhul ei täideta funktsiooni. Igat funktsiooni ja funktsiooni plokki täidetakse LD keeles alati, kui aktiveerimissisendi EN ette pole midagi kirjutatud/lisatud (sisendi EN väärtus on alati loogiline 1).
Väljund ENO on aktiveerimisväljund, mis annab infot funktsiooni täitmise õnnestumise kohta. Kui aktiveerimisväljundi ENO omab signaali loogiline 1, siis on funktsiooni täidetud ja ilma vigadeta. Kui aga aktiveerimisväljundi ENO signaal on loogiline 0 ja samas aktiveerimissisendi EN signaal on loogiline 1, siis on toimunud mingi tõrge funktsiooni täitmisel. Selle põhjuseks võib-olla näiteks see et sisend- ja väljundmuutuja andmetüübid ei lange kokku.
                        Joonisel 5.15 kujutatud ADD funktsiooni täidetakse, kui muutuja 
                        Aktiveeri lubab seda. SEL funktsiooni täidetakse, kui ADD funktsiooni 
                        täitmine õnnestus. Kui ADD funktsiooni täitmisel tekib probleem, siis SEL funktsiooni ei täideta. SEL funktsiooni 
                        ei täideta ka siis, kui ADD funktsiooni ei täideta.
                    
Järgnevalt on esitatud aktiveerimissignaalide kasutamise näited komparaatoriga (suurem kui või võrdne), mis on tehtud CoDeSys ja saab testida oma arvutis.
                    	Aktiveerimissisend EN ja –väljund ENO 
                    	(mõlemad koos) saab tekitada FBD ja 
                    	LD keeles eraldi sõltumata funktsioonidest/funktsiooni 
                    	plokkidest kasutades ikooni  või
 
                    	või  . 
                    	Esimese puhul tuleb valida ka kohe funktsioon või funktsiooni plokk, mille juures soovitakse kasutada 
                    	sisendit EN ja väljundit 
                    	ENO. Teise puhul tekitatakse programmi tühi kast, 
                    	millel on olemas sisend EN ja väljund 
                    	ENO.
. 
                    	Esimese puhul tuleb valida ka kohe funktsioon või funktsiooni plokk, mille juures soovitakse kasutada 
                    	sisendit EN ja väljundit 
                    	ENO. Teise puhul tekitatakse programmi tühi kast, 
                    	millel on olemas sisend EN ja väljund 
                    	ENO.
                    
                    	Kui aktiveerimissiendit EN ja -väljundit 
                    	ENO ei soovita, siis tuleb kasutada ikooni 
                    	 või
 
                    	või  .
.
                    
Loogikatehted mitmebitiliste muutujatega
Kaks muutuva väärtusega muutujat või üks muutuja ja konstant ühendatakse omavahel loogikatehte abil. Standart IEC 61131 kasutab loogikatehete jaoks lihtsaid binaarloogika funktsioone. Need on AND, OR, XOR (joonis 5.16) ja NOT (joonis 5.20). Nende tehete juures kasutatavad sisend- ja väljundmuutujad peaksid olema sama andmetüüpi (nt BOOL, BYTE, WORD, DWORD, LWORD). Need tehted ei võimalda kasutada väljundmuutujana väiksema mälumahuga muutujat.
| FBD | LD | 
|---|---|
|  |  | 
| ST | |
| //XOR loogika tehe, kus kasutatakse mitmebitilisi muutujaid | |
Binaarloogika NING-tehte tulemuseks saadud baidi (või ka bitt/andmesõna/topelt andmesõna/pikk andmesõna) mingi bitt on loogiline 1, kui kõigi sisendmuutujates vastaval kohal oleva biti väärtus on loogiline 1 (joonis 5.17). NING-tehtes võib-olla rohkem kui kaks sisendmuutujat.
Binaarloogika NING-tehtega saab varjata/peita mittevajalikke või mitteolulisi bitte (nende väärtusi) muutujas. Selleks kasutatakse maski, mille abil vajalikud või olulises kohas olevad bitid saavad signaali loogiline 1 ja teised (varjatavad) signaali loogiline 0. Maskina võib kasutada muutujat või konstanti. Maskeeritav muutuja ja mask liidetakse binaarloogika NING-tehte abil kokku, kus mittevajalike bittide väärtused varjatakse (signaal muutub loogiliseks 0) ja oluliste bittide väärtused ei muutu.
                    	Joonisel 5.17 maskeeritakse sisendmuutuja 
                    	Sisend1 bitid 1, 5 ja 6 ning sisendmuutuja 
                    	Mask kasutatakse maskina. Tulemus kirjutatakse muutujasse 
                    	Valjund1.
                    
Binaarloogika VÕI-tehte baidi (või ka bitt/andmesõna/topelt andmesõna/pikk andmesõna) tulemuse mingi bitt on loogiline 1 kui vähemalt ühe sisendmuutujas vastaval kohal oleva biti väärtus on loogiline 1 (joonis 5.18). Antud loogikatehet kasutatakse bitimustri täiendamiseks. Binaarloogika VÕI-tehte abil lisatakse tulemuseks saadava kahendarvu ühte või mitmesse bitti loogiline 1.
						Joonisel 5.18 oleva muutuja Sisend1 
                   		bittide 1, 5 ja 6 signaalid peaksid olema ühed. Selleks täiendatakse VÕI loogikatehtes bitimustrit lisades 
                   		muutuja Taiend bittidesse 1, 5 ja 6 loogilise 1. Bitid, mis omasid 
                   		loogilist 1 muutujas Sisend1, jäävad selleks.
                    
Binaarloogika VVÕI-tehte tulemuseks saadud baidi (või ka bitt/andmesõna/topelt andmesõna/pikk andmesõna) bitt on 1 kui kõikide sisendmuutujates vastaval kohal olevatest bittidest on ainult ühel väärtus loogiline 1 (joonis 5.19). Antud loogikatehe võimaldab muutuja bitimustris tuvastada signaali muutust ühes või mitmes biti kohas. Selleks liidetakse VVÕI-tehte abil kokku muutuja vana ja uus bitimuster. Igas kohas, kus toimub signaali muutus 0 → 1 või 1 → 0, väljastab VVÕI-tehe signaali loogiline 1.
                    	Joonisel 5.19 on näha, et signaali muutus on toimunud bittides 5 
                    	(1 → 0) ja 0 (0 → 1). Sisendmuutuja VanaSise omab vana 
                    	bitimustrit ja sisendmuutuja Sisend1 uut bitimustrit.
                    
                    	Kui on vaja avastada ühte tüüpi signaali muutust nt 0 → 1, siis tuleb VVÕI-tehte tulemusega ja uue 
                    	sisendmuutuja Sisend1 bitimustriga teha NING-tehe. Tulemus väljastab 
                    	selles biti kohas loogilise 1, kus toimus positiivne signaali muutus. Negatiivse signaali muutuse 
                    	(1 → 0) avastamiseks tuleb VVÕI-tehte tulemusega teha NING-tehe vana bitimustriga 
                    	(VanaSise).
                    
Binaarloogika EI-tehte tulemuseks on sisendmuutuja inverteeritud väärtus. Kõik bitid, mille väärtus on loogiline 1, saavad oma väärtuseks loogilise nulli ja vastupidi (joonis 5.20). Igat muutuja biti väärtust inverteeritakse eraldi.
Tabelis 5.6 on esitatud muutujad, mida kasutati eespool mitmebitiliste tehete tegemisel koos andmetüüpide ja kirjeldusega.
| Muutuja | Andmetüüp | Kommentaar | 
|---|---|---|
| Sisend1, Sisend2, Mask, Taiend, VanaSise | BOOL, BYTE, WORD, DWORD, LWORD | Sisendoperand, millega teostatakse vastav mitmebitline tehe | 
| Valjund1 | BOOL, BYTE, WORD, DWORD, LWORD | Väljundoperand, millesse salvestatakse (antakse välja) mitmebitilise tehte tulemus | 
Nihkefunktsioonid
| Nimi | Kommentaar | 
|---|---|
| SHL | Bitimuster nihutatakse vasakule | 
| SHR | Bitimuster nihutatakse paremale | 
| ROL | Bitimuster ringnihutatakse vasakule | 
| ROR | Bitimuster ringnihutatakse paremale | 
Nihke- ja ringnihkefunktsioone kasutatakse mingi muutuja (operandi) bitimustri nihutamiseks vasakule või paremale kindla arvu positsioonide võrra. Nihutamise käigus muutuja bitimustris vabanevad positsioonid täidetakse 0-ga. Ringnihkel muutuja bitimustris vabanevad positsioonid täidetakse mälupiirkonnast väljanihutatud bittide väärtustega.
Standard IEC 61131 ja CoDeSys pakuvad nelja nihkefunktsiooni, mis on esitatud tabelis 5.7. Nihke funktsiooni esimeseks sisendiks on muutuja (joonis xxx) mille bitimustrit tahetakse nihutada vasakule või paremale. Järgmisena sisestatakse arv, mille võrra nihutatakse bitimustrit vasakule või paremale. Iga andmetüübi jaoks on olemas suurim bittide arv, mille võrra saab teostada bitted nihutamist. Andmetüüpide:
- BYTE, SINT ja USINT puhul on selleks 8
- WORD, INT ja UINT on 16
- DWORD, DINT ja UDINT on 32
- LWORD, LINT ja LUIMT on 64
| FBD | LD | 
|---|---|
|  |  | 
| ST | |
| //Muutuja bitimustrit nihutatakse 3 võrra vasakule | |
                       	Joonisel 5.21 on esitatud mõned nihkefunktsioonid. ST 
                       	keeles on esitatud SHL nihkefunktsioon. ST 
                       	keeles kirjutatakse nihutatava bitimustri muutuja nimi (antud näites on selleks 
                       	SisBitMu1) ja nihutatavate bittide arv (selleks on 
                       	3 bitti) sulgude sisse. 
                       	FBD keeles on esitatud nihkefunktsioon 
                       	paremale SHR ning LD keeles 
                       	ringnihutamise funktsioon vasakule ROL. Kõik nihkefunktsioonid näevad välja nagu 
                       	joonisel 5.21 esitatud. Ainus erinevus on vastava funktsiooni käsu nimes.
                    
Ka nihkefunktsioonid võivad omada aktiveerimisisendit ning –väljundit FBD ja LD keeles (joonis 5.22). Nende kaudu saab mõjutada nihkefunktsiooni täitmist. Vaata ka pt aktiveerimisignaalide kohta.
| FBD | LD | 
|---|---|
|  |  | 
Tabelis 5.8 on esitatud nihkefunktsioonide juures kasutatud muutujad, sisendid ja väljundid. Muutujate asemel võib kasutada ka konstante ehk siis arve, mis sobivad muutujate andmetüübiga kokku.
| Muutuja | Andmetüüp | Kommentaar | 
|---|---|---|
| SisBitMu1 | BYTE, WORD, DWORD, LWORD, SINT, INT, DINT, LINT, USINT, UINT, UDINT, ULINT | Sisend, mille väärtuse bitimustrit tahetakse nihutada | 
| 3 | SINT, INT, USINT, UINT | Sisendile omistatakse nihutavate bittide (kohtade) arv bitimustris | 
| TulBitMu1 | BYTE, WORD, DWORD, LWORD, SINT, INT, DINT, LINT, USINT, UINT, UDINT, ULINT | Väljund, millele kaudu väljastatakse nihutamise tulemus | 
                    	Funktsioonid SHL ja SHR 
                    	nihutavad bitimustrit bitthaaval vaskalule või paremale etteantud biti kohtade arvu võrra. Tulemus 
                    	väljastatakse ja kantakse edasi muutujale TulBitMu1. 
                    	SHL puhul täidetakse vabaks jäänud kohad 0-ga kõikide andmetüüpide juures 
                    	(joonis 5.23 a). SHR puhul täidetakse 
                    	vabaks jäänud biti kohad 0-ga, kui nihutatava muutuja andmetüübiks on BYTE, 
                    	WORD, DWORD, LWORD, 
                    	USINT, UINT, UDINT ja 
                    	ULINT (joonis 5.23 b). Andmetüüpide 
                    	SINT, INT, DINT ja 
                    	LINT puhul täidetakse SHR puhul tühjaks jäänud biti 
                    	kohad bitimustris kõige vasakul pool oleva biti väärtusega ehk arvu märgi biti väärtusega 
                    	(joonis 5.24). Andmetüübi SINT 
                    	bitimustri viimane biti on 7. bitt, INT puhul on 15. bitt, DINT 
                    	puhul on 31. bitt ja LINT puhul 63. bitt. Kui viimase biti väärtus on 1 (arv on 
                    	negatiivne) siis täidetakse vabaks jäänud biti kohad ühega ja 0 (arv on positiivne) puhul täidetakse need 
                    	nulliga.
                    
 
                    
                     
                    
                    
                    	Joonisel 5.24 esitatud muutuja 
                    	SisBitMu1, mille andmetüüp on DINT, väärtus on 
                    	negatiivne. Seetõttu on muutuja SisBitMu1 viimase biti (31) väärtuseks 1. 
                    	Seega nihutamisel vabanenud bittide kohad täidetakse loogilise 1-ga.
                    
Kui nihutatava biti kohtade arv on 0, siis väljastatakse sisendis oleva muutuja bitimuster muutumatul kujul. Kui nihutatavate bitikohtade arv ületab bitimustris olevate bittide arvu, siis väljastatakse SHL puhul väärtus 0 (bitimustris on kõik kohad täidetud 0-ga). SHR puhul võib olla väljastatavaks väärtuseks 0 või -1 (viimase puhul on bitimustris kõik kohad täidetud 1-ga).
Funktsioonid ROL ja ROR nihutavad (ringnihutavad) kogu muutuja sisu bitthaaval paremale või vasakule ning tühjaks jäänud kohad täidetakse nihutamisel üle bitimustri nihutatud bittide väärtustega (joonis 5.25).
 
                                        
                 
               	    
                    
                    
                    
                   









