Analóg jelek kezelése S7-300/400 PLC-vel

Módosítva: 2012. október 11

Egy gyors átteknités az analóg be és kimeneti modulok kezeléséről a teljesség igénye nélkül. Példaprogrammal.

A hardver konfiguráció

Analóg jelek kezeléséhez az analóg be és/vagy kimeneti modulokat be kell állítani a Step7 HW config programban. A hardver konfigot legegyszerűbben a Simatic manager-ből érhetjük el a Hardware objektumra kattintva:



A megfelelő analóg modult a katalógusból lehet a CPU mellé illeszteni ugyanúgy, ahogy a digitális ki és bemeneti modulokat is:



Az analóg modul beillesztésekor automatikusan kap egy szabad periféria cím tartományt, amin keresztül a modul csatornáit (analóg be is kimeneteit) el lehet majd érni az S7 programból.
A modul címét kézzel később módosítani is lehet ha szükséges, de természetesen csak más modul által nem használt, szabad címeket lehet megadni.



A példában szereplő SM334-es modul egy olyan analóg modul, ami 4 analóg bemenetet és 2 analóg kimenetet is tartalmaz.
Minden analóg csatorna egy periféria szóhoz lesz hozzárendelve. Analóg bemenethez PIW (periféria bemeneti szó, német verzióban PEW) kimenethez pedig PQW periféria kimenti szó, német verzióban PAW). A hardver konfigban ezek címei láthatók (pirossal bekarikázva).
A címtartományhoz sorfolytonosan rendeli hozzá a bemeneti és kimeneti csatornák periféria szavait.
Azaz ha a címtartomány például PIW288-PIW295 tartományú lesz, ahogy a példában is, akkor:
PIW288 0-ás analóg bemeneti csatorna a modulon
PIW290 1-es analóg bemeneti csatorna a modulon
PIW292 2-es analóg bemeneti csatorna a modulon
PIW294 3-as analóg bemeneti csatorna a modulon

Természetesen ha 8 bemenetű az analóg modul, akkor a címtartomány annak megfelelően 8 word (16 byte) méretű lesz.
A két analóg kimenet az alábbi PQW periféria szavakat kapja:
PQW288 0-ás analóg kimeneti csatorna a modulon
PQW290 1-es analóg kimeneti csatorna a modulon

A címek byte alapúak, de word-ökre hivatkoznak (1 word=2 byte) ezért tartozik minden analóg csatornához két cím. Az analóg csatornákat tehát 16 bites periféria szavakon keresztül lehet elérni.

Az analóg jel típusának beállítása:

A bemeneti csatornák által fogadott jel típusát a HW konfigban be kell állítani!
A beállításkor adjuk meg (Az analóg modulon jobb kattintás, majd Properties menüpont) hogy a modul milyen jelet fogad majd: feszültség, áram, hőelem, Pt100 ellenállás hőmérő, stb)



A HW konfigban a nem használt bemeneteket le is lehet tiltani. Mivel a modul miltiplexeli a bemeneteket, a tiltással csökken a konverziós idő. A legtöbb alkalmazásnál ez az idő nem kritikus, olyankor a nem használt bemenetet nem kell feltétlenül tiltani.
A kimenet beállítása hasonlóképpen történik (properties ablak, output fül).
Bizonyos modulokon, Pl. az SM331-es, 8 csatornás bemeneti modulon (6ES7331-7KF02-0AB0) a bemenetekhez rendelt jel formátumát magán a modulon is és a HW konfigban is be kell állítani (egyformán!). A méréstartomány beállítása a modul oldalán lévő dugasszal történik:



Ennél a modulnál a bemeneteket kettesével egy-egy csoportba sorolták. A bemeneti jel típusát és a méréstartományt csoportonként lehet meghatározni, így a bemenetek tulajdonsága csak kettesével állítható. Így pl. az 1-es bemeneti csatorna beállítása mindig azonos lesz a 0-s csatorna beállításával.
A beállítást egy négyzet alakú dugaszoló rövidzáró megfelelő helyzetbe fordításával kell elvégezni a modul oldalán látható feliratok szerint.
A program
A HW konfig feltöltése után, ha kap tápfeszültséget, az analóg modul üzemkész.

Az analóg bemenetek a beállított méréstartományon belül az adott bemenethez (csatornához) beállított periféria szóban 0-27648 tartományba (vagy -27648-27648) eső értéket adnak vissza ha a jel a méréstartományon belül van.
Ha a mérőbemenet úgy van beállítva, hogy negatív tartományban is mér (pl.: +/-10V) akkor a negatív méréstartomány határához -27648-as periféria szó érték tartozik.
Tehát pl. ha a 0 bemenet 4-20mA-re van beállítva, akkor 4mA bemeneti áramnál a PIW288 0 értéket ad vissza, ha a bemeneten 20mA folyik, akkor 27648-at, Ha 16mA, akkor 13824-et, stb.
Ha a bemenet 0-10V-ra van állítva, akkor a 27648-at 10V-os feszültségnél kapjuk.
A bemenet rendelkezik bizonyos tartalékkal, így a méréstartományon túl is képes mérni néhány százalékkal. Ez lehetővé teszi, hogy programból érzékeljük a mérő bemenet túlcsordulását.

Az analóg kimenet hasonlóan működik. Az adott kimeneti csatornához rendelt periféria szóba a 0-27648-as értéktartományba eső számot kell beírni. Ha az 1-es kimenet 0-10V-ra van beállítva, akkor a PQW290-be 13824-et írva, a kimenet +5V-ot ad ki.

Figyelem!
Ha az analóg bemenet hőmérséklet mérésre van beállítva, akkor a beolvasott érték tartománya nem 0 27648! Ilyenkor a hőmérséklet értékét olvashatjuk ki fix pontos szám formájában, mert a modul elvégzi az érték konverziót és kompenzálja a hőmérő szonda nemlinearitását is.
Pt100 esetén tehát ha a mért hőmérséklet 165 Celsius, akkor a beolvasott érték 1650, 645.2 foknál 6452, stb. A Pt100 hőmérséklet mérés a 8 bemenetű analóg moduloknál 2 analóg csatornát használ, a hőmérséklet a kisebb csatornaszámú bemenetről olvasható le:



A példaprogram

A programban van négy funkció blokk, aminek segítségével az analóg be és kimenetek által használt 0 27648 tartományt skálázni lehet. A skálázó blokkokkal az analóg bemenetről olvasott érték közvetlenül mért fizikai mennyiséggé konvertálható (nyomás, áram, feszültség, stb.).
Tartalmaz továbbá egy tartomány kapcsoló blokkot, ami bináris kimeneteivel jelzi a mért mennyiség beállítható küszöb értékek által meghatározott tartományhoz képesti viszonyát.

Ezekkel a következő funkciókat látja el:
Példaprogram egy SM334-es analóg modult használ. A program működése a mellékelt VAT tábla segítségével próbálható ki „VAT_ANALOG”:



//Nyers periféria értékek
Itt az analóg bemenetekről olvasott nyers perifériaszó értékek jelennek meg (0-27648)

//Fizikai mennyiséggé konvertált értékek
A programban alkalmazott skálázó blokkokkal a periféria értékek fizikai mennyiséggé vannak átkonvertálva (hőmérséklet, feszültség, volt). Ezek az értékek olvashatók itt le.
Ezeket az értékeket a program MD merker duplaszavakba írja.

//Határérték beállítások
A program tartalmaz egy határérték figyelő blokkot (FC107), aminek egy alsó és egy felső határérték van megadva a, amiket a blokk a DB1-ből olvas ki. Ezeket a határértékeket lehet itt módosítani a próbához.
//Határérték kapcsolók állapota
A határérték figyelő blokk három kimenetei állapota jelenik meg ebben a 6 sorban (alsó határérték alatt, felső határérték fölött és a két határérték között). Logikai, két állapotú merker bitekben.

//Kimenetekre küldendő értékek
Az SM334-es modul két analóg kimenő csatornájának kipróbálása.
Az itt megadott értékek szintén skálázva vannak.
A CH sorában a kimenetre küldendő feszültséget kell megadni, a CH1-nél pedig egy százalékos értéket 0-100 tartományban.

A példaprogram (FC1)








A beállításokat tartalmazó DB1 felépítése



Az FC107-FC110 blokkok STL forrása:


FUNCTION FC 107 : VOID
TITLE =
//Bemeneti érték figyelése.
//#Alatt bekapcsol, ha #bemenet értéke #ALimit alatt van
//#Folott bekapcsol, ha #bemenet értéke #FLimit fölött van
//#Kozott bekapcsol, ha #Bemenet #ALimit és #FLimit között van
//
//#ALimit-nek kisebbnek kell lennie mint #FLimit! Ha nagyobb, akkor minden
//kimenet
//kikapcsol.
AUTHOR : Szirty
VERSION : 0.1

VAR_INPUT
  Bemenet : REAL ;    //Bementi (megfigyelt) érték
  ALimit : REAL ;    //ALsó limit
  FLimit : REAL ;    //Felső limit
END_VAR
VAR_OUTPUT
  Alatt : BOOL ;    //Bemenet #ALimit alatt
  Kozott : BOOL ;    //Bemenet #ALimit és #FLimit között
  Folott : BOOL ;    //Bemenet #FLimit fölött
END_VAR
BEGIN
NETWORK
TITLE =

      L     #ALimit;
      L     #FLimit;
      >R    ;
      JC    CL01; //Ha ALimit nagyobb mint FLimit, akkor minden kimenetet kikapcsol
      L     #Bemenet;
      L     #ALimit;
      <R    ;
      =     #Alatt;
      TAK   ;
      L     #FLimit;
      >R    ;
      =     #Folott;
      AN    #Alatt;
      AN    #Folott;
      =     #Kozott;
      BE    ;
NETWORK
TITLE =

CL01: CLR   ;
      =     #Alatt;
      =     #Folott;
      =     #Kozott;
      BE    ;
END_FUNCTION

FUNCTION FC 108 : VOID
TITLE =
//Az integer típusú periféria szót 10-el elosztva real típusú celsius fokká
//konvertálja. Csak ellenálláshőmérő bemenethez használható.
//#Celsius=#PIW_IN/10 
AUTHOR : Szirty
VERSION : 0.1

VAR_INPUT
  PIW_IN : INT ;    //Analóg kártya perifériaszó
END_VAR
VAR_OUTPUT
  Celsius : REAL ;    //Hőmérséklet
END_VAR
BEGIN
NETWORK
TITLE =

      L     #PIW_IN;
      ITD   ;
      DTR   ; // Integer bemenet átalkítása real számmá
      L     1.000000e+001;
      /R    ; // A bemenet osztása 10-el
      T     #Celsius; // és kiküldése a #Celsius kimenetre
END_FUNCTION

FUNCTION FC 109 : VOID
TITLE =
//Skálázás
//Az #InMin-#InMax tartományt #OutMin-#OutMax tartományra skálázza
//
//Out=((In-InMin)*((OutMax-OutMin)/(InMax-InMin)))+OutMin
//InRng=InMax-InMin
//OutRng=OutMax-OutMin
//R=OutRng/InRng
//Out=((In-InMin)*R)+OutMin
AUTHOR : Szirty
VERSION : 0.1

VAR_INPUT
  In : INT ;    //Skálázandó érték
  InMin : INT ;    //Bemenő tartomány minimuma
  InMax : INT ;    //Bemenő tartomány maximuma
  OutMin : REAL ;    //Kimenő tartomány minimuma
  OutMax : REAL ;    //Kimenő tartomány mximuma
END_VAR
VAR_OUTPUT
  Out : REAL ;    //Skálázott érték
END_VAR
VAR_TEMP
  InRng : REAL ;    //Bementi tartomány
  R : REAL ;    //Szorzó részeredmény
END_VAR
BEGIN
NETWORK
TITLE =
//
//
//
//InRng=InMax-InMin
      L     #InMin;
      ITD   ;
      DTR   ;
      L     #InMax;
      ITD   ;
      DTR   ;
      -R    ;
      T     #InRng;
//OutRng=OutMax-OutMin
      L     #OutMin;
      L     #OutMax;
      -R    ;
//R=OutRng/InRng
      L     #InRng;
      /R    ;
      T     #R;
      L     #In;
      L     #InMin;
      -I    ;
      ITD   ;
      DTR   ;
      L     #R;
      *R    ;
      L     #OutMin;
      +R    ;
      T     #Out;
END_FUNCTION

FUNCTION FC 110 : VOID
TITLE =
//#Be bemeneten érkező %-os értékből 0-27648-at állít elő.
AUTHOR : Szirty
VERSION : 0.1

VAR_INPUT
  Be : INT ;    //Bemenő érték %-ban (0-100)
END_VAR
VAR_OUTPUT
  Ki_PQW : INT ;    //Kimenő érték 0-27648 tartományra skélézva
END_VAR
BEGIN
NETWORK
TITLE =

      L     #Be;
      L     100;
      >I    ;
      JCN   L001; // Ha #Be nagyobb mint 100, akkor a kimenetet maximumra állítja és kilép
      L     27648;
      T     #Ki_PQW;
      BE    ;
L001: TAK   ;
      L     0;
      <I    ;
      JCN   L002; // Ha #Be kisebb mint 0 (negatív), akkor kimenetet nullára állítja és kilép
      L     0;
      T     #Ki_PQW;
      BE    ;
L002: L     #Be; // Ha a bemnet 0-100 között van, akkor megszorozza 276-al és az eredmény kimenetre
      L     276; // írja, majd kilép
      *I    ;
      T     #Ki_PQW;
END_FUNCTION

Symbol table



A forrásprogram lefordítása

  1. Iindítsuk el a Step7 Simatic manager programot
  2. Nyissuk meg a projektet amelyikbe be szeretnénk illeszteni a forrásban szereplő blokkokat
  3. Nyissuk meg a projekt fában a Sources szekciót (vagy Quellen)
  4. Az ablak jobb oldali részében hozzunk létre egy új STL forrást jobb kattintással (Insert new object / STL Source)
  5. Nyissuk meg a keletkezett "STL Source(1)" nevű elemet
  6. Megnyílik a LAD/STL/FBD szerkesztő üres oldallal
  7. Oda másoljuk be a fenti forrásprogramot a "FUNCTION FC 107 : VOID" kezdetű sortól az utolsó "END_FUNCTION" tartalmú sorig
  8. Mentsük el a file-t (Save)
  9. Válasszuk ki a file menüből a Compile menüpontot
Ezzel az FC107, FC108, FC109, FC110 blokkok létrejönnek a blokkok között a project fa Blocks szekciójában.
Innen már beilleszthető bármelyik programba akár FBD, akár LAD, akár STL-ben íródott.



Szirty