Skip to content

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ICP Projekt - Simulátor Petriho sítí

Toto je program na grafické vytváření a úpravu rozšířených Petriho sítí a jejich interpretace.

Zadání projektu · Diagram tříd (UML)

Demo — příklad TOF_PN_5s.json (timer to off, 5s)

Implementovaná funkčnost

Program je schopen:

  • V uživatelském rozhraní upravovat všechny prvky sítě (není potřeba ručně upravovat soubor)
  • Pohodlně aktualizovat vstupy programu za běhu.
  • Upravované sítě načítat z a ukládat do lidsky čitelného JSON souboru.
  • Ověřovat správnost sítí a správně informovat uživatele o jejich případných nedostatcích.
  • Zpracovávat inskripční kód používající všechny funkce kromě elapsed.
  • Graficky zobrazovat změny tokenů a odpálení přechodů.

Neimplementovaná funkčnost:

  • Program nezaznamenává změny tokenů a odpálení přechodů, ale zobrazuje tyto změny graficky.
  • Program nezaznamenává změny proměnných a nezobrazuje poslední známé hodnoty všech vstupů, výstupů a interních proměnných.
  • Program nezobrazuje povolené přechody a naplánované timeouty, ale loguje případné vynechání přechodu s timeoutem.
  • Program nezabraňuje nezřízenému vykonávání Petriho sítí v případě, že obsahují nekonečnou smyčku bez čekání. Program se může dostat do neovladatelného stavu.

Kompilace a spuštění

Program je testován pro kompilaci a spuštění na Arch Linuxu a MacOSu, ale měl by se spustit na jakémkoli systému s verzí Qt alespoň 6.10. Program nevyužívá žádné funkce specifické pro POSIX.

Windows: Funkčnost by měla být možná (Qt6 a CMake jsou na Windows dostupné), ale program nebyl na Windows testován a není oficiálně podporován. Instrukce pro Windows nejsou součástí tohoto projektu.

Instrukce pro Arch Linux a MacOS

  1. Nainstalujte závislosti:
  • Arch Linux:

    sudo pacman -S --needed base-devel cmake qt6-base qt6-declarative qt6-svg
  • MacOS:

    brew install cmake qt6
  • Debian distribuce (pro Fedoru/RHEL nahraďte apt za dnf):

    sudo apt install build-essential cmake libglx-dev libopengl-dev libgl1-mesa-dev libxcb-cursor0 libxkbcommon-x11-0
    pip3 install aqtinstall
    aqt install-qt linux desktop "6" -O ~/Qt
    export Qt6_DIR="$HOME/Qt/6.x.y/gcc_64" # nahraďte "6.x.y" skutečnou verzí Qt, která se nainstalovala
    export CMAKE_PREFIX_PATH="${Qt6_DIR}:${CMAKE_PREFIX_PATH}"
    export PATH="${Qt6_DIR}/bin:${PATH}"
    export LD_LIBRARY_PATH="${Qt6_DIR}/lib:${LD_LIBRARY_PATH}"
  • Merlin - školní Devuan server:

    # Požadovaná verze Qt není v repozitářích, ale nainstalovali sme ji do veřejné složky:
    export Qt6_DIR="/homes/eva/xp/xpacajl00/Qt/6.10.3/gcc_64/"
    export CMAKE_PREFIX_PATH="${Qt6_DIR}:${CMAKE_PREFIX_PATH}"
    export PATH="${Qt6_DIR}/bin:${PATH}"
    export LD_LIBRARY_PATH="${Qt6_DIR}/lib:${LD_LIBRARY_PATH}"
    export QT_QUICK_BACKEND=software # pri použití SSH X-forwardingu (-X)
  1. Připravte si složku pro kompilaci:

    mkdir build
  2. Sestavte projekt (spouští se CMake na pozadí):

    make build
  3. Spuštění programu:

    make run
  • alternativne přímo z build zložky (umístnení a přípona se môže lišiť v závislosti na operačnom systéme)

Program potom bude vytvořen v této složke pod jménem appICPprojekt.

Změny po hlavním odevzdání

Tato verze obsahuje opravy a vylepšení provedená po termínu hlavního odevzdání. Mimo jiné bylo upraveno a výrazne rozšířeno i samotné README.

Opravy simulátoru

  • Oprava přechodů s delay_ms = 0 — přechody s nulovou hodnotou zpoždění a bez event_name se nyní správně chovají jako okamžité (bez časovače).
  • Oprava zpracování událostí u zpožděných přechodů — zpožděný přechod s definovanou event_name nyní správně vyžaduje odpovídající událost; bez event_name událost ignoruje.

Opravy GUI

  • Reset tokenů po zastavení simulace — tlačítko Stop nyní po zastavení simulace automaticky obnoví tokeny do počátečního stavu.
  • Krok nastavení zpoždění snížen — krok při nastavování hodnoty zpoždění přechodu změněn z 1000 ms na 100 ms.

Nové příklady

Přidány nové ukázkové sítě do složky examples/:

  • vlak.json — simulace výpravčího vlakového uzlu Brno - Košice
  • circle_with_trash.json — kruhová síť se slepou větvou
  • conflict_determinism.json — demonstrace deterministického řešení konfliktu
  • timeout_cancel.json — ukázka zrušení timeoutu
  • defined_variable.json — přejmenovaný příklad s definovanou proměnnou

Sestavení a konfigurace

  • Paralelní kompilacemake build nyní automaticky detekuje počet procesorů/thredů a kompiluje paralelně.
  • Podpora Merlin — přidány instrukce pro školní Devuan server Merlin do README.
  • Skrášlení CMakeLists.txt — upráven formát deklarací QML souborů; testovací targety odebrány ze sestavení (testy nejsou součástí odevzdání).

Dokumentace

Projekt využívá Doxygen pro generování API dokumentace ze zdrojového kódu.

Generování dokumentace

make doxygen

nebo ekvivalentně:

make doc

Dokumentace se vygeneruje do složky docs/. Hlavní stránka se nachází v docs/html/index.html.

Odstranění buildu a dokumentace

make clean

Autoři

  • Ľubor Pačaj (xpacajl00)
  • Ján Habánik (xhabanj00)
  • Tadeáš Erban (xerbant00)

About

Projekt na predmet ICP - Seminár jazyka C++

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages