hu:s7:valtozotipusok_es_ob_k

Differences

This shows you the differences between two versions of the page.

hu:s7:valtozotipusok_es_ob_k [2017/09/08 15:51]
hu:s7:valtozotipusok_es_ob_k [2022/04/21 15:04] ()
 1:  1:
 +====== S7 változótípusok, OB-k ======
 +en: S7 Software
  
 +Ebben a fejezetben a német szintaktikát alkalmazom (azaz nem A, mint AND, hanem U, mint UND a parancs például).
 +
 +További kapcsolódó oldalak: \\
 +[[hu:s7:plc_szoftver_alapfogalmak|S7 szoftver alapfogalmak]] \\
 +[[hu:s7:awl_leiras#start|S7 AWL utasításkészlet]]
 +
 +===== A Simatic Step 7 változótípusai =====
 +
 +A változótípusok csoportosítása hosszuk szerint:
 +
 +^Bit (1 bit)^Byte (8 bit)^Szó (16 bit)^Duplaszó (32 bit)^64 bit|
 +| [[#bool|BOOL]] | [[#byte|BYTE]] | [[#word|WORD]] | [[#dword|DWORD]] |   |
 +|   | [[#char|CHAR]] |       |
 +|     | [[#int|INT]] | [[#dint|DINT]] |   |
 +|     | [[#date|DATE]] |     |
 +|     | [[#s5time|S5TIME]] |     |
 +|       | [[#real|REAL]] |   |
 +|       | [[#time|TIME]] |   |
 +|       | [[#tod|TOD]] |   |
 +|         | [[#date_and_time|DT]] |
 +| | |[[#timer|TIMER]]\\ COUNTER\\ BLOCK_FB\\ BLOCK_FC\\ BLOCK_DB\\ BLOCK_SDB| | |
 +
 +A fentiektől eltérő hosszú paraméter-típusok: POINTER (3 szó), [[#any|ANY]] (5 szó)
 +
 +Egyéb (változó hosszú) deklarációk: [[#array|ARRAY]], [[#struct|STRUCT]], [[#udt|UDT]], [[#String|STRING[n]]]
 +
 +===== Simatic S7 változójegyzék =====
 +
 +==== ANY ====
 +
 +Az ANY típussal összefüggő adatmezők definiálhatók, az alábbi struktúra szerint:
 +
 +p# [kezdőcím BYTE.BIT] [Adattípus] [Ismétlési faktor]
 +
 +Legjellemzőbb alkalmazása a BLKMOV funkció hívása.
 +
 +== Példák az ANY típus megadására ==
 +
 +^Megadott ANY paraméter^Leírása|
 +|p# M 70.0 BYTE 11|10 byte-os merker terület kijelölése\\ MB70 - MB80|
 +|p# DB22.DBX5.0 S5TIME 3|Három, a DB22-be lementett S5TIME változó kijelölése (az S5TIME szó hosszú változó)\\ DB 22 Byte 5 - DB 22 Byte 10.|
 +|p# A 21.3 BOOL 4|4 bit kijelölése a kimeneten\\ A 21.3 - A 21.6|
 +
 +== SCL ANY típus definició ==
 +
 +<code>
 +FUNCTION FC111 : INT
 +
 +VAR_TEMP
 +Quelle : ANY;
 +i : DINT; 
 +test : WORD;
 +QuellPointer AT Quelle : STRUCT
 +SyntaxID : BYTE;
 +Datentyp : BYTE;
 +Laenge : INT;
 +db_Nummer : INT;
 +BytePointer : DWORD;
 +END_STRUCT;
 +
 +END_VAR
 +
 +//AnyPointer kezelese
 +
 +QuellPointer.SyntaxID    := b#16#10;
 +QuellPointer.Datentyp    := b#16#4;  // Datentyp WORD
 +QuellPointer.Laenge      := 10;      // 10 szo 
 +QuellPointer.db_nummer   := 100;     // peldaul DB100
 +QuellPointer.BytePointer := dw#16#84000000 OR SHL(IN := DINT_TO_DWORD(i),N:=3);
 +
 +
 +FC111 := 100;
 +END_FUNCTION
 +</code>
 +
 +==== ARRAY ====
 +
 +Az array-jel tömböt lehet definiálni, mely maximum 6 dimmenziós lehet, és csak egy változótípust tartalmazhat.  Az alábbi paraméter típusokat NEM tartalmazhatja: TIMER, COUNTER, BLOCK_FB, BLOCK_FC, BLOCK_DB, BLOCK_SDB, POINTER, ANY.
 +
 +Az ARRAY indexe nem eshet kívül az alábbi tartományon: -32768 - +32767.
 +
 +A típus nem dinamikus, és legalább két elemet kell, hogy tartalmazzon. Minden dimmenzió két határértékkel definiálható, pl: ARRAY [a1..a2]. A két határérték lehet negatív, pozitív érték vagy nulla, de az a2-nek mindenképpen nagyobbnak kell lennie, mint az a1-nek. Erre néhány példa:
 +
 +Egy dimmenziós tömb: ARRAY [-10..-1]
 +
 +Három dimmenziós tömb: ARRAY [1..12, 0..1, -5..-2]
 +
 +A lenti példán egy kezdőérték megadás látható, ahol az 5 elsődleges dimmenzió rendre 0.0, +100.0, 0.0 értékekkel kerül feltöltésre:
 +
 +<code>
 +Meres : ARRAY [1 .. 5, 1 .. 3 ] OF REAL := 0.0, +100.0, 0.0, 0.0, +100.0, 0.0, 0.0, +100.0, 0.0, 0.0, +100.0, 0.0, 0.0, +100.0, 0.0;
 +</code>
 +
 +==== BOOL ====
 +
 +Bit változó típus. A bit a legkisebb egység a plc-n, értéke TRUE vagy FALSE lehet.
 +
 +Az AWL-ben elvégezhető bit logikai műveleteket itt találja: [[hu:s7:awl_leiras#bit_logik|S7 AWL Bit logikai műveletek]]
 +
 +==== BYTE ====
 +
 +A byte 8 bitet tartalmaz. A biteket hátulról előre számozzuk, a byte 0.bitje mindig a legutolsó.\\ Egy byte értéke 0 -- 255 --ig terjedhet (B#16#0 - B#16#FF).
 +
 +{{:wiki:comm:msb_lsb.png|MSB / LSB}} 
 +
 +A byte felső és alsó 4 bitjét rendre [[hu:comm:comdict#msb|MSB]] (Most Significant Bit) és [[hu:comm:comdict#lsb|LSB]] (Least Significant Bit) nevek­kel illetjük.
 +
 +==== CHAR ====
 +
 +A karakter változótípust plc-n meglehetősen ritkán alkalmazzuk.  Általában az [[hu:comm:bus_rs232#rs-232|RS-232]]-vel kommunikáló egységek kapcsán szokott felbukkanni ez a típus. Ebben az esetben is, mint a byte-nál, a változó 8 bitből áll, és 0 - 255 közötti értéket vehet fel. Az ASCII kódtáblázat szerinti hozzárendeléssel egy byte -- egy char -- egy karakter.
 +
 +==== DATE ====
 +
 +A dátum típus 2 byte-on, előjel nélkül a napok számát adja  a kezdeti időponttól. A kezdet az S7 esetén 1990.01.01, ezen időpont előtti dátum ezzel a típussal nem írható le. A maximálisan leírható dátum pedig: 2168.12.31.\\ A biteket ebben az esetben is hátulról előre számozzuk:
 +
 +| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
 +
 +==== DATE_AND_TIME (DT) ====
 +{{anchor:dt}}
 +
 +A típus 64 bites, és BCD formátumban tartalmazza az információkat az alábbi tagolás szerint:
 +
 +^0. byte^1. byte^2. byte^3. byte^4. byte^5. byte^6. byte^7. byte^
 +| Év\\ 90 .. 89 | Hónap\\ 01 .. 12 | Nap\\ 01 .. 31 | Óra\\ 00 .. 23 | Perc\\ 00 .. 59 | Másodperc\\ 00 .. 59 | MSec\\ 00 .. 99\\ (MSD) | **[[hu:comm:comdict#msb|MSB]]**\\Msec\\ 0 .. 9\\ (LSD) | **[[hu:comm:comdict#lsb|LSB]]**\\Munkanap\\ 1 .. 7 |
 +
 +^ **Év**\\ (0.byte) | 90-nel indul (1990) és 89-nel ér véget (2089) |
 +^ **Hónap**\\ (1.byte) | Január -- December |
 +^ **Msec**\\ (6.byte és 7.byte [[hu:comm:comdict#msb|MSB]]) | A milliszekundum egy 3 jegyű szám (000 -- 999). A [[hu:s7:plc_szoftver_alapfogalmak#s7_bcd|BCD]] egy byte-on csak két számjegyet „engedélyez”. Ezért a felső két számjegyet a 6.byte tartalmazza, a hiányzó, legkisebb helyiértéket a 7.byte felső (MSB) 4 bitje tartalmazza. |
 +^ **Munkanap**\\ (7.byte LSB) | A munkanap kódját a 7.byte alsó (LSB) négy bitje tartalmazza:\\ 1: vasárnap\\ 2: hétfő\\ 3: kedd\\ 4: szerda\\ 5: csütörtök\\ 6: péntek\\ 7: szombat |
 +
 +A DT típus alkalmazási intervalluma: DT#1990-1-1-0:0:0.0 - DT#2089-12-31-23:59:59.999.
 +
 +**BCD kód**: a számjegyeknek azok kettes számrendszerbeli értéke felel meg. Egy számjegyet 4 helyi értéken ábrázolunk. Bővebb leírása [[hu:s7:plc_szoftver_alapfogalmak#s7_bcd|itt]] található.
 +
 +==== DINT ====
 +
 +Dupla integer (32 bit), működése megegyezik az [[#int|integer]]-rel, azaz, [[hu:s7:plc_szoftver_alapfogalmak#s7_kettes_komplementer|Kettes komplementer képzés]]sel lehet „bevinni” az értéket, és az első bit itt is az előjel, a többi pedig a számértéket tartalmazza. A változó csak egész számokra (de: Ganzzahl) alkalmazható.\\ A DINT minimuma -2.147.483.648, a maximuma +2.147.483.647. (Egyszerűbben megjegyezhető az, hogy a DINT nagyjából mínusz kétmilliárdtól plusz kétmilliárdig használható). A DINT felépítése:
 +
 +|**7**|6|5|4|3|2|1|0|7|6|5|4|3|2|1|0|7|6|5|4|3|2|1|0|7|6|5|4|3|2|1|0|
 +| 0. byte |||||||| 1.byte |||||||| 2.byte |||||||| 3.byte ||||||||
 +
 +Az első pozícióban (0. byte 7. bit) található bit az előjel (0: plusz, 1: mínusz).\\ Látható, hogy a biteket hátulról előre, míg a byte-okat előről hátrafelé számozzuk.
 +
 +==== DWORD ====
 +
 +A DWORD 32 bitet tartalmaz. A bitek számot „nem írnak le”, tartalma pusztán bitek halmaza.
 +
 +|7|6|5|4|3|2|1|0|7|6|5|4|3|2|1|0|7|6|5|4|3|2|1|0|7|6|5|4|3|2|1|0|
 +| 0. byte |||||||| 1.byte |||||||| 2.byte |||||||| 3.byte ||||||||
 +
 +Intervalluma:
 +
 +^formátum^minimuma^maximuma|
 +|bineáris|0|1111 1111 1111 1111 1111 1111 1111 1111|
 +|hexadecimális|DW#16#0000 0000|DW#16#FFFF FFFF|
 +|BCD|0|9999 9999|
 +|előjel nélküli decimális|B#(0,0,0,0)|B#(255,255,255,255)|
 +
 +A típus lényege, hogy tartalmára nem vonatkozik formai megkötés.\\ Két -- egymást követő - [[hu:s7:valtozotipusok_es_ob_k#word|WORD]] típusú változó egy DWORD-öt ír le.
 +
 +==== INT ====
 +
 +Az integer (16 bit) működése megegyezik a [[#dint|DINT]]-tel, azaz, [[plc_szoftver_alapfogalmak#kettes_komplementer_kepzes|kettes komplementer képzés]]sel lehet „bevinni” az értéket, és az első bit itt is az előjel, a többi pedig a számértéket tartalmazza. A változó csak egész számokra (Ganzzahl) alkalmazható.
 +
 +Az INT minimuma -32.768, a maximuma +32.767. (Egyszerűbben megjegyezhető az, hogy az INT nagyjából mínusz harminckétezertől plusz harminckétezerig használható). Az INT fel­építése:
 +
 +|**7**|6|5|4|3|2|1|0|7|6|5|4|3|2|1|0|
 +| 0. byte |||||||| 1.byte ||||||||
 +
 +Az első pozícióban (0. byte 7. bit) található bit az előjel (0: plusz, 1: mínusz).
 +Látható, hogy a biteket hátulról előre, míg a byte-okat elölről hátrafelé számozzuk.
 +
 +==== REAL ====
 +
 +A real típus 32 biten a számokat [[hu:s7:plc_szoftver_alapfogalmak#s7_lebegopontos|lebegőpontos számábrázolás]]-sal tárolja. A belső szerkezet kialakítása az IEEE FP32 szabványa szerint történik. (Például 2334.342487e-6)
 +
 +Az IEEE (Institute for Electrical and Electronics Engineers) standard 754. definiálja a lebegőpontos (en: floating point) számok tárolását és feldolgozását, erről bővebben [[hu:s7:plc_szoftver_alapfogalmak#s7_lebegopontos|itt]] olvashat.
 +
 +A REAL típusú számok tárolási határai:
 +
 +^ **Minimum pozitív:** ^ **Maximum pozitív:** |
 +| +1.175495e-38 | +3.402823e+38 |
 +^ **Minimum negatív:** ^ **Maximum negatív:** |
 +| -1.175495e-38 | -3.402823e+38 |
 +
 +A Real típus felépítése:
 +
 +|7|6|5|4|3|2|1|0|7|6|5|4|3|2|1|0|7|6|5|4|3|2|1|0|7|6|5|4|3|2|1|0|
 +| 0.byte |||||||| 1.byte |||||||| 2.byte |||||||| 3.byte ||||||||
 +|elő\\ jel|Karakterisztika\\ 8 bit||||||||Mantissza\\ 23 bit|||||||||||||||||||||||
 +
 +  * Az előjel 1: negatív szám, 0: pozitív szám
 +  * Karakterisztika: 0-255 közötti számérték, e + 127 --tel kerül megjelenítésre. Decimális szám.
 +  * Mantissza: A szám kerekített pontosságú leírása
 +
 +==== S5TIME ====
 +
 +Az S5time (16 bit) típus még az S7 előtti S5 termékcsaládból öröklődött. Kissé körülményesebb használni, mint a normál idődefiníciót, ezért viszonylag ritkán bukkan fel.
 +
 +Felépítése:
 +
 +^ 0.byte ^^^^^^^^ 1.byte ^^^^^^^|
 +| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
 +^ szó ^^^^^^^^^^^^^^^|
 +| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
 +| üres || Időköz || 2.BCD |||| 1.BCD |||| 0.BCD ||||
 +
 +Az idő definiciójánál 4 időbázis közűl választhatunk, melyeknek a felbontása és a teljes definiálható időhossza eltérő. A bázist a 12. és 13. bitekkel definiálhatjuk:
 +
 +^ időbázis\\ (felbontás) ^bineáris kód\\ (12 - 13 bit)^teljes definiálható időhossz\\ minimum^ teljes definiálható időhossz\\ maximum |
 +|10 ms|00|10MS|9S_990MS|
 +|100 ms|01|100MS|1M_39S_900MS|
 +|1 s|10|1S|16M_39S|
 +|10 s|11|10S|2H_46M_30S|
 +
 +A [[plc_szoftver_alapfogalmak#bcd|BCD kódok]]kal  0 -- 999 --ig definiálhatók számok.
 +
 +A lenti példán a 173 sec megadása látható, másodperces bázisban:
 +
 +{{:wiki:s7:idobazis.png?342x107|BCD definition example: 173 sec}} \\
 +
 +==== STRING ====
 +
 +A String típussal szövegeket tudunk tárolni. Hossza maximum 254 byte, tetszőleges. A String[n] esetén n hosszú szöveg tárolására alkalmas a változó, de a valóságban 2 byte-tal többet foglal el, mert az első byte-ján tárolja a maximális hosszat (n), a második byte-on pe­dig a valós hosszat. Ha például String[6] változónkba a „BUMM” szót tároljuk, akkor a változó 8 byte-ot foglal el, első byte-ja 6-t, második pedig 4-et fog tárolni. A tartalma így néz ki ebben az esetben:
 +
 +^ 0.byte ^ 1.byte ^ 2.byte ^ 3.byte ^ 4.byte ^ 5.byte ^ 6.byte ^ 7.byte |
 +| 6 | 4 | „B” | „U” | „M” | „M” |     |
 +
 +==== STRUCT ====
 +
 +A struktúra egy összegző adattípus, melyben maximum 8 szint mélységig lehet változó-struktúrákat definiálni. A Struct az alábbi paraméter típusokat NEM tartalmazhatja: TIMER, COUNTER, BLOCK_FB, BLOCK_FC, BLOCK_DB, BLOCK_SDB, POINTER, ANY.
 +
 +A típusnak legalább két komponenst kell tartalmaznia. A struktúra definiciója a STRUCT és az END_STRUCT kulcsszavak között található. A Struct alkalmazását tekintve gyakorlatilag megegyezik az UDT-vel.
 +
 +A lenti példán egy "kezel" nevű struktúra definiciója és kezelése látható az AWL editorban:
 +
 +{{:wiki:s7:s7_struct1.png?700x432|S7 Sturture in AWL-editor}} \\ 
 +//"kezel" struktúra definiciója és felhasználása az FC1-ben//
 +
 +==== TIME ====
 +
 +A különböző időfunkciókhoz leginkább a Time típusú definíciót szokás használni. A típus 32 bites, gyakorlatilag egy előjeles egész számot tartalmaz, melynek értéke -65.535 és +65.535 között változhat. Ez az érték a milliszekundumokat jelenti, és hogy ne legyen ilyen bonyolult az életünk (v.ö.: minden időt milliszekundumban kellene megadni), a definíciónál  megengedi a „részletes” időleírást, mint például **T#2d1h12m32s210ms**, mely 2 nap, 1 óra, 12 perc 32 másodperc és 210 milliszekundum jelentéssel bír.
 +
 +  * A megadható idő maximuma: T#+24d20h31m23s647ms
 +  * A megadható idő minimuma:  T# -24d20h31m23s648ms
 +
 +Persze nem kell mindig, minden paramétert kitölteni, érvényes definíció a **T#12h23s** és a **T#123ms** is.
 +
 +A „time” típus felépítése:
 +
 +|**7**|6|5|4|3|2|1|0|7|6|5|4|3|2|1|0|7|6|5|4|3|2|1|0|7|6|5|4|3|2|1|0|
 +| 0. byte |||||||| 1.byte |||||||| 2.byte |||||||| 3.byte ||||||||
 +
 +A 0.byte 7.bitje az előjelet tartalmazza. Képzése megegyezik a [[#dint|Dint]] típussal -- [[plc_szoftver_alapfogalmak#kettes_komplementer_kepzes|kettes komplementer képzés]]sel állítja elő a negatív számokat.
 +
 +==== TIME_OF_DAY (TOD) ====
 +{{anchor:tod}}
 +A TOD típus 32 bites, tartalma egy előjel nélküli egész szám, mely a milliszekundumokat tárolja.  A típus az egy napon belüli pontos idő definiálására alkalmas, így értéke a TOD#00:00:00.000 és TOD#23:59:59.999  értékek között változhat. A milliszekundum megadása a definícióban nem kötelező. Érvényes megadás például a **TOD#21:12:10** és a **TOD#05:14:22.100** is.
 +
 +Felépítése:
 +
 +|7|6|5|4|3|2|1|0|7|6|5|4|3|2|1|0|7|6|5|4|3|2|1|0|7|6|5|4|3|2|1|0|
 +| 0. byte |||||||| 1.byte |||||||| 2.byte |||||||| 3.byte ||||||||
 +
 +==== TIMER ====
 +
 +Az időfunkciók legegyszerűbb kezelési módja a timer. Gyakorlatilag minden időméréshez független timer funkció rendelhető, saját egyedi beállításokkal. A FUP 256 timer alkalmazását engedi meg, de mert ezek önálló memóriaterületet foglalnak, melynek mérete hardware-függő, így a timer-ek számát a CPU típusa határolja be.
 +
 + 
 +
 +==== UDT ====
 +en: user definied type, hu: Felhasználó által definiált típus
 +
 +A típus gyakorlatilag a magas szintű nyelvek cluster változó-típusának felel meg, a többi típustól annyi eltéréssel, hogy ezt a változót gyakorlatilag az FB-n / FC-n kívül, a Simatic Manager / Bausteine ablakban kell definiálni, csakúgy, mint a "normál" FB-ket, FC-ket. (Gyakorlatilag az ablakra bökve a jobb egérgomb alatt a //Neues Objekt Einfügen// » //Datentyp// pontot kell választani, és az UDT adatait meg kell adni.)
 +
 +Az UDT megadható az AWL editorban, vagy file-ból is generálható, a lényeg, hogy az adott számú (vagy szimbolikus nevű) UDT létezzen, amire a programban hivatkozunk.
 +
 +{{:wiki:s7:s7_udt1.png?544x276|S7 UDT}} \\
 +//UDT1 definiálása az AWL editorban//
 +
 +A már létrehozott UDT-t a strukturához hasonló hivatkozással, a többi változóval megegyező módon alkalmazhatjuk, mint ahogy a lenti ábra is szemlélteti.
 +
 +{{:wiki:s7:s7_udt2.png?679x323|S7 UDT}} \\
 +A fent definiált UDT 1 felhasználása az FC 1-ben, IN típusú változóként
 +
 +==== WORD ====
 +
 +A Word (Wort) típus 16 bitet tartalmaz. A bitek számot „nem írnak le”, tartalma pusztán bitek halmaza.
 +
 +{{:wiki:comm:msb_lsb_word.png|WORD MSB-LSB}}
 +
 +Intervalluma:
 +
 +^formátum^minimuma^maximuma|
 +|bineáris|0|1111 1111 1111 1111|
 +|hexadecimális|W#16#0|W#16#FFFF|
 +|BCD|0|9999|
 +|előjel nélküli decimális|B#(0,0)|B#(255,255)|
 +
 +A típus lényege, hogy tartalmára nem vonatkozik formai megkötés.\\ Két -- egymást követő - Word típusú változó egy [[#dword|Dword]] -öt ír le.
 +
 +==== A Simatic Step 7 változóknál konstansok megadása ====
 +
 +Konstansok megadásánál figyelni kell a pontos formátumra, mert amennyiben ezt nem sikerül eltalálnunk, teljesen más számértékeket fogunk találni az elvártak helyett.
 +
 +^ Formátum ^ Megadási forma ^ Típus |
 +| bináris | TRUE vagy FALSE\\ 0 vagy 1 | [[#bit|BOOL]] |
 +| Előjel nélküli 16 bites egész szám | B#(0,0) -től\\ B#(255,255) - ig          | [[#word|WORD]] |
 +| Előjel nélküli 32 bites egész szám | B# (0,0,0,0) -től\\ B#(255, 255,255,255) -ig        | [[#dword|DWORD]] |
 +| Előjeles 16 bites egész szám | -32768 -tól\\ 32767 --ig | [[#int|INT]] |
 +| Előjeles 32 bites egész szám | -2.147.483.648 -tól\\ +2.147.483.647 --ig | [[#dint|DINT]] |
 +| Hexadecimális\\ megadás | B#16#0 -től\\ B#16#FF -ig    | [[#byte|BYTE]] |
 +| B#16#0 -től\\ B#16#FFFF -ig            | [[#word|WORD]] |
 +| B#16#0 -től\\ B#16#FFFFFFFF --ig | [[#dword|DWORD]] |
 +| Dual megadás | 2#0 -től\\ 2#1111111111111111 -ig       | [[#word|WORD]] |
 +| 2#0 -től\\ 2#11111111111111111111111111111111 -ig --ig | [[#dword|DWORD]] |
 +| IEEE típusú törtszám | +1.175495e-38 (pozitív minimum)\\ +3.402823e+38 (pozitív maximum)\\ -1.175495e -38 (negatív minimum)\\ -3.402823e +38 (negatív maximum) | [[#real|REAL]] |
 +| BCD megadás | C#0 -tól\\ C#999 --ig | [[#word|WORD]] (BCD formában) |
 +| S5TIME           | S5T#0ms -tól\\ S5T#2h46m30s --ig | [[#s5time|S5TIME]] |
 +| CPU idő konstans\\ TIME | T# -24d20h31m23s647ms -tól\\ T#+24d20h31m23s647ms --ig | [[#time|TIME]] |
 +| T# -65535ms -tól\\ T#+65535ms --ig | [[#time|TIME]] |
 +| CPU idő konstans\\ DATE | D#1990-01-01 -tól\\ D#2168-12-31 --ig | [[#date|DATE]] |
 +| CPU idő konstans\\ TIME_OF_DAY | TOD#00:00:00.000 -tól\\ TOD#23:59:59.999 --ig | [[#tod|TIME_OF_DAY]] |
 +| CPU idő konstans\\ DATE_AND_TIME | DT#89-12-31-23:59:59.999 | [[#date_and_time|DATE_AND_TIME]] |
 +| karakter | „a”\\ (ASCII kód) | [[#char|CHAR]] |
 +| karakterlánc | 2-től 254 karakterig a vezérlőkarakterekkel együtt\\ Vezérlőkarakterek:\\ $L : soremelés\\ $P : oldaltörés\\ $R : fej vissza\\ $T : tabulátor | [[#string|STRING]] |
 +| Pointer\\ konstansok | P#x.y (megadott tartományon belül) | POINTER |
 +| P#[tartomány]x.y | POINTER |
 +| P#[tartomány]x.y TYPE z (típusmegjelöléssel) | ANY |
 +
 +=== Néhány példa a konstansok alkalmazására ===
 +
 +^ Példa a konstans alkalmazására\\ (több sor esetén azonos az eredmény) ^ Leírás |
 +| L + 12 | Egy előjeles egész szám (16 bit) betöltése az AKKU1-L-L-be. |
 +| L 1.2345e-2\\ L 0.012345 | Egy IEEE formátumú törtszám (32 bit) betöltése az AKKU1-be |
 +| L  2#1010101010101010        | Bináris szó konstans (16 bit) betöltése az AKKU1-L-be |
 +| L B#(12,22) | Két előjel nélküli byte (16 bit) betöltés az AKKU1-L-be |
 +| L B#(12,22,32,42) | Négy előjel nélküli byte (32 bit) betöltés az AKKU1-be |
 +| L  B#16#FF     | 8 bites hexadecimális konstans betöltése az AKKU1-L-L-be |
 +| L  W#16#FFFF           | 16 bites hexadecimális konstans betöltése az AKKU1-L-be |
 +| L  DW#16#FFFFFFFF            | 32 bites hexadecimális konstans betöltése az AKKU1-be |
 +| L S5T#20.4 S | 20,4 sec betöltése S5T formátumban az AKKU1-L-be |
 +| L C#123 | 123 betöltése BCD formátumban az AKKU1-L-be |
 +| OW  W#16#AAAA       | VAGY szóművelet hexadecimális „AAAA”-val. Az érték az AKKU1-L-be kerül. |
 +
 +===== Adatterületek csoportosítása az S7 esetén =====
 +
 +^ Operand terület ^ Megnevezés ^ S7\\ jelölés ^ Jellemzés |
 +| Bementi változók Prozessabbild der\\ Eingänge | Bemenet (bit)\\ Eingang | **E** | Minden ciklus kezdetén a CPU beolvassa a bemeneteket a bemeneti változókba. |
 +| Bemeneti byte\\ Eingangsbyte | **EB** |
 +| Bemeneti szó\\ Eingangswort | **EW** |
 +| Bemeneti duplaszó\\ Eingangsdoppelwort | **ED** |
 +| Kimeneti változók Prozessabbild der\\ Ausgänge | Kimenet (bit)\\ Ausgang | **A** | Minden ciklus végeztével a CPU a kimeneti változókat kiadja a kimenetekre. |
 +| Kimeneti byte\\ Ausgangsbyte | **AB** |
 +| Kimeneti szó\\ Ausgangswort | **AW** |
 +| Kimeneti duplaszó\\ Ausgangsdoppelwort | **AD** |
 +| Merker\\ Merker | Merker (bit)\\ Merker | **M** | Merker memória |
 +| Merkerbyte\\ Merkerbyte | **MB** |
 +| Merker-szó\\ Merkerwort | **MW** |
 +| Merker-duplaszó\\ Merkerdoppelwort | **MD** |
 +| Idők\\ Zeiten | Timer\\ Zeit | **T** | Időfunkciók |
 +| Számlálók\\ Zähleren | Számláló\\ Zähler | **Z** | Számláló funkciók |
 +| DB\\ Datenbaustein |     | Adatterületek, melyek lehetnek global és instant típusúak |
 +| Global DB\\ Global Datenbaustein\\ AUF DB-vel hívható | **DB** | Globális DB jelölések\\ Global Datenbaustein Notation |
 +| DB bit\\ Datenbit | **DBX** |
 +| DB byte\\ Datenbyte | **DBB** |
 +| DB szó\\ Datenwort | **DBW** |
 +| DB duplaszó\\ Datendoppelwort | **DBD** |
 +| Instant DI\\ Instanz Datenbaustein\\ AUF DI-vel hívható | **DI** | Instant DB változók\\ Instanz Datenbaustein Notation |
 +| DI bit\\ Datenbit | **DIX** |
 +| DI byte\\ Datenbyte | **DIB** |
 +| DI szó\\ Datenwort | **DIW** |
 +| DI duplaszó\\ Datendoppelwort | **DID** |
 +| Lokális változók\\ Lokaldaten | Lokális bit\\ Lokaldatenbit | **L** | A lokális változók az OB-ken és FC-ken belül definiált változók. |
 +| Lokális byte\\ Lokaldatenbyte | **LB** |
 +| Lokális szó\\ Lokaldatenwort | **LW** |
 +| Lokális duplaszó\\ Lokaldatendoppelwort | **LD** |
 +| Periféria bemenetek\\ Peripheriebereich:\\ Eingänge | Periféria bemeneti byte\\ Peripherieeingangsbyte | **PEB** | A periféria be- és kimenetek direkt hozzáférést nyújtanak a központi egységre és a decentralizált egységre csatolt kártyákhoz. |
 +| Periféria bemeneti szó\\ Peripherieeingangswort | **PEW** |
 +| Periféria bemeneti duplaszó\\ Peripherieeingangsdoppelwort | **PED** |
 +| Periféria kimenetek\\ Peripheriebereich:\\ Ausgänge | Periféria kimeneti byte\\ Peripherieausgangsbyte | **PAB** |
 +| Periféria kimeneti szó\\ Peripherieausgangswort | **PAW** |
 +| Periféria kimeneti duplaszó\\ Peripherieausgangsdoppelwort | **PAD** |
 +
 +===== S7 OB-k teljes jegyzéke, leírással =====
 +
 +^OB\\ száma^megnevezés^leírás^PLC\\ megkötésesk|
 +^OB1|ciklikus végrehajtás\\ Zyklisches Programm|Az OB1 a PLC-n ciklikusan kerül végrehajtásra. Ha véget ért, PLC elküldi a Global-adatokat és lezárja a ciklust.\\ Ez a legalacsonyabb prioritású OB, azaz minden más OB ennek a futását szakítja meg. [[soft_basic#ob1|További információ itt található.]]|minden PLC típuson fut|
 +^OB10 -\\ OB17|egyszeri vagy periodikus hívású\\ OB-k\\ Uhrzeitalarm-OBs|Ezeknek az OB-knak a hívás-sűrűsége az alábbiak szeint állítható:\\ egyszeri percenkénti óránkénti naponta hetente havonta évenként hónap végén Az OB-k beállítását az SFC 28 "SET_TINT", aktiválásukat az SFC 30 "ACT_TINT" végzi.|minden PLC típuson fut, de a 300-asokon csak az OB10 áll rendelkezésre.|
 +^OB20 -\\ OB23|Késleltetett hívású OB-k\\ Verzögerungsalarm-OBs|Késleltetett indítású OB-k. Az OB-kat az SFC 32 "SRT_DINT" -en keresztül lehet indítani. A késleltetési idő álló PLC-n nem fut, és minden hidegindítás újra indítja a késleltetést.|A 300-as PLC-ken jellemzően csak az OB20 hívható, és csak a 317/319-en érhető el az OB21.|
 +^OB30 -\\ OB38|időzített OB-k \\ Weckalarm-OBs| A wekker OB-k meghatározott idok szerint kerülnek hívásra. A magasabb prioritású OB-k az alacsonyabb prioritással rendelkezoket megszakítják. (Az OB1-et alapértelmezés szeint mindegyik megszakítja). Az alapértelmezett idők átállíthatók.\\ OB _ default idő-raszter _  Prioritás \\ OB30 _ 5s _ 7 \\ OB31 _ 2s _ 8 \\ OB32 _ 1s _ 9 \\ OB33 _ 500ms _ 10 \\ OB34 _ 200ms _ 11 \\ OB35 _ **100ms** _ **12** \\ OB36 _ 50ms _ 13 \\ OB37 _ 20ms _ 14 \\ OB38 _ 10ms _ 15 |A 300-as PLC-ken jellemzően csak az OB35 hívható, és csak a 317/319-en érhető el az OB32, 33, 34.|
 +^OB40 -\\ OB47|Folyamat OB-k\\ Prozessalarm-OBs|Folyamatokhoz köthető ezeknek az OB-knak a futtatása. Jellemzően az I/O vagy FM kártyákon definiált csatornák értékváltásai tudják aktiválni a hozzájuk rendelt folyamat OB-t.|Az S7- 300-asokon csak az OB40 áll rendelkezésre.|
 +^OB55|DPV1-állapot OB\\ Statusalarm-OB|Akkor aktiválódik, ha valamelyik, DPV1-gyel aktivált slave állapotváltozás jelzéssel (például RUN » STOP) kiváltja azt. A kiváltó eseményeket a DPV1 slave egység dokumentációjából lehet kibogarászni.|Csak a DP-s CPU-kon áll rendelkezésre - S7-300-asokon is.|
 +^OB56|DPV1 update OB\\ Update-Alarm-OB|Akkor aktiválódik, ha valamelyik, DPV1-gyel aktivált slave paraméterváltozás jelzéssel (ez történhet helyi- vagy távoli eléréssel) kiváltja azt. A kiváltó eseményeket a DPV1 slave egység dokumentációjából lehet kibogarászni.|Csak a DP-s CPU-kon áll rendelkezésre - S7-300-asokon is.|
 +^OB57|DPV1 gyártóspecifikus OB\\ OB für herstellerspezifische Alarme|Akkor aktiválódik, ha valamelyik, DPV1-gyel aktivált slave valamilyen gyártóspecifikus jelzéssel kiváltja azt. A kiváltó eseményeket a DPV1 slave egység dokumentációjából lehet kibogarászni.|Csak a DP-s CPU-kon áll rendelkezésre - S7-300-asokon is.|
 +^OB 60|Multicomputingalarm-OB|Ezzel a OB-vel elérhető, hogy egy adott eseményre több CPU szinkronizáltan egyszerre reagáljon. Az OB aktiválását az SFC 35 "MP_ALM" funkcióval lehet elérni az összes , adott busz-szegmensben elérhető CPU-n, ha azokon nincs aktiválva a letiltó hatályú SFC 39 "DIS_IRT", vagy a késleltető SFC 41 "DIS_AIRT".|S7-300-as PLC-n nem áll rendelkezésre.|
 +^OB 61-\\ OB 64|DP-szinkron OB-s\\ Taktsynchronalarm-OBs|Az OB lehetővé teszi a DP hivásokkal szinkronban történő végrehajtást.|S7-300 esetén csak az OB61, és csak a CPU315-2PN/DP / 317 / 319 -n futtatható.|
 +^OB 65|Technologiesynchronalarm-OB|Az OB lehetővé teszi, hogy a technológiai DB aktualizálásával szinkronban futtasunk programot.|Csak a "T" PLC-ken érhető el.[[hard_basic#T_s_CPUk|Ezekről bővebben itt.]]|
 +^OB 70|Peripherie-Redundanzfehler-OB|A H-CPU akkor hívja fel az OB-t, ha redundancia-kiesés lép fel a Profibus-DP-n ( például buszkiesés az aktív DP-master-en, vagy hiba a DP-Slave-re váltáskor). Amennyiben az OB70 felhívásra került, a PLC nem áll le, hanem redundáns módban marad.|Csak H-s PLC-ken érhető el.[[hard_basic#H_s_CPUk|Ezekről bővebben itt.]]|
 +^OB 72|CPU-Redundanzfehler-OB|Az OB72 futását az alábbi események válthatják ki: Redundanciakiesés a CPU-n Tartalék - Master átkapcsolás Szikronizációs hiba Hiba egy SYNC modulban Átváltás megszakítása Hasonlítási hiba (RAM, PAA) |Csak H-s PLC-ken érhető el.[[hard_basic#H_s_CPUk|Ezekről bővebben itt.]]|
 +^OB 73|Kommunikations-Redundanzfehler-OB|A H-CPU az első "H"-s S7-kapcsolat (S7-Verbindung) kiesésésnél hívja fel az OB-t. A CPU nem megy STOP-ba, ha az adott esemény bekövetkezésekor az OB meghívásra kerül.|Csak a 417-4H-n érhető el, a V2.0.x firmware verziótól|
 +^OB 80|Ciklusidő túllépés OB\\ Zeitfehler-OB|Ciklusidő túllépés (Überschreiten der Zykluszeit) esetén kerül meghívásra az OB. A CPU nem megy STOP-ba, ha az adott esemény bekövetkezésekor az OB meghívásra kerül. Amennyiben azomban az adott ciklusban másodszor is meghívásra kerül az OB, a STOP elkerülhetetlen. (Végtelenített ciklusokra az OB nem ad megoldást.)| |
 +^OB 81|Tápellátás hiba OB\\ Stromversorgungsfehler-OB|Az OB a tápellátás hiba ("Fehler in der Stromversorgung")bekövetkezése vagy az akkumlátor kiesése esetén kerül meghívásra. A CPU nem megy STOP-ba, ha az adott esemény bekövetkezésekor az OB meghívásra kerül. Az OB futását az akkumlátor hiba ("Batteriefehler") is kiváthatja, ha az akkumlátor ellenőrzését a BATT.INDIC-kel aktiváltuk.|csak s7-400-on működik|
 +^OB 82|diagnózis hiba OB\\ Diagnosealarm-OB|Az OB-t a beérkező (kommendes Ereignis) és a kifutó (gehendes Ereignis) hibák aktiválják. Ezek a hibák azokról a modulokról érkezhetnek, amiken a diagnózishibák kezelése (Diagnosealarm) engedélyezett.| |
 +^OB 83|Ki / Becsatlakoztatás OB\\ Ziehen/Stecken-OB|Az OB az alábbi esetekben kerül meghívásra: Projektált kártya kihúzása vagy beillesztése esetén CiR-re alkalmas kártya menet közbeni beillesztése esetén A CPU nem megy STOP-ba, ha az adott esemény bekövetkezésekor az OB meghívásra kerül.|az s7-300 esetén csak az alábbi típusokon:\\ CPU IM151, 315PN és 317PN|
 +^OB 84|CPU-Hardwarefehler-OB|Az OB az alábbi esetekben kerül meghívásra: Memóriahiba beazonosítása esetén S7-400H esetén: csökkent átviteli képesség a redundáns CPU-k között a redundanciát biztosító csatornán WinAC RTX esetén: Hiba a PC operációs rendszerével (pl. kék halál) A CPU nem megy STOP-ba, ha az adott esemény bekövetkezésekor az OB meghívásra kerül.\\ Az OB működését az SFC 39 - SFC 42 befolyásolhatja.| |
 +^OB 85|Programmablauffehler-OB|Az OB az alábbi esetekben kerül meghívásra: meghívás egy be nem töltött OB-re (kivétel: OB 80, 81, 82, 83, 86) egy (pl. meghívott) program-modul nem hívható meg. periféria aktualizálási hiba A CPU nem megy STOP-ba, ha az adott esemény bekövetkezésekor az OB meghívásra kerül.| |
 +^OB 86|Baugruppenträgerausfall-OB|Az OB az alábbi esetekben kerül meghívásra: ha kiesik egy bővítőegység (pl. ET) ha kiesik egy DP-Master-rendszer ha kiesik egy decentrális periféria (Profibus DP vagy ProfiNet IO) A CPU nem megy STOP-ba, ha az adott esemény bekövetkezésekor az OB meghívásra kerül.\\ Az OB működését az SFC 39 - SFC 42 befolyásolhatja.|Csak a DP-s és PN-IO-s CPU-kon áll rendelkezésre \\ S7-300 PLC-ken nem érhető el.|
 +^OB 87|Kommunikationsfehler-OB|Az OB kommunikációs hiba hatására kerül meghívásra. A CPU nem megy STOP-ba, ha az adott esemény bekövetkezésekor az OB 87 meghívásra kerül. S7-400 CPU esetén Az OB működését az SFC 39 - SFC 42 befolyásolhatja.| |
 +^OB 88|Bearbeitungsabbruch-OB|Az OB akkor kerül meghívásra, ha a program-modul (Programmbaustein) feldolgozása valamilyen oknál fogva megszakad. Ennek oka lehet: a túl mély struktúra szinkron-hibát okoz túl mély struktúra eljáráshívásnál (U-Stack kiakadás) hiba lép fel a lokális adatok (Lokaldaten) allokálásánál A CPU nem megy STOP-ba, ha az adott esemény bekövetkezésekor az OB meghívásra kerül.\\ Az OB működését az SFC 39 - SFC 42 befolyásolhatja.| |
 +^OB 90|Hintergrund-OB|Az S7 felügyeli a maximális ciklusidőt és garantálja annak minimális szintjét. Amennyiben az aktuális ciklusidő kisebb - minden egyéb OB megszakítással és a rendszer által foglalt időkkel - mint a minimális ciklusidő, akkor ha a CPU-ra fel lett töltve az OB90, akkor meghívja azt ha a CPU-n nem található az OB, akkor a rendszer késlelteti a következő OB1 indítást, ezáltal tartja a garantált minimum ciklusidőt\\ Amennyiben a minimális ciklusidő és a ciklus felügyeleti idő egymáshoz közel lettek definiálva, az OB 90-ből felhívott SFB-k és SFC-k váratlan leállást is eredményezhetnek.| |
 +^OB\\ 100 -\\ OB\\ 102|felfutás OB-k\\ Anlauf-OBs|A felfutás lehetséges oka, és az ezáltal meghívott OB: Ismételt felfutás (Wiederanlauf) : **OB 101** Újraindítás (Neustart - Warmstart) : **OB 100** Hideg indítás (Kaltstart) : **OB 102** |Az ismételt felfutás (Wiederanlauf) S7-300 és S7-400H esetén nem lehetséges.|
 +^OB\\ 121|programozói hiba OB\\ Programmierfehler-OB|Programozói hiba fellépése esetén az OB 121 kerül meghívásra. Ennek oka lehet: Olyan program felhívása, ami nem került a CPU-ra letöltésre Kicímzés a DB-ből Pontatlan pointer-használat A CPU nem megy STOP-ba, ha az adott esemény bekövetkezésekor az OB meghívásra kerül.\\ Az SFC 36 "MSK_FLT", SFC 37 "DMSK_FLT" és SFC 38 "READ_ERR" segítségével a befutó hibák maszkolhatók.| |
 +^OB\\ 122|Peripheriezugriffsfehler-OB|Periféria olvasási hiba esetén az OB meghívásra kerül. Ha az OB a hiba bekövetkezésének idején le van töltve a CPU-ra, akkor a CPU nem megy STOP-ba, egyébként viszont igen.\\ Az SFC 36 "MSK_FLT", SFC 37 "DMSK_FLT" és SFC 38 "READ_ERR" segítségével a befutó hibák maszkolhatók.| |
 +
 +Minden OB-nak van lokális adatterülete, ahonnan a részletes információk kiolvashatók. A fellépő hibákról és a meghívott OB-król a CPU diagnózis is tájékoztatást ad.
 +
 +A hibakezelő OB-k használata fejlesztés alatt nem előnyös, mert ilyenkor sokkal egyszerűbben visszakereshető egy hiba forrása, ha a PLC rögtön,  a hibát követően kiesik és a CPU diagnózisból visszakövethető az események sora.