SIMATIC STEP 7 programozás Adattípusok és paramétertípusok Kivonatos ismertetés, angol nyelvű STEP 7 szoftvert használóknak Ez a segédlet a SIMATIC S7-300, S7-400, C7, ET-200 IM CPU és az embedded, illetve PC-based (WinAC szoftver PLC) kontrollerek programozásához használható.
Siemens Zrt. Ipari Szektor, Industry Automation & Drive Technologies Copyright © Siemens Zrt. 2010.
STEP 7 adattípusok és paramétertípusok
1
Az esetleges hibákért felelősséget nem vállalunk. Részletes gépkönyvek és további dokumentumok világnyelveken letölthetők az Internetről: www.siemens.com/automation/service&support Magyar nyelvű segédletek letöltési címe: www.siemens.hu/ad Katalógusok letöltési címe: www.automation.siemens.com/infocenter SIMATIC internet oldal címe: www.siemens.com/simatic Információ-kérés magyar nyelven:
[email protected]
STEP 7 adattípusok és paramétertípusok
2
Tartalom 1. Elemi adattípusok 2. Összetett adattípusok 3. Paramétertípusok
STEP 7 adattípusok és paramétertípusok
3
Adat- és paramétertípusok Bevezetés A felhasználói programokban alkalmazott Minden adatnak rendelkeznie kell valamilyen típusmegnevezéssel. A típuscsoportok a következők: •
elemi adattipusok,
•
összetett adattipusok,
• paramétertipusok , amelyekkel olyan paramétereket definiálnak, amiket FB-k ill. FC-knek átadnak.
Allgemeine Information Néhány adattipus különböző formátum-lehetőségekkel rendelkezik. Míg a bit, vagyis egy adat, amelynek csak két lehetséges értéke van, magától értetődően csak un. Bitminta formátumban jelenhet meg, addig pl. A szó (Word) megjelenítése több formátumban is lehetséges. A következő táblázat formátumokat mutat be, amelyekkel a változókat vagy állandókat meg lehet jeleníteni.
Formátum
Bitek száma
Számábrázolás (példa)
Hexadecimális
8, 16 und 32
W#16#A123 (
Bináris
8, 16 und 32
2#1011
IEC-Dátum
16
D#
IEC-Idő
32
T#
Fixpontos (integer)
16
132
Karakter
8
’A’
W#16#A123
W
szóméretű (16-bites)
16
hexadecimális szám
A123
hexadecimális ábrázolás (41251 decimális szám)
#
elválasztójel
Ábrázoláskor alapvetően a szabály: ha a szám írásmódjában kifejezi típusát, akkor nem szükséges egyéb megkülönböztető jelzést alkalmazni. Pl. 132 kifejezi, hogy egészszám, és ennek legcélszerűbb megjelenítési módja a tizes számrendszer. A szám más formátumú megjelenítése esetén a fenti jeleket kell alkalmazni, tehát: A decimális
132 = B#16#84
hex. Formátumban.
(A fenti ismertetés csak példa, a teljes formátum-szabályokat a következőkben látható táblázatok tartalmazzák.)
Elemi adattípus A Siemens S7-es rendszerében minden olyan tipus elemi adattipus, amely maximálisan 32 bit hosszú, és nem áll más elemi adattipusból (pl. Ha egy nyolcbites tárolási egységet bájtként kezel a program, akkor az elemi adattipus, ha azonban nyolcbites tömbként (array, Feld, tömb), STEP 7 adattípusok és paramétertípusok
4
akkor az összetett adattipus, mert nyolc darab elemi bit-ből áll, amelyek a tömbön belül különkülön megszólíthatók). Minden elemi adattipus meghatározott hosszal rendelkezik. A következő táblázat tartalmazza, az elemi típusokat. Típus (név)
Bitek Formátumok száma
Tartomány és számábrázolás Példa (legalacsonyabb és legmagasabb érték)
BOOL (Bit)
1
Bool-Szöveges IGAZ/HAMIS
IGAZ, 1
BYTE (bájt)
8
hexadecimális
B#16#0 …. B#16#FF
B#16#10
WORD (szó)
16
Bináris szám
2#0 …..
2#0001_0000_0000_0000
2#1111_1111_1111_1111 W#16#1000
hexadecimális szám
W#16#0 ... W#16#FFFF
BCD
C#0 ... C#999
B#(10,20)
decimális szám előjel nélkül
B#(0,0) ... B#(255,255)
byte#(10,20)
Bináris szám
2#0 ….
2#1000_0001_0001_1000_
2#1111_1111_1111_1111_
1011_1011_0111_1111
word#16#1000 C#998
DWORD
32
(duplaszó)
1111_1111_1111_1111 hexadecimális szám
DW#16#0000_0000 …. DW#16#FFFF_FFFF
DW#16#00A2_1234 dword#16#00A2_1234 B#(1, 14, 100, 120)
decimális szám előjel nélkül INT
-32768 bis 32767
1
32
decimális szám előjellel
L#-2147483648 …. L#2147483647
L#1, 1
32
IEEE
Fölső határ: 3.402823e+38
1.234567e+13
lebegőpontos szám
Alsó határ: 1.175 495e-38
S7-időadat
S5T#0H_0M_0S_10MS ...
S5T#0H_1M_0S_0MS
10 ms lépésekben
S5T#2H_46M_30S_0MS és
S5TIME#0H_1H_1M_0S_0MS
(valós szám) S5TIME
16
(SIMATIC-idő) TIME
B#(255,255,255,255)
decimális szám előjellel
(egészszám) REAL
byte#(1,14,100,120)
16
(egészszám) DINT
B#(0,0,0,0) ….
32
(IEC-idő)
S5T#0H_0M_0S_0MS
IEC-időadat 1 T#0D_1H_1M_0S_0MS ms lépésekben T#24D_20H_31M_23S_648MS TIME#0D_1H_1M_0S_0MS előjellel …. T#24D_20H_31M_23S_647MS
DATE
16
(IEC-Dátum) TIME_OF_DAY
32
(időpont) CHAR
8
IEC-Dátum 1napos lépésekben
D#1990-1-1 ...
D#1994-3-15
D#2168-12-31
DATE#1994-3-15
Időpont 1 ms lépésekben
TOD#0:0:0.0 ….
TOD#1:10:3.3
TOD#23:59:59.999
TIME_OF_DAY#1:10:3.3
ASCII-karakter ’A’,’B’ stb.
’E’
(karakter)
STEP 7 adattípusok és paramétertípusok
5
Az INT adattípus formátuma (16-Bites egészszám) Az egészszám előjellel rendelkezik, ami jelzi, hogy negatív vagy pozitív számról van szó. Az egészszám a tárban 16 bitet, tehát egy szó helyet foglal el. A következő ábra az INT tipus tartományát mutatja. Formátum
Tartomány
16-Bites egészszám
-32 768 …. +32 767
A +44 egészszám látható alábbiakban bináris alakban
előjel
Decimális érték:
STEP 7 adattípusok és paramétertípusok
6
A DINT adattípus formátuma (32-Bites egészszám) Az egészszám előjellel rendelkezik, ami jelzi, hogy negatív vagy pozitív számról van szó. Az egészszám a tárban 32 bitet, tehát egy szó helyet foglal el. A következő ábra az DINT tipus tartományát mutatja. Formátum
Tartomány
32-Bites egészszám
-2 147 483 648 ... +2 147 483 647
A -500 000 egészszám látható alábbiakban bináris alakban. A bináris számrend-szerben egy egészszám negatív értékét a pozitív érték kettes komplemensével ábrázolják. Egy szám kettes komplemensét úgy képzik, hogy a szám minden bitjét megfordítják (invertálják), és az eredményhez +1-et hozzáadnak.
elő jel
STEP 7 adattípusok és paramétertípusok
7
A REAL adattipus formátuma (lebegőpontos szám, valós szám) E
A valós számokat a következő általános alakban ábrázolják a matematikában: "szám = m b " . A "b" alap és az "E" kitevő egészszámok, az „m“ mantissza valós szám. Ennek az ábrázolási módnak az a nagy előnye, hogy igen kis helyen igen nagy és igen kis értékeket lehet ábrázolni. A mantissza és a kitevő megadására használt korlátozott mennyiségű bittel igen nagy számtartományt lehet átfogni. Hátránya a korlátozott számítási pontosság.
A lebegőpontos formátum a STEP7-ben A STEP7 által használt lebegőpontos formátum megfelel az egyszerű szélességű alapformátumnak a 754-1985, IEEE Standard for Binary Floating-Point Arithmetic ANSI/IEEE szabvány szerint. A számábrázoláshoz alkalmazott képlet elemei a következők: •
„V“ előjel
•
„e“ a +127 -es állandóval megnövelt kitevő, tehát e = E + 127
•
„m“ a mantissza törtrésze, maga a mantissza nem kerül a képletbe, mert az az érvényes számtartományban mindig = 1.
A három alkotórész egy duplaszó helyet foglal a tárban.
el őj
expon ens:e
Manti ssza:
A következő táblázat az egyes bitek értékét mutatja A lebegőpontos szám részei
Bit-szám
Érték
„V“ Előjel
31-es bit
„e“ exponens
30
2
...
...
...
„e“ exponens
24
2
1
„e“ exponens
23
2
0
„m“ mantissza
22
2
-1
...
...
...
„m“ mantissza
1
2
-22
„m“ mantissza
0
2
-23
7
A három összetevő alkalmazásával az ebben a formátumban ábrázolt szám a következő képlet szerint történik: szám = 1,m 2
e-127
a képletben: •
e: 1 e 254
•
V: pozitív számnál V = 0, negatív számnál V = 1.
A lebegőpontos számok tartománya a fenti képlet szerint ábrázolt lebegőpontos szám szerint: STEP 7 adattípusok és paramétertípusok
8
Formátum
Tartomány
Az ANSI/IEEE szerinti lebegőpontos számok
-3,402 823E+38 ... -1,175 495E-38 és 0 és +1,175 495E-38 ….+3,402 823E+38
Pontosság a lebegőpontos számokkal történő számításoknál A nagy nagyságrendi különbségeket felmutató számokkal végrehajtott számításoknál (több tizes hatvány) pontetlanságok léphetnek fel a számítási eredményekben. A STEP7-ben használt lebegőpontos számok 6 tizedesjegyig pontosak. Ezért lebegőpontos állandók megadásánál csak max. 6 tizedesjeyet adhat meg. A 6-tizedes számítási pontosság pl. A következőt jelenti: a szám1 + szám2 = y szám1 lehet, ha a szám1 nagyobb mint a szám2 * 10 ahol az y>6. Pl.: 100 000 000 + 1 = 100 000 000.
Példa a lebegőpontos számok ábrázolására A következő ábra az alábbi tizedes törteket (valós számokat) mutatja lebegőpontos számként bitminta formátumban. •
10,0
•
Pi (3,141593)
•
a 2 négyzetgyőke (1,414214)
A 10,0 a fenti képlet szerint a következő képet mutatja lebegőpontos számként: 7
1
e = 2 + 2 = 130 -2
m = 2 = 0,25 Ezzel: (1 + m) 2
(e-127)
(130-127)
[1,25 2
3
= 1,25 2 = 10,0 3
= 1,25 2 = 10,0]
STEP 7 adattípusok és paramétertípusok
9
Decimális érték: 10,0
STEP 7 adattípusok és paramétertípusok
10
Az S5TIME adattipus formátuma (időtartam) Ha az időműveleteknél az időtartam megadására az S5TIME adattipust használják, akkor a beadott értéket a rendszer BCD-formátumban fogja tárolni. A következő ábra az így beadott érték bitmintáját mutatja. A beadott érték 127 s:
Időérték BCD Időalap: formátumban 1s Lényegtelen: ezeket az operációs rendszer figyelmen kívül hagyja Ha az S5TIME időadattal dolgoznak, akkor időértékre 0...999 között lehet adatot bevinni, és meg kell adni az időalapot (lásd az alábbi táblázatot). Az időalap azt az intervallumot határozza meg, amellyel az operációs rendszer az időértéket visszaszámolja nulláig. Időalapok az S5TIME- adattipusnál Időalap
Bináris kód
10 ms
00
100 ms
01
1s
10
10 s
11
Ha tehát a 13-as és 12-es bitre az 10 kódot adják be, akkor az időalap 1 s, vagyis a beadott időértéket 1 másodpercenként számolja vissza nulláig. A következő szintaktikával be lehet vinni egy adott időértéket: •
L W#16#wxyz ahol: - w = időalap - xyz = időérték BCD-Formátumban • L S5T#aH_bbM_ccS_dddMS ahol: - a = óra, bb = perc, cc = másodperc és ddd = Millisekundum
ennél a szintaxisnál az időalapot az operációs rendszer automatikusan választja ki, és az értéket kerekíti az időalapnak megfelelő legkisebb következő értékre. A maximálisan bevihető időtartam ennél az időmegadásnál 9990 másodperc (10 s időalap, 999-es időérték) vagy 2H_46M_30S
STEP 7 adattípusok és paramétertípusok
11
Összetett adattipusok A Siemens S7-es rendszerében minden olyan tipus összetett adattipus, amely vagy 32 bit-nél hosszabb, vagy más elemi adattipusból tevődik össze (pl. Ha egy nyolcbites tárolási egységet bájtként kezel a program, akkor az elemi adattipus, ha azonban nyolcbites tömbként (array, Feld, tömb), akkor az összetett adattipus, mert nyolc darab elemi bit-ből áll, amelyek a tömbön belül külön-külön megszólíthatók). A STEP 7 a következő összetett adattipusokat tudja kezelni: •
DATE_AND_TIME
•
STRING
•
ARRAY (tömb, mátrix)
•
STRUCT (Struktura)
•
UDT (felhasználó által definiált típus)
•
FB és SFB (ill. annak instant-DB-je)
A következő táblázat felsorolja és jellemzi az összetett adattipusokat. Ezeket vagy a függvények (FC, FB, OB) deklarációs részében vagy az adatmodulokban (adatblokkokban) lehet alkalmazni. Adattipus
Leírás
DATE_AND_TIME
64-bites területet határoz meg a tárban, amely a dátum és az időpont tárolására alkalmas. Az adatokat BCD-formátumban tárolja.
DT STRING
Maximum 254 írásjel tárolására alkalmas területet határoz meg (254 db CHAR típus). A maximális méret e karaktersorozat számára 256 bájt: 254 karakter + 2 bájt fej. A karaktersorozat területét csökkenteni lehet azzal, hogy definiáláskor a hosszat is megadják. Ez a következőképpen történik: nev[9] „siemens“.
ARRAY
Egy adott adattípus (lehet elemi vagy összetett) többdimenziós csoportját definiálja. Például: az ARRAY [1..2,1..3] OF INT definíció 2 x 3 egészszámból álló tömböt hoz létre. Az elemekhez az index megadásával lehet hozzáférni, a dimenziók száma max. 6 lehet. (részletek később)
STRUCT
Tetszőleges adattipusokból álló változók csoportját definiálja. Az alkotó részek lehetnek elemi tipusok vagy összetett tipusok. (részletek később)
UDT
Lehetővé teszi nagy adatmennyiség strukturálását és az adattipusok és adataik egyszerűbb bevitelét. Saját struktúrákat lehet létrehozni, és többszörösen felhasználni (tehát a programozó hozza létre a struktúrát és azt saját típusként deklarálja. Az UDT-k saját névvel rendelkeznek (legegyszerűbb esetben UDT1, UDT2 stb.).
FB, SFB
Az FB-k és SFB-k nem adattipusok, de a velük összekapcsolódó instant-DB-k mintegy összetett adatként felfohatók, amelyeken keresztül sz FB-nek adatokat lehet egy tömbben átadni.
A DATE_AND_TIME (Dátum és időpont) összetett tipus szerkezete Ha a STEP 7-es programozás során a dátumot és az időpontot a DATE_AND_TIME adattipussal akarják beadni, akkor bevitelük a tárban 8 bájtban fog elhelyezkedni, és a bevitt tartalom BCD-formátumban található. A DATE_AND_TIME adattipus (DT) a következő tartományt tudja befogadni:
STEP 7 adattípusok és paramétertípusok
12
DT#1990-1-1-0:0:0.0 ... DT#2089-12-31-23:59:59.999 A következő pédák mutatják azt a szintaxist, amellyel a dátumot és az időpontot egy DTváltozóban 1993. december 25. 8:12, 34,567 másodperc-re lehet beállítani. A következő két megadás lehetséges: •
DATE_AND_TIME#1993-12-25-8:12:34.567
•
DT#1993-12-25-8:12:34.567
A következő táblázat tartalmazza azt az összeállítást, amit fenti időpont megadása után a 8 egymás utáni bájt tartalmaz. A példa tehát az 1993.december 25., 8:12 óra és 34,567 másodperc adatot jeleníti meg: Bájt
A tartalom megnevezése
A bájt tartalma
0
év
B#16#93
1
hónap
B#16#12
2
nap
B#16#25
3
óra
B#16#08
4
perc
B#16#12
5
másodperc
B#16#34
6
Az MSEC két magasabb értékű számjegye
B#16#56
7 (4MSB)
Az MSEC alacsonyabb értékű számjegye
B#16#7_
7 (4LSB)
A hét napja 1 = vasárnap 2 = hétfő ... 7 = szombat
B#16#_5
A "DATE_AND_TIME" lehetséges értékei: •
min.: DT#1990-1-1-0:0:0.0
•
max.: DT#2089-12-31-23:59:59.999 Möglicher Wertebereich
BCD-Code
1990 - 1999 2000 - 2089
90 - 99 00 - 89
1 - 12
01 - 12
Nap
1 - 31
01 - 31
Óra
00 - 23
00 - 23
Perc
00 - 59
00 - 59
Másodperc
00 - 59
00 - 59
Milliszekundum
0 - 999
000 - 999
Vasárnap - szombat
1-7
Év Hónap
A hét napja
STEP 7 adattípusok és paramétertípusok
13
Tömb (mátrix) alkalmazása az adatkezelésben Tömbök létrehozása A tömb egyfajta típusu (elemi vagy összetett) adatok összefüggő csoportját kapcsolja össze. Tömböt tömbökből nem lehet létrehozni. A tömb használata a Siemens PLC-iben a STEP7 bevezetésekor vált lehetségessé. A jólismert STEP5-ös rendszerben összetett típusokat és így természetesen a tömböt sem lehetett alkalmazni. Ennek ellenére minden műszaki feladatot meg lehetett oldani az S5-ös készülékekkel is. A tömb használata tehát nem elengedhetetlen, de jelentősen növeli az adatkezelés matematikai szinvonalát, rugalmasságát és áttekinthetőségét, egyszerűbb feladatoknál azonban szükségtelen. A tömb használatához először is olyan adatok kellenek, amelyek tömbbe szervezhetők. Ezekhez az adatokhoz a felhasználónak a tömböt létre kell hozni, másként kifejezve deklarálni kell. Tömböket DB-kben vagy a programmodulok (OB, FC, FB) deklarációs részében lehet deklarálni. Ez a deklarációs rész a STEP7 5-ös verziójában két különböző megjelenítési módban fordul elő.
Az ábrán látható egy DB deklarációs táblája. A DB-ben deklaráltak egy tömböt, amelynek a Waerme_2x3 nevet adták. A deklarációhoz a „Typ“ oszlopba az „ARRAY“ kulcsszót kellett beadni, ez jelenti a tömböt, majd meg kellett adni a tömb tulajdonságait. A tömb két fontos tulajdonsággal rendelkezik: −
szerkezete és mérete: ezt a szögletes zárójelben megadott számok mutatják [1..2,1..3]
A mező méretét egy indexel kell megadni. Az egyes dimenziók (max. 6 dimenzió) első és utolsó elemszámát kell ebben az idexben megadni. Az elemszámokat két ponttal, a dimenziókat vesszővel kell egymástól elválasztani. Az indexet szöletes zárójelben kell megadni. −
a benne tárolt adatok típusa: ezt a következő sor tartalmazza INT
STEP 7 adattípusok és paramétertípusok
14
A szögletes zárójelben látható, hogy a példa szerinti tömb kétdimenziós, a számok pedig azt mutatják, hogy a dimenziók hány elemet tartalmaznak. Az első dimenzió két elemű (1..2), a második háromelemű (1..3). Kezdeti érték beadása a tömb egyes elemeibe A tömb létrehozatalakor minden elemnek kezdeti értéket lehet beadni. Erre a STEP7-ben két lehetőség kínálkozik: • az értékek egyenkénti beadása: a tömb elemeibe érvényes adatot adhat be (jelen esetben az INT típusnak megfelelő). A beadás a kezdeti érték (Anfangswert) nevű oszlopba történik, szögletes zárójelek közé az elemek sorrendjében: [1,1]. Az egyes elemeket egymástól vesszővel kell elválasztani. • ismétlési tényező alkalmazása: abban az esetben, ha az egymás utáni elemek kezdeti értéke megegyezik, akkor a bevitel ismétlési tényező alkalmazásával egyszerüsíthető. Az ismétlési tényező beviteléhez a formátum x(y), ahol az x az ismétlési tényező, az y pedig az érték, amit ismételni kell. Ha a fenti példa szerinti tömböt használják, akkor a kezdeti értékeket az összes hat elemre, amennyiben ezek mind különböznek, a következő módon adhatják meg: 17, 23, -45, 556, 3342, 0. Ha azonban pl. minden elem kezdeti értéke 10, akkor célszerűbb a következő megoldást használni: 6(10) . Az is lehetséges, hogy az első két elem eltérő, de a többi pl. mind 0, ekkor a megadás legcélszerűbb módja: 17, 23, 4(0).
Hozzáférés a tömb elemeihez A tömb elemeihez az elem indexein keresztül lehet hozzáférni. Az előbbi példában egy DB látható, és benne egy tömb. Ha az első dimenzió második eleméhez akarnak hozzáférni, akkor a következő utasítást kell programozni: L Motor.Waerme_2x3[1,2]. Az utasítás az AKKU1-be tölti a Motor nevű DB Waerme_2x3 nevű tömbjéből az első dimenzió második elemét.
Példák: 1. A következő ábra három egészszámot tartalmazó tömböt mutat. Az elemekhez a hozzáférés az indexszel lehetséges. Az index a szögletes zárójelben lévő szám. A második egészszám indexe pl. Op_Temp[2]. Az index tetszőleges egészszám lehet a -32768 bis 32767 tartományban, tehát akár negatív szám is lehet.
STEP 7 adattípusok és paramétertípusok
15
Ha feltesszük, hogy a fenti ábra egy „Hőmérsékletek“ nevű DB deklarációs része (a név a globális szimbólumok listájában keresendő, erre utal az idézőjel !), akkor a hozzáférés a második elemhez: L
„Hőmérsékletek“.Op_Temp[2]
Hogy miért „Hőmérsékletek“. , azt a struktúrákkal foglalkozó rész tartalmazza.
2. A következő ábrán kétdimenziós tömb látható, amelynek elemei ugyancsak egészszámok. A többdimenziós tömbben is az index nyújt lehetőséget az elemekhez való hozzáférésre. A kétdimenziós tömböt úgy lehet tekinteni, mint ha a második dimenzióban lévő elemekből az első dimenzióban megadott számú „készlet“ lenne. Így hozzáféréskor, először meg kell adni a „készlet“ sorszámát (1. vagy 2.), majd a megadott „készletben“ az elemszámot (1., 2. vagy 3.), tehát: Betr_Temp[2, 2] vagyis ez a második „készlet“ 2. eleme, másként kifejezve az össz elemszámból az 5.
A
STEP7 nyelvben maximálisan 6 dimenzió lehet (hat index) egy tömbben. Tehát a fenti tömböt hatdimenziós változatban pl. így deklarálhatnák. ARRAY [1..3,1..2,1..3,1..4,1..3,1..4] Az első elem indexe ebben az esetben Betr_Temp[1,1,1,1,1,1] lenne, míg az utolsó elemé Betr_Temp[3,2,3,4,3,4].
Tömb átadása paraméterként Tömbök paraméterként való használata rendkívül megkönnyíti nagyobb mennyiségű adatok átadását FC-nek vay FB-nek. Egy paraméterrel gyakorlatilag egy egész tömb átadható. Ez azonban feltételezi, hogy az adatokat tömbbe szervezték, és az FC ill. FB is tartalmaz deklarációjában egy ugyanolyan szerkezetű tömböt. A két tömb nevének nem kell mefelelni, csak az aktuális paraméternek és a formális paraméternek kell egyforma szerkezettel rendelkezni.
Struktúra alkalmazása az adatkezelésben Struktúra A struktúra többféle típusú (elemi vagy összetett, beleértve a tömböket és struktúrákat) adatok összefüggő csoportját kapcsolja össze. STEP 7 adattípusok és paramétertípusok
16
A tömb használata a Siemens PLC-iben a STEP7 bevezetésekor vált lehetségessé. A jólismert STEP5-ös rendszerben összetett típusokat és így természetesen a struktúrákat sem lehetett alkalmazni. Ennek ellenére minden műszaki feladatot meg lehetett oldani az S5-ös készülékekkel is. A struktúra használata tehát nem elengedhetetlen, de jelentősen növeli az adatkezelés matematikai szinvonalát, rugalmasságát és áttekinthetőségét, egyszerűbb feladatoknál azonban szükségtelen. A struktúra használatához először is olyan adatok kellenek, amelyek struktúrába szervezhetők. Ezen adatok kezeléséhez a felhasználónak a struktúrát létre kell hozni, másként kifejezve deklarálni kell. Struktúrákat DB-kben vagy a programmodulok (OB, FC, FB) deklarációs részében lehet deklarálni. Ez a deklarációs rész a STEP7 5-ös verziójában két különböző megjelenítési módban fordul elő. A következő ábrán egy struktúra látható, amely egy egészszámból, egy bájtból, egy karakterből és újra egy valós szám végül egy bitméretű változóból áll.
A struktúrát max. 8 síkon lehet egymásba ágyazni, tehát struktúra, ami struktúrából, ami viszont tömbökből stb. áll.
STEP 7 adattípusok és paramétertípusok
17
A struktúra létrehozása Struktúrákat DB-kben vagy a programmodulok (OB, FC, FB) deklarációs részében lehet deklarálni. A következő ábrán struktúra deklarációja látható. A struktúrának nevet kell adni (itt. Stapel_1). A mellette beadandó változótípus STRUCT kulcsszó jelenti, hogy struktúráról van szó. Ezt követően be kell vinni a struktúra elemeit: Menge Ursprungsdaten Steuercode Temperatur Ende
INT BYTE CHAR REAL BOOL
A struktúra végét az END_STRUCT kulcsszó jelzi. A kezdeti értékek megadása itt egyszerűbb mint a tömb esetében, amennyiben elemi adatokról van szó. Az értéket egyszerűen a kezdeti érték oszlopba (Anfangswert) kell beírni.
Hozzáférés a struktúra elemeihez Struktúrákat DB-ben vagy programmodulok deklarációs részében lehet létrehozni. A struktúra elemeihez való hozzáférés a számítástechnika szokásos szintaktikájával történik, de a STEP7ben néhány eltérő sajátosságot is szem előtt kell tartani. Alapvetően igaz, hogy ey elem elérése a struktúra nevének, és az elem nevének megadásával történik, a két név egymástól ponttal van elválasztva. Tehát: ha a struktúra neve Stapel_1 és az elem neve Temperatur, akkor: L
Stapel_1.Temperatur
Az utasítás betölti az AKKU1-be a Stapel_1 nevű struktúra Temperatur nevű változóját. Ez a helyzet, ha a struktúrát egy programmodul deklarációjában hozták létre. Ha azonban ez a szerkezet egy DB-ben van, akkor figyelembe kell venni, hogy a DB már eleve egy struktúra, tehát a létrehozott struktúra már a DB-Struktúrába ágyazott második struktúra.
STEP 7 adattípusok és paramétertípusok
18
Tehát: ha a struktúra neve Stapel_1 és az elem neve Temperatur, és ezek az Daten nevű DBben vannak, akkor: L
„Daten“. Stapel_1.Temperatur „Daten“ az adatmodul szimbólikus neve globális szimbólummal, ezért az idézőjel Stapel_1 a „Daten“ struktúrában elemként (ezért van ponttal elválasztva) definiált Stapel_1 struktúra Temperatur a Stapel_1 struktúrában elemként (ezért van ponttal elválasztva) definiált Temperatur nevű valós szám
A PLC-ben lehetőség van azonban az abszolút címzésre is. Az általános szabály a címzéseknél, ha azok több részből (mint itt) tevődnek össze: vagy minden rész szimbólikus, vagy minden rész abszolút. A fenti ábrából megállapítható az elem abszolút címe, és tegyük fel, hogy a „Daten“ nevű DB abszolút címe a DB20, akkor a fenti cím abszolút változatával az utasítás: L
DB20.DBD6
Struktúra átadása paraméterként Struktúrák paraméterként való használata rendkívül megkönnyíti nagyobb mennyiségű adatok átadását FC-nek vagy FB-nek. Egy paraméterrel gyakorlatilag egy egész struktúra átadható. Ez azonban feltételezi, hogy az adatokat struktúrába szervezték, és az FC ill. FB is tartalmaz deklarációjában egy ugyanolyan szerkezetű struktúrát. A két sruktúra nevének nem kell mefelelni, csak az aktuális paraméternek és a formális paraméternek kell egyforma szerkezettel rendelkezni.
A felhasználó által definiált adattipus (UDT) alkalmazása az adatkezelésben Felhasználó által definiált adattipus (UDT) A felhasználó által definiált adattipusok elemi és/vagy összetett adattípusokat kapcsolnak össze egy egységbe. Hasonlóak a korábban ismertetett struktúrákhoz. Ezeknek azonban úgy lehet nevet adni, hogy általuk a létrehozott adatcsomag a programban globálisan ismert többszörfelhasználható egységgé, tehát a felhasználók által definiált adattípussá válik. A létrehozott UDT a tervezet tartalomjegyzékében a program- és adatmodulokkal egyenrangúan, alkotóelemként megjelenik, önálló adatmodulként azonban nem használható, de mind a „szabályos“ adatmodulokban mind a programmodulok deklarációs részében mint adattípus felhasználható. A következő ábra egy UDT szerkezetét mutatja.
Ez az UDT ugyanolyan szerkezetű mint az előbb létrehozott struktúra, és ténylegesen is egy struktúra, de olyan, amely névvel rendelkezik, és adattípusként minden olyan helyen, ahol adattípusok előfordulnak készen felhasznáéható. Vagyis ezeken a helyeken anélkül, hogy az illető struktúrát újra létre kellene hozni, vagy az adatokat egyenként kellene deklarálni, az ábrán STEP 7 adattípusok és paramétertípusok
19
látható névvel (UDT20) beilleszthető, és akár tetszőleges számban.
Felhasználó által definiált adattípus létrehozása Az UDT létrehozása a STEP7 fejlesztőben történik úgy, hogy a létrehozandó objektum fajtájaként nem DB-t, nem FC-t stb. hanem UDT-t adnak meg. Az UDT szerkesztője tulajdonképpen a DB-szerkesztő, és ugyanolyan szabályok szerint kell az UDT-t létrehozni mint a DB-t. A következő ábrán az előbbi UDT látható úgy, ahogy a szerkesztőben létrehozták. Tároláskor, ha más nevet nem adtak, UDTx-ként (jelen esetben UDT20) kerül a többi objektum közé. Ha akarják, természetesen a létrehozatalkor vagy később a szimbólumszerkesztőben nevet is adhatnak az UDT-nek, pl. Prozessdaten.
Miután létrehozták az UDT-t, a továbbiakban ugyanúgy használhatják, mint bármelyik összetett adattipust, pl. az előbbi DB-ben (DB20) létrehoztak egy struktúrát, az UDT-vel már egyszerűbb a feladat, mert ezt adattipusként használva, és beillesztve, a struktúra automatikusan létrejön, és annyiszor, ahányszor akarják.
Milyen előnyöket eredményez az UDT használata DB-k esetében Az egyszer létrehozott UDT segítségével DB-k sokaságát lehet létrehozni ugyanolyan adatstruktúrával. Ezeket az adatmodulokat különböző aktuális értékek bevitelével könnyen lehet a feladathoz célszerűen illeszteni. Pl. létrehoznak egy UDT-t egy festék-recepthez majd ezzel az UDT-vel egy sorozat DB-t lehet készíteni, amelyben csak az összetevők arányát kell különkülön módosítani.
STEP 7 adattípusok és paramétertípusok
20
Paramétertípusok Az elemi és összetett adattípusok mellett, a programmodulok közötti adatátvitel céljából formális paraméterként paramétertípusokat is megadhatnak. A STEP7-ben a következő paramétertípusok alkalmazhatók. •
TIMER vagy COUNTER: ezek a paramétertípusok meghatározott időműveletet vagy számlálóműveletet (T... vagy C...) adnak át paraméterként, amelyekkel a függvény (FC vagy FB) feldolgozásakor a programnak alkalmaznia kell. Ha TIMER vagy COUNTER paramétertípust használnak, akkor a hozzá tartozó aktuális paraméternek természetesen egy bizonyos időműveletre vagy számlálóra kell mutatni, azaz Txx vagy Cxx címet kell megadni, ahol xx pozitív egészszám.
•
BLOCK: a BLOCK paramétertípus egy olyan programmodul címét adja meg, amely a másik programmodul számára paraméterként bemenet vagy kimenet lesz. A paraméter deklarácója meghatározza a felhasználandó modul fajtáját (FB, FC, DB stb.). Ha BLOCK típusu paramétert használnak, akkor aktuális paraméterként egy FC, FB vagy DB címét kell meadni. Pl. FC101.
•
POINTER: a POINTER (mutató) egy változó címét adja meg. A pointer tehát paraméterként érték helyett címet tartalmaz. Ha egy függvény POINTER típusú formális paraméterét kell aktuális paraméterrel ellátni, akkor címet adnak meg. A cím megadása történhet ppinter formátumban (ekkor: P#M50.0) vagy egyszerűen címként (ekkor: M50.0). Természetesen minden esetben az utóbbit használják, kívételt képez, amikor a pointer típusú megadás egyébb előnnyel szolgál.
•
ANY: akkor használják, ha az aktuális paraméter adattípusa nem ismert, vagy nem lényeges és amikor egy függvény bemenetként vagy kimenetként egy területet akarnak típusfüggetlenül megadni (pl. adatátvitel a különböző típusu kommunikációkban (Profibus, Ethernet, Profinet stb.)). Közelebbi információ a továbbiakban.
A POINTER típus formátuma A STEP 7-ben a POINTER paramétertipus 6 bájton tárolódik. A következő ábra mutatja a 6 bájt tartalmát. A POINTER lényegében egy indirekt cím és egy DB-cím. A 2., 3., 4. és 5. bájt a korábban ismertetett tartományon átnyúló indirekt címet tartalmazza, az első két bájt pedig a DB címét, ha a POINTER egy DB-ben lévő változóra mutat. Ha a változó nem DB-ben van, akkor ez a két bájt üresspeichert den Parametertyp POINTER in 6 Bytes (48 Bits). Nachfolgendes Bild zeigt die Art der Daten, die in jedem Byte gespeichert werden.
DB-szám vagy 0 Tárterület
A következő táblázat mutatja azokat a hexadecimális kódokat, amelyek a 2-es bájtban a tárterületeket azonosítják. Hexadecimális kód
Tárterület
b#16#81
Leírás E
Bemenetek
b#16#82
A
Kimenetek
b#16#83
M
Belső változók
b#16#84
DB
Adatmodul
STEP 7 adattípusok és paramétertípusok
21
Hexadecimális kód
Tárterület
Leírás
b#16#85
DI
b#16#86
L
Instant adatmodul
b#16#87
V
Előző lokális adatok
A pointer megadása: •
P#M50.0
•
Ha a formális paramétert POINTER típusura választották, akkor elég az M50.0
A POINTER használata Pointert (mutató) alkalmazása akkor célszerű, ha az utasítás operandusát futás közben változtatni akarják.
STEP 7 adattípusok és paramétertípusok
22
Az ANY paramétertipus formátuma Az ANY paramétertipus használata Paraméterezhető programmodulok (FC, FB) számára olyan formális paramétert is megadhatnak, amelynél az adattípus változtatható, tehát a hozzárendelt aktuális paraméter típusa tetszőleges lehet. Ebben az esetben a programmodul deklarációs táblájában az említett formális paramétert ANY típusura kell választani. Másik nagy előnye ennek a paramétertípusnak az, hogy több elemi típust tud átadni egyszerre, ezért azoknál a programmoduloknál amelyek feladata adatátvitel egész területeket lehet átvinni ennek sgítségével.
Az ANY formátuma adattípusoknál Elemi ill. Összetett adattípusoknál a következő adatokat tartalmazza: •
Adattípus
•
Ismétlési tényező
•
DB-szám
•
Tárterület
•
Az adatok kezdőcíme
Az elemi és összetett adatok tárolt adatai 10 H ha S7
adattípus Ismétlési tényező
DB-szám vagy 0 Tárterület
Az ismétlési tényező határozza meg, hogy az adott adattipusból hány darabot kell átadni. A 0. bájt az S7-nél mindig 10 Hexa, adattípusok kódja, ha DB-re vonatkozik, akkor a DB címe, egyébként 0, és az utolsó 4 bájt a szokásos indirekt cím.
STEP 7 adattípusok és paramétertípusok
23
A következő táblázatok az adattípusok ill. tárterületek kódját tartalmazza. Adattípusok Hexadezimalcode
Megnevezés
b#16#00
NIL
nulla-mutató
b#16#01
BOOL
bit
b#16#02
BYTE
bájt
b#16#03
CHAR
karakter
b#16#04
WORD
szó
b#16#05
INT
egészszám
b#16#06
DWORD
duplaszó
b#16#07
DINT
egészszám
b#16#08
REAL
Lebegőpontos szám
b#16#09
DATE
Datum
b#16#0A
TIME_OF_DAY (TOD)
időpont
b#16#0B
TIME
időtartam
b#16#0C
S5TIME
S5TIME
b#16#0E
DATE_AND_TIME (DT)
Dátum és időpont
b#16#13
STRING
karaktersorozat
Tárterületek
Leírás
b#16#81
E
Bemenetek
b#16#82
A
Kimenetek
b#16#83
M
Belső változók
b#16#84
DB
Adatmodul
b#16#85
DI
Instant adatmodul
b#16#86
L
Előző lokális adatok
b#16#87
V
Hexadezimalcode
STEP 7 adattípusok és paramétertípusok
24