Siemens S7 300-400 adatterületek és címzésmódok:


Adatterületek:
I Digitális bemenetek
Q Digitális kimenetek
M Belső változók (merkerek)
DB Osztott elérésű adatterület
DI Kizárólagos elérésű adatterület
PI Bemeneti perifériaterület
PQ Kimeneti perifériaterület
L Lokális változóterület
T Időzítők (timer)
C Számlálók (counter)

Megjegyzés:
Az I, Q, M, DB, DI és L területeket lehet bitenként, byte-onként (8 bit), word-önként (szavanként, ami 16 bit, azaz két byte) és double word-önként (duplaszavanként, ami 32 bit, 4 byte, két word méretű egység).
PI és PQ csak byte-onként (PIB, PQB), szavanként (PIW.PQW) és duplaszavanként (PID, PQD) címezhető.
A T és C terület speciális formátumú, ezek csak egyféleképpen érhetők el (lásd alább).

Az adatterületek címzésmódjai

I x.y
Input. Bemeneti bit. A digitális bemenetek bitenkénti eléréséhez. x a bemeneti byte címe, y a byte-on belüli bit címe. A kettő együtt adja a teljes címet.
Pl.: I0.0, I22.7, I4.4

A példa egy öntartást mutat. A Q4.0 kimenet bekapcsol, ha az I22.7 bemenet aktív, az I0.1 inaktív és az I0.0 bemenet aktívvá válik. A Q4.0 az I0.0 megszután is bekapcsolva marad mindaddig, amíg az I0.1 aktív, vagy az I22.7 inaktív nem lesz...
IB x
Input Byte. Bemeneti byte. Egyszerre megcímez 8 digitális bemeneti bitet. x a címzett byte címe (8 bit).
Pl.: IB0, IB6, IB22

A pálda minden ciklusban átmásolja a 0-ás bemeneti byte-ot (vagyis az I0.0-I0.7 bemenetek állapotát)  a 10-es merker byte-ba.
IW x
Input Word. Bemeneti szó. Egyszerre címez meg 16 digitális bemeneti bitet, azaz két egymást követő bemeneti byte-ot. x a címzett szó címe (16 bit).
Pl.: IW0, IW6, IW22

Az IW6-on érkező 16 bitet BCD számként értelmezi és egésszé alakítva az MW6-ba másolja. Ilyesmi akkor hasznos, ha pl. az I6.0-I7.7 bemenetekre (16 bit) egy BCD jeladót kötöttünk. Az MW6-ban a BCD számot egész számként kapjuk meg. A példa szerint a konverzió minden ciklusban megtörténik.
ID x

Input Double word.  Bemeneti duplaszó. Egyszerre címez meg 32 digitális bemeneti bitet, azaz négy egymást követő bemeneti byte-ot. x a címzett duplaszó címe(32 bit).
Pl.: ID0, ID6, ID22
Az ID0 magában foglalja az I0.0-I3.7 biteket, az IB0-IB3 byte-okat és az IW0-IW2

Átmásolja a 22-es input duplaszó 32 bitjét az MD8 merked duplaszóba.
Q x.y

Output. Kimeneti bit. A digitális kimenetek bitenkénti eléréséhez. x a kimeneti byte címe, y a byte-on belüli bit címe. A kettő együtt adja a teljes címet.
Pl.: Q10.0, Q22.7, Q4.4

QB x
Output Byte. Kimeneti byte. Egyszerre megcímez 8 digitális kimeneti bitet. x a címzett byte címe (8 bit).
Pl.: QB10, QB6, QB22

Ha az I0.0 bemenet aktív, a QB10-es kimeneti byte tartalmát (tehát a Q10.0-Q10.7  című 8 db kimenet állapotát) átmásolja a QB6-is kimeneti byte-ba. Amikor I0.0 inaktív, a QB6 (Q6.0-Q6.7) kimeneti bitek állapota megőrzi a QB10 kimeneti biteknek azt az állapotát, amikor I0.0 bemenet inaktívvá vált (kikapcsolt).
QW x

Output Word. Kimeneti szó. Egyszerre címez meg 16 digitális kimeneti bitet, azaz két egymást követő kimeneti byte-ot. x a címzett szó címe (16 bit).
Pl.: QW10, QW6, QW22
QD x

Output Double word.  Kimeneti duplaszó. Egyszerre címez meg 32 digitális kimeneti bitet, azaz négy egymást követő kimeneti byte-ot. x a címzett duplaszó címe (32 bit).
pl.: QD0, QD6, QD22
M x.y

Merker bit. A merker adatterület bitenkénti eléréséhez. x a merker byte címe, y a byte-on belüli bit címe. A kettő együtt adja a teljes címet.
Pl.: M0.0, M22.7, M4.4

MB x
Merker byte. Egyszerre megcímez 8 merker bitet. x a címzett byte címe (8 bit).
Pl.: MB0, MB45, MB12

MW x

Merker Word. Egyszerre címez meg 16 merker bitet, azaz két egymást követő merker byte-ot. x a címzett szó címe (16 bit).
Pl.: MW0, MW6, MW22

Az MW0 tartalmát egész számnak veszi és összehasonlítja 610-el, Ha nagyobb, akkor bekapcsolja M6.6-ot.
MD x

Merker Double word.  Merker duplaszó. Egyszerre címez meg 32 merker bitet, azaz négy egymást követő merker byte-ot. x a címzett duplaszó címe (32 bit).
pl.: MD0, MD11, MD23
DBn.DBXx.y Adatblokk bitenkénti elérése. Ahol n az adatblokk száma, x az n blokkon belüli byte címe, y a byte-on belüli bit címe.
Pl.: DB6.DBX4.2 A DB6 adatblokk 4-es byte-jának 2-es bitje

DBn.DBB x

Adatblokk byte-onkénti elérése. Ahol n az adatblokk száma, x a blokkon belüli byte címe (8 bit).
Pl.: DB4.DBB2 A 4-es adatblokk (DB4)  2-es byte-ját címzi.

A példa E4 hexa értéket másol DB4 adatblokk 2. byte-jára.

DBn.DBW x
Adatblokk word-önkénti elérése. Ahol n az adatblokk száma, x a blokkon belüli word (szó) címe (16 bit).
Pl.: DB4.DBW2 A 4-es adatblokk (DB4)  2-es word-jét címzi, azaz a 2-es és a 3-as byte-ból álló szót.


DBn.DBD x


Adatblokk doubleword-önkénti elérése. Ahol n az adatblokk száma, x a blokkon belüli double word (duplaszó) címe (32 bit).
Pl.: DB4.DBD2 A 4-es adatblokk (DB4)  2-es double word-jét címzi, azaz a 2-es, 3-as, 4-es és 5-ös byte-ból álló duplaszót.

DIX x.y

Instance adatblokk bitenkénti elérése. x a blokkon belüli byte címe, y a byte-on belüli bit címe.
Pl.: DIX4.2 Az aktuális instance adatblokk 4-es byte-jának 2-es bitje


DIB x
Instance adatblokk byte-onkénti elérése. x a blokkon belüli byte címe (8 bit).
Pl.: DIB2 Az aktuális instance adatblokk 2-es byte-ját címzi

DIW x
Instance adatblokk word-önkénti elérése. x a blokkon belüli word címe (16 bit).
Pl.: DIW2 Az aktuális instance adatblokk 2-es word-jét címzi, azaz a 2-es és a 3-as byte-ból álló szót.

DID x
Instance adatblokk double word-önkénti elérése. x a blokkon belüli double word címe (32 bit).
Pl.: DID2 Az aktuális instance adatblokk 2-es duplaszavát címzi, azaz a 2-es, 3-as, 4-es és 5-ös byte-ból álló duplaszót.

PIB x
Periféria bemeneti byte. x a byte címe (8 bit).
Pl.: PIB6

PIW x
Periféria bemeneti word. x a szó címe (16 bit).
Pl.: PIW6

PID x
Periféria bemeneti double word. x a duplaszó címe (32 bit).
Pl.: PID6

PQB x
Periféria kimeneti byte. x a byte címe (8 bit).
Pl.: PQB6

PQW x
Periféria kimeneti word. x a szó címe (16 bit).
Pl.: PQW6

PQD x
Periféria kimeneti double word. x a duplaszó címe (32 bit).
Pl.: PQD6

L x.y
Lokális változó bitenkénti elérése. Ahol x  a lokális változóterület byte-jának címe,  y a  byte-on belüli bit címe.
Pl.: L6.4 A lokális változóterület 6-os byte-jának 4-es bitjét címzi


LB x
Lokális változó byte-onkénti elérése. Ahol x  a lokális változóterület byte-jának címe (8 bit).
Pl.: LB6 A lokális változóterület 6-os byte-ját címzi.

LW x
Lokális változó szavankénti elérése. Ahol x  a lokális változóterület wörd-jének címe (16 bit).
Pl.: LW6 A lokális változóterület 6-os word-jét címzi, azaz a 6-os és 7-es byte-okat.


LD x
Lokális változó duplaszavankénti elérése. Ahol x  a lokális változóterület double wörd-jének címe (32 bit).
Pl.: LD6 A lokális változóterület 6-os double word-jét címzi, azaz a 6-os, 7-es, 8-as és 9-es byte-okat.

C x Számlálótartalom, ahol x a számláló címe

T x Időtag tartalom, ahol x az időzítő címe


Megjegyzés:
A fenti táblázatból látható, hogy az I, Q, M, DB és L adatterületek címezhetők bitenként, bájtonként, szavanként és duplaszavanként is.


Az ábra a merker adatterületen mutatja be a bit, bájt szó és duplaszó elhelyezkedését.
Mivel a byte címek vannak, és a szó, duplaszó egynél több byte-ból áll, ezek átfedhetik egymást.
Tehát például az MW0 és az MW1 adatszóban az egyik byte közös (Byte1).
Erre figyelni kell!
A címzésmód azt jelenti, hogy egy memóriaterületre (adatterületre) hogyan hivatkozunk. Ahogy azt az ábra is és a táblázat is mutatja, ugyanazt a bitet byte-ot, stb, többféleképpen is elérhetjük más-más címzésmóddal.
Pl. az IB0 magában foglalja az I0.0, I0.1, I0.2-I0.7 bemeneti biteket, az IB6 az I6.0-I6.7 biteket, stb.
Az IW0 magában foglalja az I0.0-I0.7 és az I1.0-I1.7 bementi biteket, továbbá az IB0 és IB1 című bemeneti byte-okat is.
A legnagyobb helyiértékű byte van a legkisebb címen, ezt követi a kisebb helyiértékű, és így tovább:



A táblázat ugyanazt a területet mutatja háromféle címzésmódban.

L terület
Amennyiben a lokális változókra abszolút módon hivatkozunk (azaz a címükkel és nem a nevükkel), akkor figyeljünk arra, hogy a cím megváltozhat, ha új lokális változót illesztünk be, vagy egyet törlünk, vagy egy vagy több meglévő típusát módosítjuk! Egy változó címe akkor is megváltozhat, ha a változók FB-ben vannak és egy ki vagy bemenetet adunk hozzá vagy töröljük azt, esetleg megváltoztatjuk a típusát! A cím módosulása nincs hatással a szimbolikus hivatkozásokra.
Az L terület lokális. Azaz csak a blokkon belül használható. Amint a program kilép a blokkból (block end) a változó tartalma elvész (kivételt képeznek az FB STAT változói, melyek tartalmát az instance adatblokk megőrzi).

DB-k
Amikor egy adatblokkon belüli adatra a címével hivatkozunk, két lehetőség van:
Vagy megadjuk az adat teljes címét, pl. DB4.DBW6 vagy DB8.DBX4.7, DB1.DBB0 vagy használjuk az OPN (open - megnyitás) utasítást).
Pl.:

STL-ben:
    OPN DB3

Az utasítás megnyitja a DB3-as datblokkot.
A megnyitás után a blokk számára nem kell hivatkozni, így rövidebb írási formával dolgozhatunk:
DBW6 vagy DBX4.7, stb. A DB száma tehát elmarad a hivatkozásból.
Ezek a hivatkozások mindig azon az adatblokkon belüli címet jelölnek, amelyik blokkot előtte OPN utasítással megnyitottuk.
Ha a rövidített hivatkozások közé teljes címűt keverünk, az felülbírálja az OPN utasítás hatását, ha a telejs cím nem arra a blokkra hivatkozik, amelyiket az OPN megnyitotta. Pl.:


A fenti programban ha a DB3.DBX20 bit 1 állapotú lesz, akkor bekapcsol az M20.0
Ha a DB6.DBX0.0 bit lesz egy, akkor bekapcsol az M20.1
A várakozásokkal ellentétben azonban a Network 4-ben az M20.2-t nem a DB3.DBX20.0 bitje kapcsolja, hanem a DB6.DBX20.0 bitje.
Az OPN DB3 parancs hatását tehát a DB6-ra való hivatkozás felülbírálta.

Paraméterek és konstansok

B#16# Byte, hexadecimális. Pl. B#16#A4
W#16# Word, hexadecimális. Pl. W#16#A401
DW#16# Double word, hexadecimális. Pl. DW#16#A401_224C, DW#16#A0F0_BCFE
D# Dátum konstans. Pl.: D#2005-04-10 (2005 április 10)
TOD# Time of day konstans. Pl.: TOD#13:20:33.125 (13 óra 20 perc, 33 másodperc, 125 ezredmásodperc)
L# 32-bit egész konstans (decimális). Pl.: L#-1, L#655874, L#0
P# Pointer konstans. Pl.: területen belüli pointer: P#21.6, területen kívüli pointer: L P#Q11.4
S5T# Időzítő (timer) konstans. Pl.: S5T#2M (2 perc), S5T#14S (14 másodperc), S5T#1M4S (1 perc és 4 másodperc)
T# Idő konstans 16 vagy 32 bit. Pl.: T#1D_5H_3M_1S_2MS (1 nap, 5 óra, 3 perc, 1 másodperc, 2 tizedmásodperc),
T#500 ms
C# Számláló érték konstans, decimális. Pl.: C#100, C#0, C#544
2# Bináris konstans. Pl.: 2#1010101010101010, 2#1110_0101_1001_0001
B (b1,b2) 2 byte konstans, decimális formában. Pl.: B#(101,15), B#(55,255)
B (b1,b2, b3,b4) 4 byte konstans, decimális formában. Pl.: B#(122,43,66,11)
n Decimális egész (integer) konstans Pl.: +27, -6, 5110
Valós (lebegőpontos) szám Pl.:  -2.5
'ccc' ASCII karakter konstans. Pl.:  'PcS7'

Páldák:

Immediate addressing (közvetlen címzés, amikor a művelethez tartozó adatot (konstanst) közvetlenül az utasításban adjuk meg)
L +42 Betölti +42-t mint 16 bites decimális egészet az ACCU1-be
L L#66645 Betölti 66645-t mint 32 bites decimális egész számot az ACCU1-be
L 2#1010101010101010 Betölti 1010101010101010-t mint 16 bites bináris egész számot az ACCU1-be
L DW#16#B0D0_11C7 Betölti B0D011C7 32 bites hexadecimális számot ACCU1-be
L  'cica ' Betölti ACCU1-be a 'cica' string karaktereinek ASCII kódjaiból álló 4 byte-ot.
L T#210 ms ACCU1-be tölti 210ms időértéket mint időkonstanst
L C#100 ACCU1-be tölti 100-at mint számlálóértéket
L B#(55,212) ACCU1-be tölti 55 és 212 decimálisan megadott számokat (két byte-ot)
L B#(78,52,44,67) ACCU1-be tölti 78,52,44,67 decimálisan megadott számokat (négyt byte-ot)
L P#21.4 ACCU1-be tölti P#21.4 area-internal típusú pointert
L P#Q5.5 ACCU1-be tölti P#Q5.5 area-crossing típusú pointert
L -4.5 ACCU1-be tölti -4.5-öt mint valós számot
L D#2005-04-22 ACCU1-be tölti 2005-04-22-t mint dátumot
L TOD#13:20:33.125 ACCU1-be tölti 13:20:33.125 időpontot mint time of day típust
Direct addressing (amikor a művelethez tartozó adatot egy olyan memóriacím tartalmazza amit az utasítás paramétereként adunk meg)
A I 0.0 És művelet a 0.0-ás bemenettel
L IB 4 Az 4-es input byte tartalmát ACCU1-be tölti
L IW 6 A 6-os input word tartalmát ACCU1-be tölti
L ID 0 A 0-ás input duplyaszó tartalmát ACCU1-be tölti
Indirect addressing (amikor a művelethez tartozó adatot egy olyan memóriacím tartalmazza, aminek a címét egy másik, az utasítás paramétereként fixen megadott memóriacímről vesz)
SP T [LW 8] Timer indítása. Az indítandó timer címét (számát) a lokális változóterület 8-as wördjéről veszi.
CU C [MW 5] Számláló léptetése. A számláló címét az 5-ös merker word tartalma adja.
Area-Internal Memory-Indirect Addressing (amikor a művelethez tartozó adatot egy olyan memóriacím tartalmazza, aminek a címét egy olyan memóriacímről veszi, amit annak a memóriacímnek tartalma mutat, amit paraméterként megadtunk, de az utasítás paramétere fixen megadja a terület azonosítóját)
A I [LD 12]
Pl.: L P#22.2
       T LD 12
       A I [LD 12]
És műveletet hajt végre a 12-es lokális duplaszó tartalma által mutatott memóriabittel.
A példa szerint LD12 -be tölti 22.2-re mutató pointert, majd az And műveletnél fixen megadja memóriaterületnek az I-t (input). ENnek eredménye, hogy A I[LD12] utasítás az I22.2-es bemenettel hajtja végre az AND utasítást. A pointer tehát csak egy (az I) memóriaterületen belülre hivatkozhat (area internal)
A I [DBD 1] És művelet azon input bittel amelyiket DBD1 adatblokk duplaszavában lévő pointer címez
A Q [DID 12] És művelet azon output bittel amelyiket DID1 instance adatblokk duplaszavában lévő pointer címez
A Q [MD 12] És művelet azon output bittel amelyiket MD12 merker duplaszóban lévő pointer címez
Area-Internal Register-Indirect Addressing (amikor a művelethez tartozó adatot egy olyan memóriacím tartalmazza, aminek a címét az Adress regiszterben lévő pointerből veszi és az utasítás paramétere fixen megadja a terület azonosítóját)
A I [AR1,P#12.2] És művelet azon input memóriacímmel, amit AR1 address regiszter tartalmához hozzáadott 12.2 eltolás eredménye határoz meg. (Ha AR1 tartalma pl.: P#7.4, akkor a címzett input az I19.6 lesz)
Area-Crossing Register-Indirect Addressing (amikor a művelethez tartozó adatot egy olyan memóriacím tartalmazza, aminek a címét az Adress regiszterben lévő pointerből veszi és ez a pointer tartalmazza a memóriaterület azonosítóját is)
L B [AR1,P#8.0]
Pl.: L P#M4.0
       LAR1
       L B [AR1,P#8.0]
ACUU1-be tölti azt a byte-ot, amit AR1 address regiszter tartalma és a P#8.0 eltolás eredménye ad.
A megcímzett memóriaterület azonosítóját is a pointer tartalmazza.
A példa szerint a megcímzett byte az MB12
A [AR1,P#32.3]
És művelet AR1 address regiszter tartalma és a P#32.2 eltolás eredménye által adott cím alapján

Példák a pointer eltolás kiszámítására:

LAR1 P#5.3
A Q [AR1,P#23.4]
Eredmény: Az AND művelet a Q28.7-et címzi. (Byte=5+23=28 és bit=4+3=7)

L MD 0    //Tegyük fel, hogy MD0 tartalma #P20.6
LAR1
A I [AR1,P#17.7]
Eredmény: A címzett bemenet: I38.5  (Byte=20+17+1. A +1 a 6+7-ből keletkező átvitel eredménye.

Szirty