11.07.2015 Views

PSP3 - uživatelská příručka - Amit

PSP3 - uživatelská příručka - Amit

PSP3 - uživatelská příručka - Amit

SHOW MORE
SHOW LESS
  • No tags were found...

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

PSE - Editor procesní staniceProc00 až Proc15ProcIdleŘádné procesy.Neumí přerušovat.Prázdný proces.Neumí přerušovat.Sdílení společných databázových proměnných mezi procesy, kdy jeden může být druhýmpřerušen, je poněkud problematické a je třeba dbát zvýšené opatrnosti. U procesu, kterýje přerušován nelze zajistit, že hodnoty databázových proměnných nebudou běhemprovádění procesu ovlivněny druhým procesem. Může se stát, že proměnná, kterou prvníproces načte na začátku bude mít při dalším čtení jinou hodnotu, změněnou druhýmprocesem, který přerušil vykonávání prvního. Jako příklad uvedeme špatně navrženévyhodnocování náběžné hrany:V rychlém procesu ProcQuick budeme načítat binární signál z DI kanálu do proměnné@Sig. Použijeme modul BinIn. V řádném procesu Proc00 budeme vyhodnocovatnáběžnou hranu signálu. Aktuální hodnotu signálu @Sig budeme porovnávat s minulouhodnotou @Last. Je-li minulá hodnota “0” a aktuální “1”, vyhodnotíme změnu jakonáběžnou hranu. Hodnotu proměnné @Sig poté zapíšeme do proměnné @Last proodpamatování minulého stavu.ProcQuick:BinIn #0.0, 0x0000, @SigProc00:LetLet@Nabezna = @Sig and not @Last@Last = @SigProblém nastává v tomto případě:Dejme tomu, že proměnné @Sig a @Last jsou nulové. Prvním příkazem Let vyhodnotíme,že není náběžná hrana. Před vykonáním druhého příkazu Let dojde k přerušenía spustí se proces ProcQuick. Dejme tomu, že v té chvíli dojde ke skutečné náběžnéhraně - do proměnné @Sig se načte hodnota “1”. Vykonávání procesu ProcQuick seukončí, řízení se vrátí do procesu Proc00 a začne se vykonávat druhý příkaz Let. Ten jižnačte do proměnné @Last novou změněnou hodnotu “1” proměnné @Sig. V příštím běhuprocesu Proc00 by se měla vyhodnotit náběžná hrana, ale jelikož proměnná @Last jižmá hodnotu “1”, tak se hrana nevyhodnotí.Nejjednodušší řešení je samozřejmě umístit načítání vstupního signálu a vyhodnocenínáběžné hrany do jednoho procesu. Pokud je z nějakého důvodu nutné, aby to bylo vedvou procesech, je možné problém odstranit použitím pomocné proměnné. Hodnota@Sig se v procesu Proc00 nejprve uloží do pomocné proměnné a pak se pracuje jižpouze s touto pomocnou proměnnou:ProcQuick:BinIn #0.0, 0x0000, @SigProc00:LetLetLet@Pom = @Sig@Nabezna = @Pom and not @Last@Last = @PomDalší možností je použít na vyhodnocování náběžné hrany modul BinDiff, který mázabudovaný mechanismus s pomocnou proměnnou uvnitř.Tento příklad pouze ukázal na problém se sdílením proměnných. Problematické jsouI jiné případy, například plnění matice v jenom procesu a práce s touto maticí v jinémprocesu. Přerušující proces může přerušit v době, kdy je část matice naplněna novýmihodnotami a část ještě starými. Obecně lze říci, že problémy nastávají, pokud procesypracují se sdílenými proměnnými, které se nenačítají nebo nezapisují pouze na jednomPSE - Editor procesní stanice 101

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!