PLC-AUTOMATIZACE - PROGRAM - PROGRAMOVÉ BLOKY - PARAMETRIZACE PODPROGRAMŮ - ZÁSOBNÍK Provoz webu zajišťuje:

www.hapesoft.cz

PARAMETRY PŘEDÁVANÉ NA ZÁSOBNÍKU

Charakteristika

Nejuniverzálnější, způsob jak provádět předávání parametrů mezi programem a podprogramem je předávání hodnot na zásobníku.

Zásobník jako definovaná paměťová oblast

Princip tohoto způsobu je takový, že podprogram pracuje s pevně danými odkazy na paměťová místa (vstupní parametry), kam programátor před voláním podprogramu uloží potřebné vstupní proměnné. Podprogram zpracuje algoritmus řízení s těmito parametry a na pevně zvolené paměťová místa (výstupní parametry) uloží výsledky zpracování.

Příklad:

      // naplnění zásobníku podprogramu proměnnými
  L   "proměnná 1"   // načtení proměnné 1
  T   "parametr 1"   // uložení proměnné 1 do zásobníku parametrů
  L   "proměnná 2"   // načtení proměnné 2
  T   "parametr 2"   // uložení proměnné 2 do zásobníku parametrů
    ...  
  L   "proměnná n"   // načtení proměnné n
  T   "parametr n"   // uložení proměnné n do zásobníku parametrů
       
  CALL   "PODPROGRAM"   // volání podprogramu se společným programovým algoritmem
       
      // vydání výsledků ze zásobníku podprogramu
  L   "parametr n+1"   // načtení výsledku z parametru n+1
  T   "proměnná n+1"   // uložení výsledku do proměnné n+1
  L   "parametr n+2"   // načtení výsledku z parametru n+2
  T   "proměnná n+2"   // uložení výsledku do proměnné n+2
    ...  
 
Poznámka
Velikost zásobníku (počet položek) musí odpovídat počtu zpracovávaných proměnných (parametrů). Prakticky je možno pro výstupní parametry použít i oblast vstupních parametrů zásobníku tehdy, není-li vstupní parametr pro další zpracování v podprogramu již potřebný. Z hlediska přehlednosti toto ale není příliš vhodné.
Předávání parametrů na zásobníku je používáno i u jiných způsobů předávání parametrů, pouze jej uživatel "nevidí" a problém alokace ukládání/vydávání parametrů řeší systém interně.

Zásobník jako akumulátory CPU

Uvedený zápis předání parametrů je evidentně méně přehledný a zdlouhavý, protože vyžaduje poměrně pracný programový zápis pro předávání parametrů.

O něco efektivnějším způsobem, pro malý počet parametrů, je předání parametrů pomocí akumulátorů CPU, což jsou interní registry, které CPU používá pro interní operace. Nevýhoda takového způsobu je v tom, že CPU obsahuje malý počet těchto akumulátorů, zpravidla 2 (minimální nutný počet pro činnost CPU), u výkonnějších CPU pak 4 akumulátory. V tomto případě se využívá primitivní vlastnosti CPU, že při každém načtení hodnoty, předchozí hodnoty přesouvá do akumulátorů s vyšším číslem. Obrácený postup posunu akumulátorů (vyprázdnění) se provádí po provedení operace mezi akumulátory ACC 0 a ACC 1, přímá instrukce vyprázdnění nemusí být ale vždy instrukčně dostupná. Možným využitím je výpočet bodu na přímce pomocí rovnice Y = K • X + Q.

Při použití tohoto způsobu je potřeba mít na paměti, že první uložená hodnota (parametr) je uložena v akumulátoru s nejvyšším číslem (podle počtu načtení) a poslední načtená hodnota v akumulátoru ACC 0. Obsah libovolných akumulátorů nebývá možno dodatečně mezi sebou zaměňovat (pouze ACC 0 a ACC 1), proto musí být hodnoty zadávány ve správném pořadí. Tomuto způsobu přípravy hodnot a následujícímu způsobu provedení operací se říká "polská logika" a využívala ji například firma Hewlett Packard u řady stolních programovatelných kalkulátorů HP-41C/CV/CX.

Příklad pro CPU se 4 akumulátory: Výpočet podle rovnice Y = K • X + Q, vstupní hodnoty zadávány jako real, výstup real a integer. ACC 3 není potřebný.

          // naplnění zásobníku podprogramu proměnnými
          // ACC 2  ACC 1  ACC 0 
L "Q" // načtení proměnné Q (posunutí) ? ? Q
L "K" // načtení proměnné K (směrnice) ? Q K
L "X" // načtení proměnné X (proměnná) Q K X
 
CALL CALCULATION // volání podprogramu se společným programovým algoritmem
 
// vydání výsledků ze zásobníku podprogramu
T "Yi" // uložení výsledku do proměnné Y (Integer) Q Yr Yi
  TAK       // záměna akumulátorů Q Yi Yr
  T   "Yr"   // uložení výsledku do proměnné Y (Real) Q Yi Yr
         
 
         
NAME:  CALCULATION   // podprogram výpočtu ACC 2 ACC 1  ACC 0 
          // stav akumulátorů ... Q K X
  *R       // násobení Q Q K*X
  +R       // součet Q Q Yr=K*X+Q
  ENT       // zdvojení akumulátoru Q Yr Yr
  TRUNC       // integer Q Yr Yi
  RET       // návrat
         

Vlastní podprogram, podle výše uvedených příkladů, pak nemá žádnou hlavičku, ve které by se parametry deklarovaly a obsahuje pouze prováděcí programový kód.

Poznámka
Tato metoda předávání parametrů pomocí akumulátorů je velmi rychlá (nezatěžuje systém časovou náročností) ale je často opomíjena, respektive, využívají ji pouze zkušenější programátoři pro předání malého objemu parametrů mezi procesy.

PLC-AUTOMATIZACE - PROGRAM - PROGRAMOVÉ BLOKY - PARAMETRIZACE PODPROGRAMŮ - ZÁSOBNÍK
 
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ě.