Zadání finálové úlohy

Řídící jednotka výtahů

Soutěž dětí a mládeže v programování – finále 18. ročníku

25.–27. června 2004

Vaším úkolem je napsat program, který bude sloužit jako řídící jednotka výtahů. Program bude výtahy ovládat pomocí síťového protokolu, který je popsaný v samostatném manuálu. Správa KRNAPu nám neumožnila pro každého z vás zřídit zde na Duncanu několik výtahových šachet pro testování vaší řídící jednotky. Místo toho váš program bude ovládat jen simulátor reálného výtahu. Simulátor má podobu serveru, který umožňuje sledovat a ovlivňovat chování výtahů a cestujících. Server máte k dispozici na vašem počítači jako program LiftServer.exe.

Váš program (řídící jednotka) od serveru dostává informace v podobě událostí. Události odpovídají reálným procesům, které se dějí ve výtahu. Například stisk tlačítka pro přivolání výtahu je klientovi poslán jako událost. Kompletní přehled událostí je popsán v manuálu v části Události (zprávy Server → Client). Váš program by měl tyto události vyhodnotit a na základě nich se snažit s jednotlivými kabinami výtahu jezdit tak, aby byla co nejmenší průměrná doba potřebná na přepravení jednoho pasažéra. Váš program může kabiny výtahů ovládat zasíláním příkazů popsaných v části Příkazy (zprávy Client → Server).

Spuštění ukázkového klienta

Pro rychlé pochopení toho, jak funguje simulační server a jak může spolupracovat s klientem (řídící jednotkou), jsme pro vás připravili velmi jednoduchého ukázkového klienta. Postup spuštění a využití je následující:

  1. Spusťte simulační server LiftServer.exe.

  2. Proveďte inicializaci serveru příkazem z menu SpecialInit (F4)

  3. Spusťte si ukázkového klienta LiftClient.exe.

  4. Připojte klienta k testovacímu serveru SpecialConnect (F3), Enter.

  5. Aktivujte řídící jednotku klienta příkazem SpecialEngine (F5).

  6. Aktivujte jádro serveru. Z menu vyberte příkaz ViewCommand Line (F2) a do příkazové řádky zadejte příkaz start odeslaný stiskem klávesy Enter.

  7. Nyní můžete v serveru opakovaně generovat příchody nových pasažérů příkazem SpecialRandom newpas (F5) a sledovat chování celého systému.

V případě potřeby můžete nové pasažéry přidávat ručně pomocí příkazu newpas.

Server umožňuje dávkové provedení příkazů uložených v souboru. Načtení a provedení příkazů ze souboru se provádí příkazem load. V adresáři se serverem a ukázkovým klientem naleznete několik ukázkových souborů s příkazy (skriptů s příponou lss).

Funkce programu

Postupně ve vašem programu naimplementujte následující funkce:

  1. Připojení k serveru běžícímu na uživatelem zvolené adrese a portu.

  2. Přijímání událostí od serveru a zasílání příkazů serveru.

  3. Správné reagování na události, např. rozvěcení indikátorů po stisku tlačítka pasažérem, nastavení textu na info panelech, atd.

  4. Primitivní ovládání výtahů, které k přesunu kabin používá příkaz floor. Pohyb výtahů optimalizujte tak, aby průměrná doba potřebná pro přepravení cestujícího byla co nejmenší.

  5. Pokročilé ovládání výtahů, které k přesunu kabin místo příkazu floor používá příkaz speed. Pohyb výtahů optimalizujte tak, aby průměrná doba potřebná pro přepravení cestujícího byla co nejmenší.

Pokyny a hodnocení

Na řešení úlohy máte 4 hodiny čistého času. Vaše řešení uložte do adresáře c:\XX, kde XX je vaše startovní číslo. Za úlohu můžete dostat maximálně 100 bodů, z nichž 60 bodů je vyhrazeno na ohodnocení funkčnosti programu a jeho shody se zadáním, 30 bodů na efektivitu a deset bodů na dokumentaci a přehlednost zdrojového kódu.