Mehhatroonikaseadmed
Euroopa struktuurfondide logo

Arenenud binaarloogika funktsioonid

PLC programmis kasutatavad numbrisüsteemid

STEP 7 keskkonnas saab kasutada erinevaid arvusüsteeme nagu kümnend-, kahend-, BCD-, kuueteistkümnend-, märgiga kahend- ja reaalarve. Dokumentides kasutatakse arvusüsteemi määramiseks alaindeksit (nt 1354₁₀, 1111 0011₂, 0011BCD).

Kümnendsüsteem

Kümnendsüsteemi aluseks on 10 erinevat numbrit 1, 2, 3, 4, 5, 6, 7, 8, 9 ja 0, mis tähistavad arve alates 0 kuni 9. Kui objektide loendamise tulemusena saadakse arv üle 9, siis võetakse kümnendarvus kasutusele järgmine numbrikoht. Nimetatud asukoha tähtsus on 10 ning järgmise numbriasukoha kasutuselevõtt leiab aset arvu 99 järel [8]. Näiteks arvu 1354 on võimalik esitada nii: 1354₁₀ = 1 x 1000 + 3 x 100 + 5 x 10 + 4 x 1

See arvude kirjutamise (koostamise) meetod on väga lihtne ning sobib ka teiste kümnendsüsteemist erinevate numbrisüsteemide võrdlemiseks.

Kahendsüsteem

Elektronarvutid võimaldavad arvutada (teostada tehteid) ainult kahe numbriga. Number 1 esitab (tähistab) liikuva sisu arvväärtust nt “vool on sees” ja number 0 esitab liikumatu sisu arvväärtust nt “vool on väljas”.

Kuna arvude esitamiseks kasutatakse kahte numbrit, siis ei arvutata numbri asukohta 10x alusel, vaid 2x alusel. Kahendarvu kõige parempoolsemas numbrikohas esitatakse kõige väiksema väärtusega sisu 2⁰ = 1. Kahendarvu järgmine numbrikoht esitab sisu, mille numbriline väärus on 2¹ = 2 jne. Kuna antud arvusüsteemis kasutatakse ainult kahte numbrit, siis kustutakse seda binaarseks e kahendsüsteemiks [8]. Tabelis 6.1 on esitatud kahendarv 1001 1101₂ ja selle numbrikohtadele vastavad kümnendarvud.

2⁷=128 2⁶=64 2⁵=32 2⁴=16 2³=8 2²=4 2¹=2 2⁰=1
1 0 0 1 1 1 0 1

Vastav kümnendarv on: 1x2⁷ + 0x2⁶ + 0x2⁵ + 1x2⁴ + 1x2³ + 1x2² + 0x2¹ +1x2⁰ = 15710

Mingi suuruse sisulist väärtust saab näiteks esitada 8-bitise kahendarvuga (1111 1111₂). Sellele kahendarvule vastav (suurim) kümnendarv on 255.

PLC programmis kirjutatakse kahendarv 1001 1101₂ järgmiselt 2#10011101, kus 2# näitab, et number on esitatud kahendarvu süsteemis.

BCD arvusüsteem

Enamus inimesi, kes on harjunud tegelema kümnendarvudega, ei oska lugeda kahendarve. Sel põhjusel loodi binaarselt kodeeritud kümnend arvusüsteem BCD. Iga number alates 0 kuni 9 esitatakse neljakohalise kahendarvuna (tabel 6.2). Seda arvusüsteemi on lihtsam lugeda, kuid samas võtab see enda alla rohkem ruumi – kahendarvu süsteemis kasutatakse nelja numbrikohta arvude 0 kuni 9 kirjutamiseks.

Kahendarve alates 10102 kuni 11112 ei kasutata BCD-arvusüsteemis (koodis). Kui aga need esinevad BCD arvus, siis annab PLC selle kohta veateate.

0₁₀ 0000BCD
1₁₀ 0001BCD
2₁₀ 0010BCD
3₁₀ 0011BCD
4₁₀ 0100BCD
5₁₀ 0101BCD
6₁₀ 0110BCD
7₁₀ 0111BCD
8₁₀ 1000BCD
9₁₀ 1001BCD

Kümnendarv 1847 kirjutatakse BCD koodis järgmiselt:

Seetõttu kasutatakse nelja numbrikohaga kümnendarvu esitamiseks BCD koodis 16 bitti. PLCs kasutatakse BCD koodi esitamiseks (kasutuses ainult arvud 0 kuni 9) kuueteistkümnendarvu süsteemi. Seega kümnendarv 1847 kirjutatakse PLC programmis järgmiselt W#16#1847.

BCD koodiga saab esitada ka arvu negatiivseid väärtusi. Arvu märgi väärtus kirjutatakse alati BCD koodi vasakpoolseimasse bitti. Viimasel (vasakpoolseimal) kohal oleva numbri esitamiseks on ainult 3 bitti [6]. Kui viimase biti väärtus on 1, siis arv on negatiivne (-), ja 0 puhul on see positiivne (+). Kümnendarv -1847 esitatakse BCD koodis järgmiselt:

Kuueteistkümnendsüsteem

16³ = 1096 16² = 256 16¹ = 16 16⁰ = 1
C 5 3 B

Kuna kahendarve on raske lugeda ja BCD koodi kasutamine võtab palju ruumi, siis töötati välja kuueteistkümnendsüsteem HEX. HEX-süsteemi number võtab enda alla korraga neli bitti, kus saab esitada numbreid 0 kuni 15, st loendada kuni kuueteistkümneni. Kuueteistkümnendarvude esitamiseks kasutatakse numbreid 0 kuni 9, millele järgnevad tähed A, B, C, D, E ja F, kus A = 10, B = 11, C = 12, D = 13, E = 14 ning F = 15. HEX-süsteemis arvutatakse üksikute numbrikohtade väärtus numbri 16x baasil [8].

Tabelis 6.3 on esitatud kuueteistkümnendarv C53BHEX. Selle väärtus kümnendarvu süsteemis on 12 x 16³ + 5 x 16² + 3 X 16¹ + 11 x 16⁰ = 14491₁₀

Rakenduse PLC-programmis kirjutatakse number C53BHEX kui W#16#C35B, kus W#16# lisatakse enne HEX arvu. Täht W tähendab, et number kasutab 16 bitti CPU mälust. Seda arvu võib kirjutada ka DW#16#C35B, kus DW näitab, et number kasutab 32 bitti CPU mälust.

Märgiga kahendarvud

-3 negatiivne kümnendarv
0000 0011₂ -3 positiivne kahendarv
1111 1100₂ inverteeritud positiivne kahendarv
1111 1101₂ negatiivne kahendarv

Töötamiseks negatiivsete arvudega otsustati kahendarvu vasakpoolsemat bitti kasutada vastava märgi esitamiseks: 0 vastab siis + ja 1 vastab - [8]. Seega ei kasutata vasakult kõige esimest bitti numbrite esitamiseks. Negatiivne kahendarv saadakse pärast tema positiivse väärtuse inverteerimist, millele liidetakse juurde 1. Arvu inverteerimise all mõeldakse seda, kus 1 asendatakse 0 ja 0 asendatakse 1. Seega kümnendarv -3 näeb välja kahendarvus nii 1111 1101₂.

Negatiivsed kahendarvud arvutatakse vajadusel ümber kümnendarvudeks, kasutades baasiks numbrit 0. Seega leitakse kümnendarv bittide järgi, mille väärtuseks on 0. Saadud positiivsele väärtusele liidetakse juurde 1. Negatiivne kahendarv 11112 esitatakse kümnendarvus nii:

((-1) x 1) x (0 x 2² + 0 x 2¹ +0 x 2⁰ + 1) = -1₁₀

Järelikult: 1000 0001₂ = -127₁₀ ja 0111 1111₂ = +127₁₀

Reaalarvud

Vaatamata sellele, et märgiga kahendarvude abil saab esitada positiivseid ja negatiivseid arve kasutades vaid numbreid 0 ja 1, eksisteerib ka vajadus reaalarvude järele. Selleks, et reaalarvu esitada kahendarvu abil, jaotatakse reaalarv algul kahte ossa, millest üks on korrutustegur ja teine on kümne aste. Need osad seotakse korrutustehtega. Seda meetodit nimetatakse numbrikohtade teaduslikuks esituseks [8].

Number 3,14 teisendatakse kujule 314 x 10⁻² , seetõttu kasutatakse reaalarvu esitamiseks kahte märgiga täisarvu.

PLC-programmis kirjutatakse näiteks reaalarv 31,4 kujul 31.4 või 3.14e+001, kus e+001 on kümne aste (10⁺¹).

Arvude esitus PLC mälus

Joonis 6.1.

Enamus arve, mis on täisarvulised kümnendarvud, salvestatakse PLC-mällu märgiga või märgita kahendarvu kujul. Joonisel 6.1 on andmete esitamiseks kasutatavate täisarvu- tüüpide INT ja DINT poolt PLC mälus hõivatav ala, kuhu salvestatakse muutuja arvväärtus kui märgiga kahendarv. Andmetüüp INT kasutab PLC mälus 16 bitti ja DINT 32 bitti. Kõige suurema väärtusega (vasakult esimene) bitti (INT puhul bitt 15 ja DINT puhul bitt 31) salvestatakse arvu märk PS. Kui selle biti väärtus on 1, siis PLC mällu salvestatud number on negatiivne. PLC-mälus oleva täisarvu leidmiseks (arvutamiseks) kasutatakse andmetüübi INT puhul biti kohti 0 kuni 14, DINT puhul on selleks bitid 0 kuni 30. Komaga kümnendarvu (reaalarvu) muutuja määramiseks kasutatakse andmetüüpi REAL. Andmetüüp REAL kasutab PLC mälust 32 bitti (joonis 6.1). See koosneb kolmest osast: arvu märk (mantissi märk) PS on kõige suurem bitt (bitt 31); bitid 23 kuni 30 (järgmised 8 bitti) moodustavad astme E väärtuse arvutuse 2E-127 jaoks; bitte 0 kuni 22 kasutatakse mantissi (komaga arv) M arvutamiseks [4]. Nendest PLC mälus olevatest kolmest koostisosast saab arvutada reaalarvu, kasutades järgmist valemit:

Reaalarv = (PS) x (1 + M) x (2E-127)

Kui PLC-mälus on reaalarv kujul 0100000001100000 0000000000000000₂, siis suurim bitt selles 0₂ näitab reaalarvuga esitatava sisu positiivsust (+1). Astme E väärtus esitatakse kahendarvuga 10000000₂, millele vastav kümnendarv on 128. Sisu väärtus mantiss M on esitatud kahendarvuna 11000000000000000000000₂, millele vastav kümnendarv on 0,75. Mantissi M väärtus arvutatakse bittide 22 ja 21 järgi, kuna nende bittide sisu on 1. Biti 22 väärtus on 0,5 (see arvutatakse 2⁻¹ abil) ja biti 21 väärtus on 0,25 (see arvutatakse 2⁻² abil).

Reaalarv = (+1) x (1 + 0,5 + 0,25) x (2¹²⁸⁻¹²⁷) = (1 + 0,75) x 2¹ = 1,75 x 2 = 3,5

Seega PLC mällu salvestatud reaalarvu väärtuseks on 3,5.

Taimerid ehk viivituse teostajad

Nimi STL FBD ja LAD
Sisselülitusviivitusega taimer SD S_ODT
Väljalülitusviivitusega taimer SS S_OFFDT
Salvestav sisselülitusviivitusega taimer SF S_ODTS
Impulsstaimer SP S_PULSE
Pikendatud impulsstaimer SE S_PEXT

Juhtimisülesannetes kasutatakse tihti erinevaid taimeri funktsioone. Programmis määrab taimeri sätted, nt viivituse aja ja taimeri aktiveerimise tingimuse programmeerija. STEP 7-s kasutatavad taimerid põhinevad STEP 5 taimeritel, mistõttu neid kutsutakse S5 taimeriteks. Tabelis 6.4 on loetletud STEP 7-s kasutatavad taimerid. Standard IEC 61131 määratleb taimeritele ainult 3 erinevat ajafunktsiooni: impulss (TP), viivitusega sisselülitamine (TON) ja viivitusega väljalülitamine (TOF). STEP 7 keskkonnas on need funktsioonid deklareeritud süsteemsete funktsiooniplokkide sees: TP – SFB 3; TON – SFB 4; TOF – SFB 5.

Taimeritega liidetud operandid tähistatakse STEP 7-s tähega T ja numbriga (T0, T1, T2 jne). Rakenduse programmis tuleb igat taimerit tähistada erineva tähisega. Kui sama tähist kasutatakse mitme taimeri juures, siis need taimerid ei tööta nii, nagu peaksid ja nende tulemused on ettearvamatud. Programmis kasutavate taimerite koguarv sõltub kontrolleri CPU tüübist.

Joonisel 6.2 on kujutatud sisselülitusviivitusega taimer LAD, FBD ja STL keeltes. Teised taimerid näevad samasugused välja, ainus erinevus seisneb taimeri käsutüübi tähises (tabel 6.4). Näiteks väljalülitusviivitusega taimeri kasutamiseks STL keeles tuleb joonisel 6.2 esitatud täimeri käsk SD asendada käsuga SS ja kasutada teist taimeri tähistust, nt T3.

Kõik taimeri funktsiooniplokid omavad kolme sisendit ja kolme väljundit (joonis 6.2):

  • S – sisend taimeri aktiveerimiseks (ühebitine binaarsignaal startimiseks);
  • TV – sisend, taimerile määratakse ajaintervall (viivituseaja väärtus);
  • R – sisend taimeri viimiseks algseisu (sisendisse ühebitine binaarsignaal);
  • Q – väljund, mis näitab taimeri olekut (väljundisse binaarsignaal);
  • BI –väljund, bait näitab allesjäänud aja väärtust täisarvuna, ilma aja perioodita;
  • BCD –väljund, bait näitab allesjäänud aja väärtust BCD-koodina.

Taimerid töötavad määratud aja jooksul. Lihtsam viis ajaintervalli (viivitusaja) määramiseks on kirjutada see konstandina taimeri sisendisse TV. Ajaintervall kirjutatakse STEP 7 järgmiselt: S5T#aHbbMccSdddMS, kus: a – tund, bb – minutid, cc – sekundid ja ddd- millisekundid [16]. Suurim sisestatav ajaintervalli väärtus taimeri sisendis TV on S5T#2h46m30s. Ajaintervalli taimerile võib ette anda ka muutujaga, mille deklareeritud andmetüüp on S5TIME.

Sisselülitusviivitusega taimer

Kui taimeri sisendis S tuvastatakse signaali tõusev front (0 muutub 1), siis hakkab taimer loendama ajaintervalliga määratud aega. See kestab niikaua kuni sisendi S signaal muutub 0 või sisendis R tuvastatakse signaali tõusev front (taimeri nullimine). Väljund Q aktiveeritakse (signaal 1) kui taimerile etteantud ajaintervall (viivitusaeg) on läbi. See väljund jääb aktiivseks kuni sisendi S signaal muutub 0 või kui taimer nullitakse. Kui aga sisendis S signaal 1 muutub 0 enne ajaintervalliga määratud tähtaega, siis taimeri väljundit Q ei aktiveerita. Joonisel 6.3 on kujutatud sisselülitusviivitusega taimer FBD keeles ja selle signaalide oleku diagramm. TV on taimerile ette antud ajaintervall (viivitusaeg).

Joonis 6.3. Joonis 6.3.

Väljalülitusviivitusega taimer

Kui taimeri sisendis S tuvastatakse signaali tõusev front, siis aktiveeritakse kohe taimeri väljund Q. Taimer hakkab loendama ajaintervalliga määratud aega, kui sisendi S signaal muutub 0. Loendamine kestab taimeris kuni etteantud viivitusaja lõpuni. Väljund Q deaktiveeritakse (väljastatakse signaal 0), kui taimeri viivitusaeg on läbi saanud. Kui sisendis R tuvastatakse tõusev signaalifront, siis taimer nullitakse ja ka väljund Q deaktiveeritakse. Kui loendamise kestel enne viivitusaja möödumist esineb sisendis S signaali muutus 0st 1ks, siis loendamine taimeris peatatakse. Loendamine hakkab uuesti otsast peale, kui sisendi S signaal muutub 0. Joonisel 6.4 on kujutatud väljalülitusviivitusega taimer FBD keeles ja selle signaalide olekudiagramm, kus TV on taimerile ette antud ajaintervall (viivitusaeg).

Joonis 6.4. Joonis 6.4.

Salvestav sisselülitusviivitusega taimer

Kui taimeri sisendis S tuvastatakse signaali tõusev front, hakatakse ajaintervallis määratud aega loendama ja see jätkub ka siis, kui sisendi S signaal muutub 0. Väljund Q aktiveeritakse, kui taimerile etteantud viivitusaeg on läbi ja see jääb aktiivseks kuni taimeri nullimiseni. Kui taimeri sisendis R tuvastatakse tõusev signaalifront, siis taimer nullitakse. Kui sisendis S tuvastatakse enne viivitusaja lõppu mitu tõusvat signaalifronti, hakkab taimer loendama ajaintervalli alates signaali viimasest tõusvast frondist. Joonisel 6.5 on kujutatud salvestav sisselülitusviivitusega taimer FBD keeles ja selle signaalide olekudiagramm, kus TV on taimerile ette antud ajaintervall (viivitusaeg).

Joonis 6.5. Joonis 6.5.

Impulsstaimer

Kui taimeri sisendis S tuvastatakse signaali tõusev front, hakkab taimer loendama ajaintervalliga määratud aega ja see kestab nii kaua kuni sisend S on 1 või impulsi etteantud aeg saab läbi. Väljund Q on aktiivne kuni taimer töötab ja impulsi etteantud aeg pole möödas. Kui sisendi S signaal muutub 0 enne, kui impulsiaeg on läbi või sisendis R tuvastatakse tõusev signaalifront, siis taimer nullitakse ja väljund Q deaktiveeritakse. Joonisel 6.6 on kujutatud impulsstaimer FBD keeles ja selle signaalide olekudiagramm, kus TV on taimerile ette antud ajaintervall (impulsiaeg).

Joonis 6.6. Joonis 6.6.

Pikendatud impulsiga taimer

Taimeri sisendis S signaali tõusva frondi tuvastamisel hakkab taimer ajaintervalliga määratud aega loendama ja see jätkub ka siis, kui sisendi S signaal muutub 0. Väljund Q on aktiivne, kuni taimer töötab. Väljund Q deaktiveeritakse, kui sisendis R tuvastatakse signaali tõusev front või impulsiaeg saab läbi. Kui sisendi S signaalis tuvastatakse mitu tõusvat fronti enne impulsiaja lõppu, hakkab taimer määratud aega uuesti loendama alates viimasest tõusvast frondist. Joonisel 6.7 on kujutatud pikendatud impulsiga taimer FBD keeles ja selle signaalide olekudiagramm, kus TV on taimerile ette antud ajaintervall (impulsiaeg).

Joonis 6.7. Joonis 6.7.

Loendur

Impulsside loendamiseks (nt esemete loendamiseks tootmisliinis) ja asendi või kauguse hindamiseks kasutatakse tihti loendusfunktsioone. Standardis IEC 61131 on määratud 3 loendusfunktsiooni: üles (STU), alla (CTD) ja üles-alla loendur (STUD). STEP 7-s on need loendusfunktsioonid esindatud süsteemsete funktsiooniplokkidena: CTU - SFB 0; CTD - SFB 1; CTUD - SFB 2.

STEP 7-s on olemas ka oma loendusfunktsioonid: üles (S_CU), alla (S_CD) ja üles-alla (S_CUD) loendur. Nende loenduritega saab loendada arve alates 0 kuni 999. Iga loenduri jaoks on olemas operand (tähistatakse tähega C ja numbriga, C0, C1, C2 jne), mis võtab loendurite mälupiirkonnas enda alla ühe sõna. Programmis kasutatavate loendurite arv sõltub CPU võimalustest.

Joonisel 6.8 on kujutatud üles-alla loendur LAD, FBD ja STL keeltes. Kõik teised loendurid näevad välja samamoodi. Ainus erinevus seisneb selles, et osal loenduritel ei ole käske CU või CD. Nt üles-loenduris puudub käsk CD. Ülejäänud osa jääb nii, nagu kujutatud joonisel 6.8 (loenduri operandi tähis võib olla teine).

Loenduritel võivad olla järgmised sisendid ja väljundid (joonis 6.8):

  • CU – binaarsisend üles loendamiseks (loenduri väärtuse suurendamiseks);
  • CD – binaarsisend alla loendamiseks (loenduri väärtuse vähendamiseks);
  • S – binaarsisend seadistamiseks (loendurisse sisestatakse etteantud algväärtus);
  • PV – loenduri etteantud algväärtus. Algväärtuse saab määrata konstandina “C#väärtus” (kümnendarv 0 ja 999 vahel) või sõna vormis muutujana;
  • R – binaarsisend loenduri nullimiseks (loenduri väärtus muudetakse 0);
  • Q – binaarväljund, näitab loenduri olekut (kui loendurisse loendatud väärtus on suurem kui 0, siis on selle väljundi signaal 1);
  • CV – loendustulemi väljund, sõna vormis esitatakse väärtus HEX arvuna;
  • CV_BCD – loendustulemi väljund, sõna vormis esitatakse väärtus BCD arvuna.
Joonis 6.9.

Joonisel 6.8 kujutatud loenduri väärtus (loendustulem) suureneb ühe võrra (+1), kui loenduri sisendi CU signaalis tuvastatakse tõusev front. Kui loenduri väärtus on juba 999 ja sisendi CU signaalis tuvastatakse positiivne front, siis väärtus enam ei suurene. Kui sisendi CD signaalis tuvastatakse tõusev front, siis vähendatakse loenduri väärtust 1 võrra (-1). Kui loenduri väärtuseks on 0 ja sisendis CD tuvastatakse positiivne signaalifront, siis loendustulemus enam ei vähene. Kui mõlemas sisendis CU ja CD tuvastatakse positiivne signaalifront, siis täidetakse mõlemat käsku korraga ja loenduri väärtus ei muutu. Sisendi S signaalis tõusva frondi tuvastamisel omistatakse loendurile algväärtus, mis määratakse sisendi PV (C#5) kaudu. Sisendi R signaali muutusel 0-st → 1-ks nullitakse loenduri väärtus. Loenduri alumine piirväärtus on 0 ja ülempiir on 999. Üles-alla loenduri signaalide olekud on kujutatud joonisel 6.9.

Üles ja alla loendurid töötavad peaaegu samamoodi kui üles-alla loendur. Erinevus seisneb selles, et üles-loenduril puudub alla loendamise osa ja alla-loenduril üles loendamise osa.

Komparaator

Komparaatoritega (e. võrdlusplokkidega) võrreldakse kahes sisendis olevate samatüübiliste andmete (operandide) väärtusi. Võrdlustulemus väljastatakse binaarväljundi kaudu [6]. Selle väljundi signaal on 1, kui võrdlus on tõene ja 0, kui see on väär. Joonisel 6.10 on esitatud standardi IEC 61131 kohased võrdlused.

Joonis 6.10.

STEP 7 kasutatakse samatüübilisi komparaatoreid numbrite võrdlemisel. Võrdlusoperatsioonide juures kasutatakse CPUs olevaid akumulaatoreid ACCU 1 ja ACCU 2 (loe lisainfot peatükkides 4.6 ja 5.1). Võrdluse tulemus salvestatakse loogikaoperatsiooni tulemusse RLO, mis on ühendatud komparaatori väljundiga Q (joonis 6.11). Kui võrdlus on tõene, siis on RLO ja ka väljundi Q signaal 1. Oluline on teada, et võrdluses saab kasutada ainult sama tüüpi operande (numbreid). Järgnevat tüüpi andmete võrdlemisel saab kasutada kõiki kuut võrdlusoperatsiooni:

  • täisarv (Integer,16 bitti, sümbol I);
  • topelttäisarv (Double integer, 32 bitti, sümbol D);
  • reaalarv (Real number, 32 bitti, sümbol R).

Andmetüüpe BOOL, BYTE, WORD ja DWORD saab võrrelda ainult funktsioonidega võrdne ja mittevõrdne.

Joonis 6.11.

Joonisel 6.12 on esitatud mõned STEP 7 komparaatorid. STL keeles on esitatud väiksem kui võrdlus täisarvuliste muutujatega, FBD keeles suurem kui võrdlus reaalarvuliste muutujatega ning LAD keeles mittevõrdne võrdlus topelt täisarvuliste muutujatega.

Joonis 6.12.

Nihkefunktsioonid

Nihke- ja ringnihkefunktsioone kasutatakse mingi muutuja 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 pakub nelja nihkefunktsiooni: SHL (nihutamine vasakule), SHR (nihutamine paremale), ROL (ringnihutamine vasakule) ja ROR (ringnihutamine paremale).

Nimi Sõna Topeltsõna Täisarv Topelttäisarv Kommentaar
STL FBD/LAD STL FBD/LAD STL FBD/LAD STL FBD/LAD
SHL SLW SHL_W SLD SHL_DW - - - - Bitimuster nihutatakse vasakule
SHR SRW SHR_W SRW SHR_DW SSI SHR_I SSD SHR_DI Bitimuster nihutatakse paremale
ROL - - RLD ROL_DW - - - - Bitimuster ringnihutatakse vasakule
ROR - - RRD ROR_DW - - - - Bitimuster ringnihutatakse paremale

STEP 7 kasutab erinevate andmetüüpide jaoks standardis IEC 61131 defineeritud nihkefunktsioone (tabel 6.5). Ring- ja nihkeoperatsioonides kasutatakse akumulaatorit ACCU 1 (loe lisaks peatükkidest 4.6 ja 5.1). Funktsioonide teostamiseks tuleb ette anda sisendoperandi bitimustris nihutatavate bittide arv (operand N) (vt joonis 6.16). Sõna ja täisarv tüüpi muutujate puhul võib see number olla 0 kuni 15 ning topeltsõna ja -täisarvu tüüpi muutujate puhul 0 kuni 31. STL keeles kirjutatakse see number vastava nihke käsu taha (joonisel 6.16 käsk SLW). LAD ja FBD keeltes kirjutatakse nihke number sisendi N ette HEX arvuna (joonisel 6.16 on see B#16#3, mille väärtuseks on arv 3).

Sõna (WORD) või topeltsõna (DWORD) operandide sisu nihutatakse paremale või vasakule bitthaaval. Nihutamisel vabaks jäänud biti kohad täidetakse 0-ga (joonis 6.13).

Joonis 6.13.

Täisarv (INT) või topelttäisarv (DINT) operandid nihutatakse bitthaaval ainult paremale. Nihutamisel vabaksjäänud bitikohad täidetakse arvu märgi biti (täisarvu puhul on see bitt 15 ja topelttäisarvul on see 31) väärtusega. Kui arvu märgi biti signaal on 0 (operandi väärtus on positiivne), siis vabanenud kohad täidetakse 0. Kui aga arvu märgi biti signaal on 1 (operandi väärtus on negatiivne), siis vabanenud kohad täidetakse 1. Joonisel 6.14 esitatud muutuja MD 48 väärtus on negatiivne. Seetõttu on topelttäisarvu muutuja MD 48 biti 31 väärtuseks 1. Seega nihutamisel vabanenud bittide kohad täidetakse signaaliga 1.

Joonis 6.14.
Joonis 6.15.

Ringnihutamist kasutatakse ainult topeltsõna muutujate või operandide puhul. Ringnihutamisel nihutatakse kogu operandi sisu bitthaaval paremale või vasakule ning tühjaks jäänud kohad täidetakse nihutamisel üle mälupiirkonna nihutatud bittide väärtustega (joonis 6.15).

Joonisel 6.16 on esitatud mõned STEP 7 nihkefunktsioonid. STL keeles on esitatud sõna muutuja nihkefunktsioon vasakule, FBD keeles topelttäisarvu muutuja nihkefunktsioon paremale ning LAD keeles topeltsõna muutuja ringnihutamise funktsioon paremale.

Joonis 6.16.
Creative Commons Licence
"Mehhatroonikaseadmed" is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License .