Modelovanie a analýza systému reagujúceho na udalosti

Väčšinu dynamických systémov modelujeme v prostredí Simulink pomocou diferenciálnych a diferenčných rovníc, alebo pomocou fyzikálnych komponentov knižníc Simscape. Niekedy sa však stretávame so systémami, ktoré menia svoj stav na základe udalostí. Tieto systémy vieme jednoducho a prehľadne modelovať v nadstavbe Simulinku, ktorá sa nazýva Stateflow. V tomto blogu si ukážeme, ako v Stateflowe namodelujeme jednoduchý udalostný systém a nástroje na jeho analýzu.

Modelovanie udalostného systému

Modelovanie v prostredí Stateflow si ukážeme na jednoduchom semafore. Semafor bude mať dva stavy – vypnutý a zapnutý. Vo vypnutom stave, ktorý bude aktívny ako prvý, bude blikať oranžové svetlo. Zapnutý stav bude reprezentovať typickú prevádzku semafora, kde sa prepíname medzi jednotlivými fázami – voľno, pozor, stoj, priprav sa. Logiku tohto systému, môžeme namodelovať v prostredí Stateflow pomocou stavov a prechodov.

Stav je základný stavebný prvok udalostného systému v prostredí Stateflow. Reprezentuje mód, v ktorom sa systém práve nachádza. Na obrázku môžete vidieť dva hlavné stavy Vypnuty a Zapnuty. Stavy môžu obsahovať ďalšie podstavy, ktoré detailnejšie popisujú správanie sa rodičovského stavu. Stav Vypnuty obsahuje dva podstavy Sviet a Zhasni. Medzi stavmi sa prepíname prechodmi, ktoré reprezentujú šípky v smere prechodu. Aby sme sa mohli prepnúť z jedného stavu do druhého musí nastať udalosť alebo byť splnená podmienka. Väčšina prechodov v stave Vypnuty nastane za základe časovej udalosti – uplynutia jednej sekundy. Prechod zo stavu Vypnuty do stavu Zapnuty nastane na základe podmienky – hodnoty premennej ZAP. Premenné definované v paneli symbolov (Symbols Pane) si vymieňajú hodnoty s prostredím Simulink. Pokiaľ by vás zaujímal celý podrobný postup modelovania tohto systému, môžete si stiahnuť nasledujúci .zip súbor, ktorý obsahuje kompletný návod a schémy.

Veľkou výhodou modelovania udalostného systému v simulačnom prostredí a využitia prístupu Model-Based Design je možnosť testovania správania sa systému v rôznych konfiguráciách. Túto možnosť na prototypoch zariadení väčšinou nemáme, alebo by bola veľmi drahá. Stateflow ma niekoľko nástrojov, ako náš model analyzovať. Prvým je zobrazenie prechodov počas simulácie zvýraznením aktívnych stavov. Po spustení simulácie v prostredí Stateflow uvidíte ako rozhodovacia logika pracuje. Aktívne stavy majú zvýraznené modré okraje. Takýmto spôsobom viete vizuálne skontrolovať, či vaša logika pracuje správne. Môžete napríklad otestovať, či ste neuviazli v stave, z ktorého sa už neviete dostať. Nasledujúci obrázok zobrazuje krok simulácie, kde sme v stave Zapnuty a podstave Volno.

Sequence Viewer

Druhým nástrojom analýzu rozhodovacej logiky je Sequence Viewer. Sequence Viewer nám ukáže na časovej osi, ako sa stavy prepínali počas simulácie. V prostredí Stateflow v záložke Simulation najskôr musíme zapnúť Log Events v časti Prepare a po skončení simulácie v časti Review Results môžeme výsledok zobraziť pomocou spomínaného Sequence Viewera. Pre lepšiu prehľadnosť si stavy môžete rozbaliť hierarchicky.

Activity Profiler

Tretím nástrojom analýzy je od verzie R2020b Activity Profiler. Pomocou tohto nástroja vieme pozorovať ako často boli zapnuté stavy, prípadne do ktorých stavov sme sa nedostali. Activity Profiler sa nachádza v záložke Debug. Signál ZAP nastavíme ako konštantu 1 a po odsimulovaní modelu sa objaví okno, v ktorom sa dá nastaviť, čo chceme v Stateflow zvýrazňovať a typ farebnej škály. Z obrázka vidíme, že semafor bol počas našej simulácie viac zapnutý ako vypnutý.

Záver

Na jednoduchšom príklade semafora sme si ukázali modelovanie udalostného systému v prostredí Stateflow a možnosti jeho analýz. Pokiaľ vás Stateflow zaujal môžete si toto prostredie vyskúšať pomocou bezplatnej TRIAL licencie na 30 dní. Pokiaľ by ste sa chceli o modelovaní udalostných systémov dozvedieť viac môžete si urobiť bezplatný online kurz zameraný na Stateflow, prípadne Simulink alebo MATLAB na MATLAB Academy:

https://matlabacademy.mathworks.com/

Michal Blaho (HUMUSOFT), 14.10.2020