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

PLC programmis kasutatavad arvsüsteemid

PLC programmeerimisel saab kasutada erinevaid arvusüsteeme nagu kümnend-, kahend-, BCD-, kaheksand-, kuueteistkümnend-, märgiga kahend- ja reaalarve. Arvsüsteemi määramiseks dokumentides kasutatakse arvu juures alaindeksit (nt 1354₁₀, 1111 0011₂, 0011BCD).

Kümnendsüsteem

Kümnendsüsteemi (DEC) aluseks on 10 erinevat numbrit 1, 2, 3, 4, 5, 6, 7, 8, 9 ja 0, mis tähistavad arve alates 0 kuni 9. Kümnendsüsteemis on baasarvuks 10. Kui objektide loendamise tulemusena saadakse arv üle 9, siis võetakse kümnendarvus kasutusele järgmine numbrikoht. Nimetatud asukoha tähtsus on 10¹. Järgmise numbriasukoha kasutuselevõtt leiab aset arvu 99 järel [viide].

Arvu 1354 on võimalik esitada nii: 1354₁₀ = 1 * 10⁴ + 3 * 10³ + 5 * 10¹ + 4 * 10⁰ = 1 * 1000 + 3 * 100 + 5 * 10 + 4 * 1

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

Kümnendarvule ei kirjutata enamasti alaindeksit juurde vaid need esitatakse ilma selleta.

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 jne. Kuna antud arvusüsteemis kasutatakse ainult kahte numbrit, siis kustutakse seda binaarseks ehk kahendsüsteemiks (BIN) [viide]. Tabelis 3.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: 1*2⁷ + 0*2⁶ + 0*2⁵ + 1*2⁴ + 1*2³ + 1*2² + 0*2¹ +1*2⁰ = 1*128 + 0*64 + 0*32 + 1*16 + 1*8 +1*4 + 0*2 +1*1 = 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. Arvude paremaks lugemiseks võib kasutada alakriipsu _ , mille näeb see arv programmis välja järgmiselt 2#1001_1101.

Kaheksandsüsteem

Kaheksandsüsteem (OCT) võtab enda alla korraga kolm bitti, kus esitatakse numbreid 0 kuni 7, st loendatakse kuni kaheksani. Kaheksandarvude (oktaanarv) esitamiseks kasutatakse numbreid 0 kuni 7. Kaheksandsüsteemis arvutatakse üksikute numbrikohtade väärtus numbri 8X-1 baasil. X on kaheksandarvus oleva numbri koha number.

Tabelis 3.2 on esitatud kaheksandarv 7375OCT. Selle väärtus kümnendarvu süsteemis on: 7375OCT = 7*8³ + 3*8² + 7*8¹ + 5*8⁰ = 3837₁₀

8³=512 8²=64 8¹=8 8⁰=1
7 3 7 5

PLC programmis kirjutatakse kaheksandarvu 712OCT järgmiselt 8#712, kus 8# näitab, et number on esitatud kaheksandarvu süsteemis.

BCD arvusüsteem

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

Enamus inimesi, kes on harjunud tegelema kümnendarvudega, ei oska lugeda kahendarve. Sel põhjusel loodi kahend-kümnendkood arvusüsteem (BCD). Iga number alates 0 kuni 9 esitatakse neljakohalise kahendarvuna (tabel 3.3). Seda arvusüsteemi on lihtsam lugeda, kuid see võtab mälus liiga palju ruumi – kahendarvu süsteemis kasutatakse nelja numbrikohta arvude 0 kuni 9 kirjutamiseks. Kahendarve alates 1010₂ kuni 1111₂ ei kasutata BCD-arvusüsteemis. Kui aga need esinevad BCD arvus, siis annab PLC selle kohta veateate.

Kümnendarv 1847 kirjutatakse BCD koodis järgmiselt: 0001 1000 0100 0111BCD

Joonis 3.1

PLC-s kasutatakse BCD arvu esitamiseks (kasutuses ainult arvud 0 kuni 9) kuueteistkümnendarvu süsteemi. Seega BCD arvuna esitatav kümnendarv 1847₁₀ kirjutatakse PLC programmis järgmiselt 16#1847.

BCD arvuna saab esitada ka negatiivseid arve. Arvu märgi väärtus kirjutatakse alati BCD arvu vasakpoolseimasse bitti. Siis on viimasel (vasakpoolseimal) kohal oleva numbri esitamiseks ainult 3 bitti [viide]. Kui viimase biti väärtus on 1, siis arv on negatiivne (-), ja 0 puhul on see positiivne (+). Kümnendarv -1847₁₀ esitatakse BCD-s järgmiselt:

Joonis 3.2

Kuueteistkümnendsüsteem

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

Kuna kahendarve on raske lugeda ja BCD 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 = 10, B = 11, C = 12, D = 13, E = 14 ning F = 15. HEX-süsteemis arvutatakse üksikute numbrikohtade väärtus numbri 16X baasil [viide].

Tabelis 3.4 on esitatud HEX arv C53BHEX. Selle väärtus kümnendarvu süsteemis on 12*16³ + 5*16² + 3*16¹ + 11*16⁰ = 14491₁₀

PLC programmis kirjutatakse arv C53BHEX kui 16#C35B, kus 16# lisatakse enne HEX arvu ja see näitab et tegu on HEX arvuga. Kui soovitakse, siis võib arvu ette kirjutada ka mälupiirkonna suuruse BOOL, BYTE, WORD, DWORD, LWORD, jne eraldatud # märgiga nagu nt WORD#16#C35B.

Märgiga kahendarvud

-3 negatiivne kümnendarv
0000 0011₂ -3 positiivne kahendarv
1111 1100₂ inverteeritud positiivne kahendarv
1111 1101₂ negatiivne kahendarv (+1)

Töötamiseks negatiivsete arvudega otsustati kahendarvu vasakpoolsemat bitti kasutada vastava märgi esitamiseks [viide]

  • 0 vastab +
  • 1 vastab -

Seega ei kasutata vasakult kõige esimest bitti numbrite esitamiseks.

Negatiivne kahendarv saadakse pärast tema positiivse väärtuse inverteerimist, millele liidetakse juurde 1 (tabel 3.5). 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 1111₂ esitatakse kümnendarvus kui:

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

Kõige vasakpoolsemat numbrit võetakse kui negatiivse märgi näitajat. Kui see on 1, siis on arv negatiivne. Ülejäänud 3 numbrit inverteeritakse (saadakse 000₂) ja selle tulemuse alusel leitakse kümnendarv (mis on -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 [viide].

Number 3,14 teisendatakse kujule 314 * 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⁺¹).

Arvväärtuste teisendamine ühest süsteemist teise

Tänapäeval on olemas kalkulaatorid ja programmid, mis võimaldavad teisendada arvu ühest süsteemist teise. Järgnevalt tuuakse välja valemid ja lahenduskäigud selle tegemiseks, kui puudub juurdepääs arvutile või kalkulaatorile.

Teises arvsüsteemis oleva arvu teisendamine kümnendsüsteemi

Kümnendsüsteemi arv saadakse teiste arvsüsteemide arvust kui arvus olev number (a) korrutatakse vastava numbrisüsteemi baasarvu astmega (bX-1) ja kõikide numbrite korrutis liidetakse kokku. Sellele vastab allpool esitatud üldvalem ning selle kasutamise näited leiab eelmistest peatükkidest.

  arv₁₀ = ⋯ + aX*b(X-1) + ⋯ + a₂*b(2-1) +a₁*b(1-1)

kus a – arvus olev number, b – arvusüsteemi baasarv (2, 8, 10 või 16), X – arvus oleva numbri asukoht arvus.

Kümnendsüsteemis oleva arvu teisendamine teiste arvsüsteemidesse

Joonis 3.1
Joonis 3.2

Kümnendsüsteemis olev arv teisendatakse teistesse arvsüsteemidesse (välja arvatud BCD) jagades see vastava süsteemi baasarvuga. Jagamistulemuse komakoht korrutatakse baasarvuga ja lisatakse uude arvu. Jagamistulemuse täisarv jagatakse uuesti baasarvuga. Seda tehakse niikaua kuni jagamistulemuse täisarv on null. Joonisel 3.1 on teisendatud kümnendarv 3429₁₀ HEX-süsteemi.

Ühest arvsüsteemist teise teisendamiseks on mõttekas kasutada vaheteisendust. Nt võtta HEX-süsteemis olev arv (D65HEX) teisendada see kümnendsüsteemi (3429) ja sealt edasi kaheksandsüsteemi (6545OCT). Või kasutada tabeli 3.6 abi ja kahendsüsteemi arvu vahearvuna (joonis 3.2).

DEC BIN OCT BCD HEX
0 0 0 0000 0
1 1 1 0001 1
2 10 2 0010 2
3 11 3 0011 3
4 100 4 0100 4
5 101 5 0101 5
6 110 6 0110 6
7 111 7 0111 7
8 1000 10 1000 8
9 1001 11 1001 9
10 1010 12 0001 0000 A
11 1011 13 0001 0001 B
12 1100 14 0001 0010 C
13 1101 15 0001 0011 D
14 1110 16 0001 0100 E
15 1111 17 0001 0101 F
16 1 0000 20 0001 0110 10

Arvude esitus PLC mälus

Joonis 3.3.

Enamus arve, mis on täisarvulised kümnendarvud, salvestatakse PLC mällu märgiga või märgita kahendarvu kujul. Joonisel 3.3 on andmete esitamiseks kasutatavate täisarvutüüpide UINT ja INT poolt PLC mälus hõivatav ala, kuhu salvestatakse muutuja arvväärtus kui märgita või märgiga kahendarv. Andmetüübid UINT ja INT kasutavad PLC mälus 16 bitti ehk siis võtavad enda alla 1 andmesõna. UNIT andmetüübiga muutuja puhul kasutatakse kõiki bitte arvu esitamiseks (sama ka BYTE, WORD, DWORD, LWORD, USINT, UDINT ja ULINT puhul). Arvu esitamist alustatakse kõige vähima kaaluga bitist (paremal pool olev esimene bitt 0) mis paikneb vähima kaaluga baidis.

Andmetüübiga INT muutujal alustatakse ka arvu salvestamist kõige vähima kaaluga bitist (joonisel 3.3 olev andmetüüp INT). Kuid INT puhul ei kasutata kõiki bitte arvu salvestamiseks. Kõige suurima kaaluga bitti (vasakul pool olev esimene bitt 15) arvu märgi S salvestamiseks. Kui suurima kaaliga biti väärtus on 1, siis PLC mällu salvestatud arv on negatiivne. Ülejäänud bitte alates 0 kuni 14 kasutatakse mälus oleva täisarvu hoidmiseks. SINT puhul on arvu märk salvestatud bitti 7 ja arv ise bittidesse 0 kuni 7. DINT puhul on arvu märk salvestatud bitti 31 ja arv bittidesse 0 kuni 30. LINT puhul on arvu märk salvestatud bitti 63 ja arv bittidesse 0 kuni 62.

Komaga kümnendarvu (reaalarvu, ujukomaarvu) salvestamiseks kasutatakse muutujat mille andmetüübiks on REAL või LREAL. Andmetüüp REAL võtab enda alla 32 bitti (joonis 3.4) ja LREAL 64 bitti PLC mälust. Reaalarvu puhul jaotatakse PLC mälupiirkond kolmeks osaks. Kõige vasakul olevas suurima kaaluga bitis (bitt 31, LREAL on bitt 63) paikneb reaalarvu märk (mantissi märki) S. Järgmised 8 bitti (bitid 23 kuni 30) salvestavad enda alla reaalarvu astendaja E ehk arvu mis määrab koma asukoha. LREAL on selleks 11 bitti alates 62 kuni 52. Astendaja E väärtust kasutatakse arvutuse 2E-127 jaoks (LREAL on selleks 2E-1023). Bitte 0 kuni 22 kasutatakse mantissi murdosa (komaga arv) M arvutamiseks (LREAL on bitid 0 kuni 51) [viited].

Joonis 3.4.

PLC mälus oleva reaalarvu kolme osa alusel saab arvutada tegeliku reaalarvu, kasutades järgmist valemit:

  Reaalarv (REAL) = (-1)S * (1 + M) * (2E-127)

See valem kehtib ainult andmetüübi REAL puhul. Kui PLC mälus on reaalarv kujul 0100000001100000 0000000000000000₂, siis suurima kaaluga bitt väärtusega 0₂ näitab reaalarvuga esitatava sisu positiivsust (+1). Astendaja E väärtus esitatakse kahendarvuga 10000000₂, millele vastav kümnendarv on 128. Mantissi murdosa M on esitatud kahendarvuna 11000000000000000000000₂, millele vastav kümnendarv on 0,75. Mantissi murdosa M väärtus arvutatakse bittide 22 ja 21 järgi, kuna nende bittide sisu on 1. Biti 22 väärtus on 0,5 (sellele vastab 2⁻¹) ja biti 21 väärtus on 0,25 (sellele vastab 2⁻²).

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

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

Enamus PLC-del ei ole eraldi andmetüüpi BCD arvude esitamiseks. Kuid nad pakuvad võimalust salvestada BCD arv mingisse teise andmetüüpi. CoDeSys pakub selleks andmetüüpe BYTE, mis võimaldab salvestada väärtui 0 kuni 99. BCD arv salvestatakse muutuja mällu samamoodi nagu märgita täisarv (joonis 3.3 andmetüüp UINT). Samas võib programmeerija ise luua andmetüübi BCD arvude salvestamiseks, kasutades selleks DUT faili.

Creative Commons Licence
"CoDeSys" is licensed under a Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Unported License .