proJEcT 21 je projektem simulátoru letounu Mig-21 PFM.


Pro zobrazení přístrojů palubní desky je použitý monitor 27" s rozlišením 1920 x 1080 bodů.


Program proJEcT 21 má několik hlavních stránek. Poloha jednotlivých přístrojů se dá určit pomocí příslušných *.txt souborů. Mezi jednotlivými stránkami se přepíná kurzorovou klávesou nahoru a dolu.






Zakladní vlastnosti programu


Tento program je určen pro simulaci prostředí kokpitu letounu Mig-21PFM ve spolupráci s programem Microsoft Flight Simulator FS2004. Je napsán na základě NeHe OpenGL tutoriálu, konkrétně lekce 13. Jeho vývoj byl zahájen v červnu 2015 a v současné době jsou jeho hlavni vlastnosti pouze naznačeny a obsahuje mnoho základních nedostatků a chyb, které budou postupně v průběhu následjících roků odstraňovány.



V současné chvíli a ještě několik dalších let program obsahuje a bude obsahovat mimo jiné i hrubé nedostatky dokonce v interpretaci základních letových údajů. Je našímpříním vše postupně uvádět do souladu se stavem skutečného letounu bohužel především z časových důvodů tyto chyby budou odstraňovány jen velmi pozvolna :-(

Program můžete spustit dvěmi způsoby. První způsob je, že si stáhnete nejstarší balík Base.zip a z adresáře Debug spustíte program lesson13.exe. V tomto případě bude program načítat konfigurační soubory z tohoto adresáře.

Druhý způsob je, že si stáhnete jak původní balík Base.zip, tak i nejnovější soubor lesson13.cpp. Nejnovějším souborem přepíšete ten starý, otevřete si LESSON13.DSW a program nově zkompilujete. V tomto případě si bude program načítat data z adresáře 2015_Project_21.

Přesvědčte se, že v konfiguračním souboru project21.txt je nastaven parametr Arduino=0, program nepřipojuje desky Arduino. Dále si zde dopište rozlišení vašeho monitoru. Počítač na kterém program budete spouštět samozřejmě musí umět pracovat s OpenGL grafikou. Pokud počítač nebude podporovat nastavené rozlišení ze souboru project21.txt nabídne vám spuštění v náhradním grafickém režimu.

Není mi v současné době známo, zda program lesson13.exe půjde spustit na každém PC, nebo bude nutné distribuovat také některé soubory, knihovny apod. V každém případě po nainstalování Microsoft Visual C++ a nastavení parametru Arduino=0 by program měl jít spustit. Ovšem vzhledem k tomu, že v současné chvíli program používají dva uživatelé, můžeme do budoucna zjistit, že existují i další nutné podmínky pro spuštění programu.
Program je určený pro monitor 27" 1920x1080 bodů. Rozměry tohoto LCD se sice neshodují s rozměry palubní desky Mig-21 PFM a některé přístroje budou umístěné ne zcela přesně jako u originálu. Zato na tomto monitoru by se rozměr palubních přístrojů měl velmi přibližovat originálním rozměrům ze skutečného letounu. Program má tři režimy zobrazení. V prvním se počítá s maskou přes monitor a jsou zobrazeny jen samotné přístroje. V druhém je zobrazené i pozadí palubní desky a konečně ve třetím jsou zde zobrazeny i jednotlivé panely ovládané deskou Arduina.

Program lesson13.exe


Hlavní program pro proJEcT21 je napsaný v programu C++ a plně vychází z OpenGL tutoriálů NeHe konkrétně z lekce 13. Na tomto místě je nutné poznamenat, že nejsem programátor a celý program je napsaný metodou pokus - omyl. Čemuž odpovídá i naprosto diletanské použití jednotlivých příkazů včetně celé struktury programu. Každý opravdový a slušný programátor by nutně musel přijít za takovéto dílko do pekla. Proto přistupujte jak k samotnému programu, tak i k následujícímu popisu velmi obezřetně a počítejte s tím, že jsem se zde nevědomky či z lenosti dopustil mnoha přehmatů či nepřesností.


Dále je nutné uvést na tomto místě upozornění, že i když proJEcT21 označuji vznosným názvem simulátor, tak o ten se v žádném případě nejedná. Jedná se o zcela jednoduchou hračku kdy již při převodu základních letových údajů do C++ dochází k celá řadě nepřesností či hrubých zkreslení reality. Nemluvě o tom, že samotný program Microsoft Flight Simulator FS2004 je zcela jednoduchou hrou, která má k simulaci hodně daleko. Aby bylo jasno. Nejedná se o to, že použité technologie by skutečnou simulaci nezvládly. Jedná se o to, že tento celý program proJEcT21 nikdy k simulaci použit nebyl a nikdy v budoucnosti ani nebude. Problém není v tom, že by použité technologie skutečný letecký výcvik nezvládly. Jádro problému je v tom, že tomuto projektu naprosto chybí kontakt s leteckou realitou a ani nemá zpracovanou žádnou výcvikovou metodiku. Je to tedy pouze hračka a nikdy se ani ničím jiným nestane. Nejlepší představu o tom, jak vysoké nároky jsou kladené na skutečného stíhacího pilota a jeho znalosti vám dá přečtení českého manuálu používaného pro výcvik na Mig-21 UM, který najdete rovněž na těchto stránkách.


Pro vývoj programu používám tento program. Protože všechny programy pro letecké simulátory které jsem napsal vychází z OpenGL NeHe tutoriálů konkrétně z lekce 13 tak se všechny moje programy rovněž jmenují "Lesson13.cpp". Celý projekt je jak se moderně říká "open source", neboli pokud chcete tak jsou vám jeho zdrojáky plně k dispozici. Pokud budete chtít vyvíjet a kompilovat vlastní verze programu tak si stáhnětě základní balík programu ("BASE PACK"), kde najdete celé vývojové prostředí programu.


Na prohlížení, programování a kompilaci programu se pravděpodobně dá použít celá řada konkrétních céček, ale v tomto popisu zůstaneme u verze, kterou používám já. Otevřete si tedy "File => Open Workspace" a najdete si adresář, kde máte uložený program. V našem případě má jméno "LESSON13.DSW". Pokud se vše povede objeví se v hlavním okně programu zdrojový text.


Pokud někdy neuvidíte zdrojový text může se jednat o dva základní problémy. Buď jste na samotném konci souboru a musíte si najet nahoru, nebo v okně vlevo nahoře nemáte prostě zvoleno zobrazení zdrojového souboru "Lesson13.cpp". Takže si stačí na zdrojový soubor ťuknout a vše by se tím mělo vyřešit.


Pro samotné spuštění programu nyní stačí dát "Build => Execute lesson13.exe " a program se spustí.


V některých případech je nutné vše celé překompilovat, což učiníte v menu "Build => Rebuild All ". Může se jednat o přepsání zdrojového souboru jinou verzí, kdy vývojové prostředí patrně nemá informaci o změně zdrojáku. Nebo jinou vydařenou lotrovinu, kterou se vám podaří s Céčkem spáchat. Obecně zde platí zlaté pravidlo používané ostatně pro všechna PC. Chová-li se ta věc obzvláště podivně tak ji zkus zrestartovat, v našem případě celou překompilovat. . A pokud to nepomůže běž se podívat do zrcadla na hlavní zdroj hledaného problému. Je totiž neuvěřitelné jak občas chyba v programu se dá jen velmi obtížně najít. Někdy se stane že dokonce dlouhé desítky minut marně zíráte na jednu řádku zdrojáku a teprve druhý den vám dojde jak ta chyba je primitivní. Často je to to pouze o prvotním stavu mysli. V okamžiku kdy se domníváte že tu chybu spáchal program a nikoliv vy, tak ji opravdu nemáte šanci najít. Ke vší smůle ale jednou za uherský rok narazíte na chybu, kterou má opravdu na svědomí kompiler při interpretaci zdrojového textu. Pak je nejlepší metoda zkusit přepsat dotyčný problematický kus zdrojáku či jinak formulovat požadavek na to, co má dotyčný program vykonávat. Toto je ale opravdu velmi, ale VELMI vyjímečné :-)



Na toto místo znovu vložím upozornění, že nemám nejmenší kvalifikaci v oboru programátor. A vše co popisuji jsem pouze vypozoroval na základě empirického zkoumání metodou "šťouchni do toho, ono to nějak zakvičí, či se to bude jinak bránit". Používejte tedy především váš selský rozum a počítejte s tím, že vše může být a často bude zcela jinak, než to popisuji :-( Berte vše tedy s velkou rezervou !



Hned na začátku zdrojového textu se zastavíme u deklarace knihoven. Zde jsou uvedeny knihovny jejichž fukce budeme v našem programu nadále využívat. Všimneme si blíže pouze jedné knihovny (u těch zbylých mám ostatně pouze jen podle názvu matné tušení co by asi tak mohly obsahovat). A to knihovny "FSUIPC_User.h". To je to naprosto hlavní a zásadní kouzlo, které nám jazyk C++ (a ostatně i některé další) umožňuje použít spolu s programem Microsoft Flight Simulator. Pokud si ze stránky "http://schiratti.com/" stáhnete ze sekce Peter Dowson "FSUIPC SDK" a máte správně nainstalovaný modul FSUIPC ve vašem letovém simulátoru, můžete začít kouzlit. V SDK kitu totiž najdete knihovnu pomocí které ve vašem programovacím jazyku získáte přístup pro čtení a zápis dat do FSUIPC resp. do Microsoft Flight Simulatoru.


Ještě pro úplnost musíme zmínit tu skutečnost, že tato knihovna kromě deklarace na začátku zdrojového kódu musí být ještě zapsána v "Project => Settings "


A to konkrétně v záložce "Link" na konci řádku v položce Object/library modules. Nevím naprosto proč a nač to tady je. A to byl i patrně nejdelší zásek, který jsem absolvoval v programování leteckých simulátorů. Dnes si nevzpomenu konkrétně jestli se jednalo pouze o měsíce, či to bylo tehdy na několik roků. Od té doby co jsem to zde dopsal tak to funguje. A navíc ve zde staženém programu je registrace již provedena, tak se tímto nebudete muset zabývat. To jen tak pro úplnost. Programátory, kteří právě teď spadli pod stůl držíce se za hlavu či za břicho jen zdvořile upozorňuji, že při startu programování v C++ jen se znalostí několika povelů DOSového "TurboPackalu" se drobný zásek či omyl tu a tam očekávat dají :-)


Pokročíme nyní o kus dál. V průběhu roků se mi podařilo vytipovat kam lze dopisovat do původního NeHe tutoriálu části mého zdrojového kódu tak, aby to celé nejenom okamžitě nespadlo, ale dokonce plus mínus fungovalo podle mých požadavků. Takže aniž bych měl sebemnší tušení proč a jak většina původního zdrojáku funguje (vytvořit, registrovat, obsloužit okno v prostředí voken pro mě zůstává nadále čirou záhadou a magií zasvěcenou jen několika vyšší mocí obdařených šamanů). Takže jsme tímto dorazily k deklaraci proměnných. V horní části obrázku vidíme deklaraci klasických proměnných použitých pro samotný běh programu a v dolní jsou proměnné používané pro čtení a zápis proměnných přímo do FSUIPC. Jeden z PDF souborů, které získáte v SDK kitu pro FSUIPC popisuje adresaci právě těchto proměnných. Pokud si dané PDeFko proletíte, získáte rámcovou představu co vše lze s programem Microsoft Flight Simulator dělat.


Teď se dostaneme zase o kus dál. V samotném závěru zdrojáku najdeme to, co moje část programové nádivky dělá patrně hned po spuštění programu. Je-li tomu tak skutečně nevím, ale funguje to. Pro svoje mírné ospravedlnění teď dám jeden vtip : "Malý chlapeček se zeptá tatínka programátora - Tati a sluníčko ráno vychází na východě a večer zapadá na západě ? Tatínek jen zvedne oči od počítače a praví - Funguje to ? Tak to nech být !" Tedy na tomto místě je povel, který patrně otevírá a umožňuje následné použití pevelů u knihovny FSUIPC. Ti bystřejší a znalejší z vás se asi opět válejí pod stolem pokud si povšimli pomatené a vícenásobné deklarace dwResult v různých částech programu. Mám sice matné tušení o tom, že proměnnou podle místa deklarace mohu používat v různých částech programu. Ale to je asi tak všechno. Takže co s tím asi naděláme. Funguje to ? Tak to nech být !


Dále následuje tam kde je to nutné přiřazení správných hodnot do již deklarovaných proměnných.


Typická ukázka jak lze programovat špatně je zde. Přiřazení souboru ke konkrétnímu COM portu Arduina. Já vím že to takto rozhodně vypadat nemá. Jednou až bude čas až, to všechno musím opravit ;-)


Skočíme na jiné místo programu resp. se vrátíme ve zdrojáku skoro na samý začátek. Tady jsem někde vyhrabal v cizích zdrojácích definici zobrazení OpenGL. S tímto nastavením to kreslí daleko hezčí grafiku. Zda je to to nejlepší či ideální nemám opět tušení. Až bude čas jednou čas, budu zase studovat. Možná :-(


Nyní to začíná být konečně zajímavé, pomalu končíme s přípravou a bude se něco dít. Zde se načítá z FSUIPC hodnota konkrétních parametrů z FS2004.


Tady se dopočítává ta správná hodnota resp. formát a přiřazuje konkrétní proměnné. Mám matné tušení že to lze dělat daleko elegantněji a jednodušeji. Ale vážně nevím jak. Jedna z částí programu, které mě svojí formou už roky hodně iritují. No ale hlavně že to plus mínus funguje. Pro účely hry to vyhovuje, pro účely jakkékoliv simulace by to ale bylo neskousnutelné protože řada hodnot je mám takové tušení hóódně zkreslená.


Nakreslíme zelené pozadí palubní desky a bílou čáru přes její střed. Barvy jsou definovány klasicky jako RGB a střed souřadnic je bůhví proč u OpenGL ve středu obrazovky.


A konečně začneme kreslit samotné přístroje. Mám pocit že OpenGL nemá povely pro kreslení kruhu. Nebo jsem je nenašel. Ať tedy žije sinus a cosinus. Typická ukázka metody pokus a omyl. Tak dlouho jsem cosi zkoušel až to začalo fungovat. Patří to mezi ty části kódu které opravdu nevím proč fungují a metodou copy & paste opisuji od sebe samého a tvořím další a další úseky zdrojového kódu.


Tato část kódu posílá hodnoty pro výstup na Arduino.


A zde načítáme z Arduina stav tlačítek a přepínačů.


No a to je v podstatě velmi zhruba celé. Říká se, že je slušnost uzavírat soubory. Takže doufám že po vepsání do tohoto místa zdrojáku to taky tak dělám.


Zbývá program pro Arduino. Tohle vyhodnocení stavu tlačítek a přepínače pro podvozek a klapky a zaslání do PC.


A v druhé desce je prográmek, který zase čte hodnoty nastavení LEDek a dělá svítí - nesvítí.


Palivový systém

- z nádrže č. 1 stéká palivo samospádem do nádrže č. 2

- z křídelních nádrží je palivo vytlačováno tlakem vzduchu odebíraného od motoru do nádrže č. 2

- nádrže č. 2 a č. 3 jsou propojené nádoby

- v nádrži č. 2 je umístěno hlavní dodávací čerpadlo označené jako "Razchodnyj nasos"

- nádrže č. 4, č. 5 a č. 6 jsou propojení nádoby

- schéma nádrží je převzato z verze U, příručka pro MF zmiňuje nádrž č. 7 o kapacitě 340 l, znamená to že MF nese o nádrž více než U ? Kde byla umístěná a kam byla zapojená ?

- čerpadlo z nádrže č. 4 495B přečerpává palivo do nádrže č. 2 a je označené jako "Nasos 3. gr. bakov ?

- k čemu je proboha dobré čerpadlo umístěné v nádrži č. 2 a kam čerpá palivo a je označené jako "Nasos 1. gr. bakov ?