PLC - Programovatelné logické automaty
PLC-AUTOMATIZACE - PROGRAM - PROGRAMOVÉ BLOKY - PARAMETRIZACE PODPROGRAMŮ - NEPŘÍMÉ Provoz webu zajišťuje:

www.hapesoft.cz

NEPŘÍMÉ PŘEDÁVÁNÍ PARAMETRŮ

Charakteristika

Při nepřímém předávání parametrů se nepředávají konkrétní hodnoty proměnných do parametrů, ale zadává se parametr, který určuje se, odkud si je má podprogram načíst. Tento způsob je vhodný pro velký objem hodnot, které se mají předávat a značně zjednodušuje a zpřehledňuje program, například při předávání datového oblasti (telegramu) ke komunikaci.

Předání konkrétního DB v parametru

Volání podprogramu, který má definován pouze jeden parametr (DATA), očekává se, že parametru bude přiřazeno označení oblasti dat ke zpracování (DB n). Příklad je vhodný pro případy, kdy jsou v daném místě programu zpracovávána stejná data a na jiném místě stejným podprogramem zpracována data jiná. Oblasti dat, které jsou podprogramy předávány musí mít shodnou strukturu dat.

1a) Deklarace proměnných v datovém bloku DB 66 pro skupinu proměnných A:

 
DB 66
(adresa) (symbol) (typ)
0.0 ENABLE Bool // proměnná jednoho bitu typu Bool
0.1 STATUS Bool // proměnná jednoho bitu typu Bool
2.0 VALUE Integer // celočíselná proměnná typu Integer
4.0 COEFF Real // proměnná čísla s des. čárkou typu Real
8.0 DIFF Integer // celočíselná proměnná typu Integer
 

1a) Deklarace proměnných v datovém bloku DB 67 pro skupinu proměnných B:

 
DB 67
(adresa) (symbol) (typ)
0.0 ENABLE Bool // proměnná jednoho bitu typu Bool
0.1 STATUS Bool // proměnná jednoho bitu typu Bool
2.0 VALUE Integer // celočíselná proměnná typu Integer
4.0 COEFF Real // proměnná čísla s des. čárkou typu Real
8.0 DIFF Integer // celočíselná proměnná typu Integer
 

2) Volání podprogramu pro hodnoty A a B uložené v datovém bloku 66 a 67:

 
CALL TEST // volání podprogramu
DATA: DB 66 // parametr: potřebné hodnoty jsou uloženy v datovém bloku DB 66
...
 
CALL TEST // volání podprogramu
DATA: DB 67 // parametr: potřebné hodnoty jsou uloženy v datovém bloku DB 67
 

3) Podprogram

 
NAME: TEST // název podprogramu
Inp: DATA Block // vstupní parametr: typ Blok
 
OPN DATA // otevření (zpřístupnění) přiřazeného DB parametrem DATA
L DW 2 // načtení hodnoty datového slova 2 VALU (Integer)
ITD // pomocná konverze
DTR // pomocná konverze
L DD 4 // načtení hodnoty dvojitého datového slova 4 COEF (Real)
-R // rozdíl hodnot
TRUNC // pomocná konverze (DInt/DInt)
T DW 8 // uložení výsledku do datového slova 8 / DIFF (Int)
L 0 // porovnávací hodnota (konstanta)
>=F // porovnání
A DBX 0.0 // podmínka výstupu datového bitu 0.0 ENBL (Bool)
= DBX 0.1 // uložení výsledku podmíněného porovnání do datového bitu 0.1 STAT (Bool)
RET // konec podprogramu
 

Předání čísla DB jako parametru

Volání podprogramu, který má definován pouze jeden parametr (DB-NR), očekává se, že parametru bude přiřazeno pouze číslo datové oblasti (n). Vhodné pro případy, kdy mohou být na jednom místě programu zpracovávány různá data.

1a) Deklarace proměnných v datovém bloku DB 66 pro skupinu proměnných A:

 
DB 66
(adresa) (symbol) (typ)
0.0 ENABLE Bool // proměnná jednoho bitu typu Bool
0.1 STATUS Bool // proměnná jednoho bitu typu Bool
2.0 VALUE Integer // celočíselná proměnná typu Integer
4.0 COEFF Real // proměnná čísla s des. čárkou typu Real
8.0 DIFF Integer // celočíselná proměnná typu Integer
 

1b) Deklarace proměnných v datovém bloku DB 67 pro skupinu proměnných B:

 
DB 67
(adresa) (symbol) (typ)
0.0 ENABLE Bool // proměnná jednoho bitu typu Bool
0.1 STATUS Bool // proměnná jednoho bitu typu Bool
2.0 VALUE Integer // celočíselná proměnná typu Integer
4.0 COEFF Real // proměnná čísla s des. čárkou typu Real
8.0 DIFF Integer // celočíselná proměnná typu Integer
 

2) Volání podprogram pro hodnoty A nebo B uložené v datovém bloku 66 nebo 67:

 
...   n   // určení čísla požadovaného datového bloku (n = 66, 67)
T AREA // uložení do pomocné proměnné
 
CALL TEST // volání podprogramu
DB-NR: AREA // parametr určuje, že potřebné hodnoty jsou uloženy v DB n
 

3) Podprogram

 
NAME: TEST // název podprogramu
Inp: DB-NR Integer // vstupní parametr: číslo bloku, typ Integer
 
OPN [DB-NR] // otevření (zpřístupnění) DB určeného číslem v parametru DB-NR
L DW 2 // načtení hodnoty datového slova 2 VALU (Integer)
ITD // pomocná konverze
DTR // pomocná konverze
L DD 4 // načtení hodnoty dvojitého datového slova 4 COEF (Real)
-R // rozdíl hodnot
TRUNC // pomocná konverze (DInt/DInt)
T DW 8 // uložení výsledku do datového slova 8 / DIFF (Int)
L 0 // porovnávací hodnota (konstanta)
>=F // porovnání
A DBX 0.0 // podmínka výstupu datového bitu 0.0 ENBL (Bool)
= DBX 0.1 // uložení výsledku podmíněného porovnání do dat. bitu 0.1  STAT (Bool)
RET // konec podprogramu
 

Předání čísla DB a OFFSETu dat v parametrech

Volání podprogramu, který má definován parametr (DB-NR) a očekává se, že parametru bude přiřazeno pouze číslo datové oblasti (n), druhému parametru (OFFSET) je přiřazena hodnota, která určuje, s kterou částí datové oblasti (posunutím dat) se má pracovat, respektive, kde se nachází první hodnota určená ke zpracování. Efekt je takový, že v jednom datovém bloku může být uloženo více datových skupin a vybírá se, kterou skupinu dat má podprogram zpracovat.

1) Deklarace proměnných v datovém bloku DB 70 pro skupinu proměnných A i B:

 
DB 70
(adresa) (symbol) (typ)
  // pro skupinu proměnných A
 0.0 A_ENABLE Bool // proměnná jednoho bitu typu Bool
 0.1 A_STATUS Bool // proměnná jednoho bitu typu Bool
 2.0 A_VALUE Integer // celočíselná proměnná typu Integer
 4.0 A_COEFF Real // proměnná čísla s des. čárkou typu Real
 8.0 A_DIFF Integer // celočíselná proměnná typu Integer
10.0 A_REZ_1 DWord // rezerva
14.0 A_REZ_2 Word // rezerva
// pro skupinu proměnných B
16.0 ENABLE Bool // proměnná jednoho bitu typu Bool
16.1 STATUS Bool // proměnná jednoho bitu typu Bool
18.0 VALUE Integer // celočíselná proměnná typu Integer
20.0 COEFF Real // proměnná čísla s des. čárkou typu Real
24.0 DIFF Integer // celočíselná proměnná typu Integer
26.0 B_REZ_1 DWord // rezerva
30.0 B_REZ_2 Word // rezerva
// pro skupinu proměnných ...
32.0 ...
 

2) Volání podprogramu pro hodnoty A / B uložené v datovém bloku 70:

 
CALL TEST // volání podprogramu
DB-NR: +70 // potřebné hodnoty jsou v DB 70
OFFSET: +0 // posunutí výběru hodnot pro skupinu A o 0 pozic v DB (konstanta)
...  
 
    CALL TEST   // volání podprogramu
    DB-NR: +70   // potřebné hodnoty jsou v DB 70
    OFFSET: +16   // posunutí výběru hodnot pro skupinu B o 16 pozic v DB (konstanta)
           
 
Poznámka
Místo přímého zadání čísla DB a OFFSETu je možno použít i proměnné obsahující tyto hodnoty.

3) Podprogram:

 
NAME: TEST // název podprogramu
Inp: DB-NR Integer // vstupní parametr: číslo bloku, typ Integer
Inp: OFFSET Integer // vstupní parametr: velikost posunutí
           
OPN [DB-NR] // otevření (zpřístupnění) DB určeného číslem v parametru DB-NR
    L   OFFSET   // načtení posunutí v datovém bloku
...   // zpracování offsetu posunutí pro adresování proměnných
 
... // instrukce podprogramu
     
RET // konec podprogramu
 

Předání čísla DB a INDEXu dat v parametrech

Volání podprogramu, který má definován parametr (DB-NR) a očekává se, že parametru bude přiřazeno pouze číslo datové oblasti (n), druhému parametru (INDEX) je přiřazena hodnota, která určuje, s kolikátou částí datové oblasti (posunutím dat) se má pracovat, to určuje i to, kde se nachází první hodnota určená ke zpracování. Efekt je takový, že v jednom datovém bloku může být uloženo více datových skupin a vybírá se, s kterou skupinu dat má podprogram zpracovat, a to pomocí parametru INDEX, kdy pevná hodnota může být nahrazena proměnnou. V podprogramu je pak nutno interně dopočítat vlastní OFFSET.

1) Deklarace proměnných v datovém bloku DB 70 pro skupinu proměnných A i B:

 
DB 70
(adresa) (symbol) (typ)
// pro skupinu proměnných A
 0.0 A_ENABLE Bool // proměnná jednoho bitu typu Bool
 0.1 A_STATUS Bool // proměnná jednoho bitu typu Bool
 2.0 A_VALUE Integer // celočíselná proměnná typu Integer
 4.0 A_COEFF Real // proměnná čísla s des. čárkou typu Real
 8.0 A_DIFF Integer // celočíselná proměnná typu Integer
10.0 A_REZ_1 DWord // rezerva
14.0 A_REZ_2 Word // rezerva
// pro skupinu proměnných B
16.0 B_ENABLE Bool // proměnná jednoho bitu typu Bool
16.1 B_STATUS Bool // proměnná jednoho bitu typu Bool
18.0 B_VALUE Integer // celočíselná proměnná typu Integer
20.0 B_COEFF Real // proměnná čísla s des. čárkou typu Real
24.0 B_DIFF Integer // celočíselná proměnná typu Integer
26.0 B_REZ_1 DWord // rezerva
30.0 B_REZ_2 Word // rezerva
// pro skupinu proměnných ...
32.0 ...
 

2) Volání podprogramu pro hodnoty A / B uložené v datovém bloku 70:

 
CALL TEST // volání podprogramu
DB-NR: +70 // potřebné hodnoty jsou v DB 70
INDEX: +0 // ukazatel výběru hodnot pro skupinu A v DB
...  
 
    CALL TEST   // volání podprogramu
    DB-NR: +70   // potřebné hodnoty jsou v DB 70
    INDEX: +1   // ukazatel výběru hodnot pro skupinu B v DB
           
 
Poznámka
Místo přímého zadání čísla DB a INDEXu je možno použít i proměnné obsahující tyto hodnoty.

3) Podprogram:

 
NAME: TEST // název podprogramu
Inp: DB-NR Integer // vstupní parametr: číslo bloku, typ Integer
Inp: INDEX Integer // vstupní parametr: index posunutí
           
OPN [DB-NR] // otevření (zpřístupnění) DB určeného číslem v parametru DB-NR
    L   INDEX   // načtení indexu posunutí v datovém bloku
    L   +16   // velikost oblasti dat A / B (konstanta)
    *I      
... // zpracování offsetu posunutí pro adresování proměnných
 
... // instrukce podprogramu
     
RET // konec podprogramu
 

PLC-AUTOMATIZACE - PROGRAM - PROGRAMOVÉ BLOKY - PARAMETRIZACE PODPROGRAMŮ - NEPŘÍMÉ
 
Publikovaný obsah je určen pouze pro individuální studium.
Není povolena distribuce, prodej, přetisk a použití textu a/nebo vyobrazení (úplný, dílčí a/nebo částečný), použití ke školení a/nebo výuce (hromadné, skupinové nebo zadávané), veřejné a/nebo skupinové prezentace a ani jiné formy šíření v hmotné a/nebo nehmotné podobě.