Mehhatroonikaseadmed
Euroopa struktuurfondide logo

Matemaatilised ja teisendusfunktsioonid

Matemaatiliste funktsioonide teostamisel kasutatakse ainult numbrilisi muutujaid ja/või arve (konstant). Arvu tüübiks võib olla kas täis- või reaalarv. Kahendarvu kujul esitatud täisarvu ees on märk - või +. Täisarvulised muutujaid deklareeritakse andmetüübiga INT või DINT. Reaalarvud on komakohaga arvud, millel on ees arvu märk. Reaalarvud deklareeritakse andmetüübiga REAL. Tabelis 7.1 on toodud numbrilised andmetüübid, nende määramispiirkond, bittide arv (kui suurt ala vajavad mälus) ja konstandi näide (nii nagu neid kirjutatakse kasutaja programmis).

Andmetüüp INT DINT REAL
Piirkond -32 768 kuni 32 768 -214 783 648 kuni +214 783 647 ±1.75495e-38 kuni ±3.402823e+38
Mäluala 16 bitti = 1 sõna 32 bitti = 2 sõna 32 biti = 2 sõna
Konstandis kirjutamise näide 234
-15 674
L#25 000
L#-345 764
1.578
-2345.0
1.2e3 (1200)
3.5e-2 (0.035)

Aritmeetilised tehted ja teisendusfunktsioonid

Tehe Aritmeetikatehtes kasutatavad andmetüübid
INT DINT REAL
  STL FBD/ LAD STL FBD/ LAD STL FBD/ LAD
Liitmine +I ADD_I +D ADD_DI +R ADD_R
Lahutamine -I SUB_I -D SUB_DI -R SUB_R
Korrutamine *I MUL_I *D MUL_DI *R MUL_R
Jagamine /I DIV_I /D DIV_DI /R DIV_R
Jäägiga jagamine - - MOD MOD_DI - -

Standard IEC 61131 pakub aritmeetikatehete teostamiseks järgmisi aritmeetilisi funktsioone: liitmine (ADD), lahutamine (SUB), korrutamine (MUL), jagamine (DIV), jäägiga jagamine (MOD) ja astendamine (EXPT).

STEP 7 võimaldab teostada nelja tavalist aritmeetikatehet kasutades sisendis täisarvulisi (INT), topelttäisarvulisi (DINT) ja reaalarvulisi (REAL). muutujaid/operande. Seega teostatakse liitmist, lahutamist, korrutamist ja jagamist täisarvudega, topelttäisarvudega ja reaalarvudega. Peale tavalise jagamise funktsiooni pakutakse topelttäisarvude jaoks ka jäägiga jagamist (MOD_DI), kus tulemuseks on jagamise jääk (murdosa). Tabelis 7.2 on esitatud STEP 7 kasutatavad aritmeetikafunktsioonide tähised erinevate arvusüsteemide jaoks. Aritmeetikatehteid tehakse ainult sama tüüpi numbritega, muutujatega ja/või operandidega (INT, DINT, REAL) – seega tehte sisend- ja väljundoperandid peavad olema sama tüüpi.

STEP 7 eeskirja kohaselt kasutatakse aritmeetikatehete teostamiseks protsessori akumulaatoreid ACCU 1 ja ACCU 2. Loe selle kohta peatükkidest Binaarloogika funktsioonid → Loogikatehted ja Ülekande- ja programmi juhtimisfunktsioonid → Ülekandefunktsioonid.

Joonisel 7.1 on esitatud visuaalselt mõned STEP 7 aritmeetika funktsioonid. STL keeles on esitatud liitmisfunktsioon täisarvuliste muutujatega, FBD keeles korrutusfunktsioon reaalarvuliste muutujatega ning LAD keeles jäägiga jagamise (MOD_DI) funktsioon topeltsõna tüüpi muutujatega.

Joonis 7.1.

Arvfunktsioonid

Arvfunktsioonide teostamiseks on vaja ainult üht sisendoperandi. Tulemuseks on arvfunktsiooni väärtus [6]. Standard IEC 61131 deklareerib järgmisi arvfunktsioone: absoluutväärtus (ABS), ruut (SQRT), naturaallogaritm (LN), logaritm (log), eksponentsiialväärtus (EXP), siinus (SIN), koosinus (COS), tangens (TAN), arkussiinus (ASIN), arkuskoosinus (ARCOS) ning arkustangens (ARTAN). IEC 61131 näeb ette, et arvfunktsiooni sisend- ja väljundoperandid peavad olema sama tüüpi. Enamuse arvfunktsioonide juures saab kasutada ainult REAL-tüüpi muutujaid. Erandiks on absoluutväärtus, mis töötab ka INT ja DINT-tüüpi muutujatega. STEP 7 sisaldab enamuse standardis IEC 61131 defineeritud arvfunktsioone – puudub ainult logaritmfunktsioon.

Tabelis 7.3 on esitatud STEP 7 arvfunktsioonid STL ja FBD keeltes. Antud funktsioonid töötavad ainult reaalarvudega (sisendisse IN antakse ja väljundist OUT saadakse REAL-tüüpi väärtused). STEP 7 kasutab arvfunktsioonidega töötamisel akumulaatorit ACCU 1. Loe selle kohta peatükkidest Binaarloogika funktsioonid → Loogikatehted ja Ülekande- ja programmi juhtimisfunktsioonid → Ülekandefunktsioonid.

Nimi STL FBD/LAD
LN (naturaallogaritm) Tabeli Joonis Tabeli Joonis
EXP (eksponentsiial väärtus) Tabeli Joonis Tabeli Joonis
SIN (siinus) Tabeli Joonis Tabeli Joonis
COS (koosinus) Tabeli Joonis Tabeli Joonis
TAN (tangens) Tabeli Joonis Tabeli Joonis
ASIN (arkussiinus) Tabeli Joonis Tabeli Joonis
ACOS (arkuskoosinus) Tabeli Joonis Tabeli Joonis
ATAN (arkustangens) Tabeli Joonis Tabeli Joonis
ABS (absoluutväärtus) Tabeli Joonis Tabeli Joonis
SQR (ruut) Tabeli Joonis Tabeli Joonis
SQRT (ruutjuur) Tabeli Joonis Tabeli Joonis

Funktsiooni LN teostamisel arvutatakse naturaallogaritm (logaritm alusel e = 2,718282) reaalarvust (IN). Logaritmi väärtuse saab mingil teisel alusel (Logba) arvutada, kasutades seejuures naturaallogaritme, järgmise valemi abil:

Valem

Logaritmi alusel 10 saab arvutada järgmise valemi abil:

Valem

Funktsioon EXP võimaldab arvutada reaalarvu eksponentsiaalväärtuse alusel e. Reaalarvu eksponentsiaalväärtuse mingil teisel alusel (ba ) saab arvutada järgmise valemiga:

Valem

Arvfunktsioonide SIN, COS või TAN abil arvutatakse mingi nurga siinus, koosinus või tangens. Arvutamisel antakse nurk ette radiaanides. Nurga väärtus saab olla 0 kuni 2π (π = 3.14). Kui nurga väärtus (radiaanides) on suurem kui 2π, siis tuleb sellest lahutada 2π seni, kuni nurga väärtus saab võrdseks või väiksemaks kui 2π.

Funktsioonide ASIN (arkussiinuse), ACOS (arkuskoosinuse) või ATAN (arkustangensi) sisendisse (IN) antud reaalarvust saab arvutuse tulemusena nurga väärtuse radiaanides. Funktsioonide ASIN ja ACOS puhul peab sisendoperandi IN väärtus olema suurem või võrdne -1 ja väiksem või võrdne +1. Joonisel 7.2 on esitatud funktsioonide ASIN, ACOS ja ATAN väljundväärtuste piirkond radiaanides.

Arvfunktsiooni ABS teostamise tulemusena saab (väljundisse) positiivse väärtusega reaalarvu, funktsioon SQR arvutab reaalarvu ruutväärtuse ning funktsioon SQRT ruutjuure reaalarvust. Funktsiooni SQRT väljundväärtus on positiivne (vastav tehe teostatakse), kui sisendoperandi väärtus on suurem või võrdne nulliga.

Teisendusfunktsioonid

Teisendusfunktsioone kasutatakse üht tüüpi andmete teisenduseks teist tüüpi andmeteks [6]. Näiteks on mingis aritmeetikatehtes vaja kasutada BCD-koodis esitatud operandi. Selleks tuleb operandi väärtus BCD-koodis teisendada täis- või reaalarvu kujule. Seejärel saab täis- või reaalarvu kujul operandi kasutada aritmeetikatehtes. Kui täis- või reaalarvulist aritmeetikatehte tulemust on vaja esitada BCD koodis, siis tuleb kasutada vastupidist teisendamist.

Nimi Kommentaar
BCD_TO_INT Teisendusfunktsiooni sisendisse antud BCD-koodis väärtus teisendatakse teostamise käigus ja väljundisse antakse juba täisarvu tüüpi väärtus.
INT_TO_BCD Funktsiooni sisendi täisarvuline väärtus teisendatakse BCD-koodi.
INT_TO_REAL Funktsiooni sisendi täisarvuline väärtus teisendatakse reaalarvuliseks.
REAL_TO_INT Funktsiooni sisendi reaalarvuline väärtus teisendatakse täisarvu väärtuseks. Teisendamisel ümardatakse arv lähimaks täisarvuks.
TRUNC Funktsiooni sisendisse antud reaalarvuline väärtus teisendatakse täisarvuliseks. Tulemuseks on reaalarvu täisosa. Komakoht kustutatakse.

Tabelis 7.5 on esitatud STEP 7 teisendusfunktsioonide tähised STL, FBD ja LAD keeles. Teisendusfunktsiooni teostamisel kasutatakse ainult protsessori akumulaatorit ACCU 1. Loe selle kohta peatükkidest Binaarloogika funktsioonid → Loogikatehted ja Ülekande- ja programmi juhtimisfunktsioonid → Ülekandefunktsioonid.

Nimi STL FBD/LAD Kommentaar
BCD_TO_INT BTI BCD_I BCD-koodis olev väärtus teisendatakse 16-bitiseks täisarvväärtuseks.
BCD_TO_DINT BTD BCD_DI BCD-koodis olev väärtus teisendatakse 32-bitiseks (topelt) täisarvväärtuseks.
INT_TO_BCD ITB I_BCD 16-bitine täisarvväärtus teisendatakse BCD-koodi väärtuseks.
INT_TO_DINT ITD I_DI 16-bitine täisarv väärtus teisendatakse 32 bitiseks (topelt) täisarv väärtuseks.
DINT_TO_BCD DTB DI_BCD 32-bitine (topelt) täisarvväärtus teisendatakse BCD-koodi väärtuseks.
DINT_TO_REAL DTR DI_R 32-bitine (topelt) täisarvväärtus teisendatakse reaalarvu väärtuseks.
REAL_TO_INT RND ROUND Reaalarvu väärtus ümardatakse 32bitiseks (topelt) täisarvuks.
RND+ CEIL Reaalarvu väärtus ümardatakse 32-bitiseks (topelt)täisarvuliseks väärtuseks, mis on suurem või võrdne kirjeldatava reaalarvuga.
RND- FLOOR Reaalarvu väärtus ümardatakse 32-bitiseks (topelt)täisarvu väärtuseks, tulemus on väiksem või võrdne kirjeldatava reaalarvuga.
TRUNC TRUNC Reaalarvu väärtus ümardatakse 32-bitiseks (topelt)täisarvuks. Tulemuseks on reaalarvu täisosa.
INVI INVI INV_I Ühenitäiend täisarvuga(16 bitti).
INVD INVD INV_DI Ühenitäiend topelt täisarvuga (32 bitti).
NEGI NEGI NEG_I Kahenitäiend täisarvuga (16 bitti).
NEGD NEGD NEG_DI Kahenitäiend topelttäisarvuga (32 bitti).
NEGR NEGR NEG_R Reaalarvu vastandväärtus.

BCD-koodi väärtuste teisendamine

Joonis 7.3.

BCD-koodis esitatud väärtus teisendatakse täisarv või topelttäisarv tüüpi väärtusteks kasutades funktsioone BCD_TO_INT või BCD_TO_DINT (tabel 7.5). Teisendada saab ainult kuni kolmekohalisi (täisarv) või seitsmekohalisi (topelttäisarv) arve (joonis 7.3). Arvu märgi väärtus on BCD-koodis salvestatud 15 või 31 bitti (0 tähistab positiivset ja 1 negatiivset märki). Teisendusel võib tekkida viga, kui 4 bitises BCD-koodis on väljendatud arve alates 10 kuni 15. Sellise vea esinemisel võib PLC minna STOPP režiimi.

Joonisel 7.4 on esitatud mõned STEP 7 BCD-koodi teisendusfunktsioonid. STL ja FBD keeltes on esitatud funktsioon BCD_TO_INT ning LAD keeles funktsioon BCD_TO_DINT.

Joonis 7.4.

Täis- ja topelttäisarvu väärtuste teisendamine

Joonis 7.5.

Täis- ja topelttäisarve saab teisendada täisarvuks, topelttäisarvuks, reaalarvuks ja BCD- koodi esitatud väärtuseks, kasutades funktsioone INT_TO_BCD, INT_TO_DINT, DINT_TO_BCD, DINT_TO_INT ja DINT_TO_REAL (tabel 7.5)

Funktsioonidega INT_TO_BCD ja DINT_TO_BCD teisendatakse täis- ja topelttäisarvu kujul esitatud väärtused BCD-koodis esitatavateks väärtusteks (joonis 7.5). Arvu märgi väärtus on salvestatud täisarvus bittidesse 12 kuni 15 (topelttäisarvu puhul on selleks bitid 28 kuni 31) (0 on positiivne, 1 on negatiivne). Täisarvuna esitatud väärtust ei teisendata BCD-koodi, kui see on suurem kui 999 või väiksem kui -999. Sama kehtib ka topelttäisarvu väärtusega, kui see on suurem kui 9999999 või väiksem kui -9999999.

Funktsiooniga INT_TO_DINT teisendatakse täisarvu väärtus topelttäisarvu kujule. Esimesed 15 bitti täisarvust kantakse otse edasi topelttäisarvu 15 esimesse bitti (joonis 7.6). Täisarvu viimane bitt (15) kantakse ka topelttäisarvu, kuid selles oleva väärtusega täidetakse bitid 15 kuni 31. STEP 7 kasutatakse Funktsiooni MOVE topelttäisarvu väärtuse teisendamiseks täisarvuliseks väärtuseks. Kui topelttäisarvu väärtus ületab täisarvule lubatud piirid (selles kasutatakse 16 bitti), siis antakse täisarvule juhuslike numbriline väärtus.

Joonis 7.6.

Funktsiooniga DINT_TO_REAL teisendatakse topelttäisarvuna esitatud väärtus reaalarvuks, mille andmetüüp on REAL (joonis 7.6).
Joonisel 7.7 on esitatud mõned STEP 7 täis- ja topelttäisarvu väärtuste teisendusfunktsioonid. STL keeles on esitatud funktsioon INT_TO_BCD, FBD keeles on esitatud funktsioon INT_TO_DINT ning LAD keeles funktsioon DINT_TO_REAL.

Joonis 7.7.

Reaalarvu väärtuse teisendamine

STEP 7 pakub reaalarvu väärtuse teisendamiseks topelttäisarvu kujule 4 funktsiooni. Need neli teisendusfunktsiooni erinevad üksteisest arvu ümardamise poolest.

Funktsiooni ROUND (RND) tulemuseks on reaalarvule lähim täisarv. Kui teisendatava arvu murdosa väärtus asub täpselt paaris ja paaritu arvu väärtuste vahel, siis see funktsioon annab tulemuseks paarisarvu väärtuse. (joonis 7.8) [6].

Joonis 7.8.

Funktsiooni CEIL (RND+) tulemuseks on võimalikult väike täisarv, kuid selle väärtus on siiski suurem või võrdne teisendamiseks kasutatava reaalarvu väärtusega (joonis 7.8).
Funktsiooni FLOOR (RND-) tulemuseks on võimalikult suur täisarv, kuid selle väärtus on siiski väiksem või võrdne teisendamisel kasutatava reaalarvu väärtusega (joonis 7.8).
Funktsiooni TRUNC (RND-) tulemuseks on teisendatava reaalarvu väärtuse täisosa (joonis 7.8).

Reaalarvu topelttäisarvuks teisendamist ei toimu, kui teisendatava reaalarvu väärtus ületab topelttäisarvu väärtuse piirid.

Joonisel 7.9 on esitatud STEP 7 mõned reaalarvu väärtuse teisendusfunktsioonid. STL keeles on esitatud funktsioon ROUND, FBD keeles on esitatud funktsioon CEIL ning LAD keeles funktsioon TRUNC.

Joonis 7.9.

Teisendamine väärtuse täiendamisega

Digitaaltehnikas tuntakse kaht tüüpi täiendamist. Ühenitäiendi puhul inverteeritakse väärtuse igat bitti eraldi. Ühenitäiend moodustatakse funktsiooni “NOT” abil. Liitmisel ühenditäiendi tulemusele juurde üks saadakse kahenitäiend. Kahenitäiend moodustatakse teisendatava väärtuse korrutamisel arvuga -1 [6]. Neid funktsioone ei ole standardis IEC 61131, mõlemad täiendamised eksisteerivad STEP 7 keskkonna LAD, FBD ja STL keeltes inverteerimis- ja eitusfunktsioonidena.

Joonis 7.10.

Ühenitäiend (INVI, INVD) funktsioonid inverteerivad (topelt)täisarvu väärtust bitthaaval, st, et 0 asendatakse 1 ja 1 asendatakse 0 (joonis 7.10). Funktsiooniga INVI inverteeritakse ainult ACCU 1 16 esimest bitti (bitt 0 – bitt 15).

Joonis 7.11.

Kahenitäiendi (NEGI, NEGD) funktsiooni tulemus ((topelt)täisarvu väärtus) leitakse kahes etapis. Esimeses etapis inverteeritakse täisarvu väärtuse bitid (moodustatakse ühenitäiend), teises etapis liidetakse inverteeritud väärtusele juurde +1 (joonis 7.11). Funktsiooni NEG_INT puhul kasutatakse ainult ACCU 1 16 esimest bitti kahenitäiendi moodustamisel.
Reaalarvu kahenitäiendi moodustamise (NEGR) tulemuseks on selle reaalarvu vastandväärtus. Selle funktsiooniga inverteeritakse arvus ainult 31 bitti (arvu märki).

Joonisel 7.12 on esitatud STEP 7 üheni- ja kahenitäiendi funktsioonid. STL keeles on esitatud ühenitäiend koos täisarvu tüüpi muutujatega, FBD keeles on esitatud kahenitäiend koos topelttäisarvu tüüpi muutujatega ning LAD keeles kahenitäiend koos reaalarvu tüüpi muutujatega.

Joonis 7.12.

BYTE, WORD ja DWORD väärtuste teisendamine

STEP 7-s olevates STL, FBD ja LAD keeltes võib kasutada BYTE, WORD ja DWORD tüüpi digitaalandmete väärtuste teisendamiseks muud tüüpi andmeteks (nt BYTE, WORD, INT, DWORD, DINT jne) ülekandefunktsiooni MOVE. Juhul, kui teisendusfunktsiooni sisendis digitaalarvu väärtus ületab väljundis lubatud väärtuse piiri, võib teisenduse tulemusena tulla väljundisse väärtuseks juhuslik number.

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