V čom sa programujú real-time aplikácie?

Palo

V čom sa programujú real-time aplikácie?
« kdy: 05. 08. 2012, 20:49:22 »
Dobrý deň

V čom a na čom sa programujú v praxy RT aplikácie? Pre letectvo, medicínu alebo priemisel všeobecne.
Viem že existuje QNX, VxWorks a jazyk Ada. Na Wikipédii sa uvádzajú aj ďalšie systémy a jazyky. Napr. tento pán spomína QNX a C http://forum.root.cz/index.php?topic=4670.msg39959#msg39959
Teda ak by som sa chcel poriadne vrhnúť na túto oblasť, čo by ste poradili? V čom sa píše kritický sw? Predpokladám, že treba kombináciu dobrého jazyka a os.

Napr. týto páni
http://www.linkedin.com/in/therealtonycoco
http://www.linkedin.com/in/djheideman - tento uvádza, okrem iného, aviatiku a vojenský priemysel, tak predpokladám, že tento je bližšie k odpovedi na moju otázku.

Inak, pár článkov o Ade tu, na Roote a inak na celom cs-sk nete nič.

Ďakujem za odpovede.
« Poslední změna: 06. 08. 2012, 09:32:43 od Petr Krčmář »


Josef

Re:V čom sa programujú real-time aplikácie? Ada?
« Odpověď #1 kdy: 05. 08. 2012, 21:42:55 »
Java

Ropi

Re:V čom sa programujú real-time aplikácie? Ada?
« Odpověď #2 kdy: 05. 08. 2012, 21:53:53 »
Řekl bych, že hodně záleží na tom, jak rychlé potřebujete základní časování programu, jaký máte HW a jak moc "bezpečný" kód potřebujete (programátorovo-blbu-vzdorný). Pro průmyslovou aplikaci (zabezpečovací zařízení) s prováděcím cyklem 200ms používáme IntervalZero ETS a C/C++. Ale nejsou problém ani Windows Embedded, IntervalZero RTX či Linux. U OS záleží na HW, u jazyka spíš na míře problémů, na které si můžete zadělat jeho volností.

Re:V čom sa programujú real-time aplikácie? Ada?
« Odpověď #3 kdy: 05. 08. 2012, 22:13:07 »
Asi jenom tak na okraj:

"Kritický" ještě nemusí být real-time a už vůbec ne hard real-time.  Pokud ti jde víc o důraz na to kritický, než na real-time, tak bych doporučil aspoň pro zajímavost se mrknout na Erlang - je to imho jazyk docela "průmyslový", ale zároveň to není žádná nepraktická úchylárna - dá se v tom psát cokoliv a (imho) hodně pohodlně, když tomu člověk trochu přijde na kobilku.

Google pro "Erlang real-time" dává hodně odkazů, ale v tomhle poradit nemůžu, já ho používám z jiných důvodů, takže buď někdo bude umět říct víc, nebo to je na samostudium :)

abc

Re:V čom sa programujú real-time aplikácie? Ada?
« Odpověď #4 kdy: 05. 08. 2012, 22:36:11 »
Zadny konkretni jazyk ani OS vyzadovan/doporucovan neni. Dulezite je, aby byl vysledny objektovy kod certifikovany.
Z jazyku se pouziva napriklad assembler, ada, C, C++ a jine. OS musi byt taky certifikovany.

Civilni aerospace vyzaduje certifikaci napriklad od FAA. FAA akceptuje SW certifikovany dle DO-178B http://en.wikipedia.org/wiki/DO-178B, pro HW je DO-254 http://en.wikipedia.org/wiki/DO-254.

Hledej produkty ktere maji certikaci na DO-178B Level A. Napriklad http://www.ghs.com/AerospaceDefense.html a jine...



Rax

Re:V čom sa programujú real-time aplikácie?
« Odpověď #6 kdy: 06. 08. 2012, 13:05:05 »
V čom a na čom sa programujú v praxy RT aplikácie? Pre letectvo, medicínu alebo priemisel všeobecne.

Drtivá většina C/C++ a části v ASM, ale se značně upraveným jádrem OS a z toho pak aplikace vychází. Právě to upravené jádro OS je základ RT.

Java

Java je antonymum k významu slova real-time. Sice se objevují jisté pokusy, ale jsou srandovní.

DK

Re:V čom sa programujú real-time aplikácie?
« Odpověď #7 kdy: 06. 08. 2012, 14:01:53 »
Rax: vlastni zkusenost, nebo pouze stylem "jedna baba povidala"? Predpokladam, ze to druhe (nicmene tohle neplati o lidech, kteri tvrdi, ze umi v jave programovat, kdyz znaji pouze syntaxi)

Palo

Re:V čom sa programujú real-time aplikácie?
« Odpověď #8 kdy: 06. 08. 2012, 14:19:07 »
Tušil som, že interpretovaný jazyk nebude to pravé orechové. Myslím si to aj kvôli množstvu medzivrstiev. 

Ale stále mi tam nesedí to C/C++... keď som si pozeral knihu z prehistórie (rozumej 88 rok, preklad vydaný za socíku) tak tam bol uvedený príklad porovnávajúci Adu a (asi) Pascal. Išlo o kontrolu podmienok, kde ju pascal musel vykonávať v každom kroku a Ada to vyriešila inak (ale už neviem ako, kniha je doma).

      Ale ako napísal Ropi: zaleží "u jazyka spíš na míře problémů, na které si můžete zadělat jeho volností."

Môj taký malý plán je v horizonte dvoch rokov start-up, v ktorom by sa využilo RT programovanie pri ovládaní stroja. Napadlo mi použiť RTLinux, keďže je bez zadara :-)

Sten

Re:V čom sa programujú real-time aplikácie? Ada?
« Odpověď #9 kdy: 06. 08. 2012, 14:20:57 »
Java

Ach ano, vezmeme vysokoúrovňový jazyk se spoustou knihoven, vyhodíme vysokoúrovňovou abstrakci, kterou nejde použít v real-time aplikaci (haldu, garbage collection), spolu s tím naprostou většinu knihoven, které tu abstrakci vyžadují, a máme opravdu perfektní jazyk. Je až s podivem, že se to fakt používá :-)

Re:V čom sa programujú real-time aplikácie?
« Odpověď #10 kdy: 06. 08. 2012, 14:33:04 »
Vlastní zkušenost nemám, ale vloni se jeden belgický vývojář zmínil, že dělá programy pro systémy kontroly letového provozu a ještě nějaké podobné věci. Tvrdil, že kvůli oddolnosti odchytává vyjímky v úplně každé metodě (try-except-finally) a že na to používá jazyky jako je Pascal nebo Ada mimojiné kvůli způsobu odchytávání vyjímek (že mu vyjímka nezpomaluje běh systému).

pet

Re:V čom sa programujú real-time aplikácie?
« Odpověď #11 kdy: 07. 08. 2012, 09:17:18 »
Ono zalezi na potrebne urovni real-time. Pro rizeni letoveho provozu jsme drive pouzivali LynxOS a C, dnes uz GNU/Linux a C, C++, Python, pretlak vykonu to pro nase potreby dostatecne resi.

podlesh

Re:V čom sa programujú real-time aplikácie? Ada?
« Odpověď #12 kdy: 07. 08. 2012, 10:15:59 »
Java

Ach ano, vezmeme vysokoúrovňový jazyk
Java není vysokoúrovňový jazyk (VM není součást jazyka).

vyhodíme vysokoúrovňovou abstrakci, kterou nejde použít v real-time aplikaci (haldu, garbage collection), spolu s tím naprostou většinu knihoven, které tu abstrakci vyžadují
Nakonec odolám a zareaguji věcně: toto není pravdivé tvrzení.

Je až s podivem, že se to fakt používá :-)
Nevím, kromě propagace od Sunu/Oracle jsem neslyšel že by se to nějak opravdu používalo.

Karel

Re:V čom sa programujú real-time aplikácie?
« Odpověď #13 kdy: 07. 08. 2012, 11:41:40 »
Pojem "real time" je příliš široký. Na jedné straně jsou to věci, kde je potřeba rozumná odezva k tomu, aby to fungovalo. Pokud odezva nebude dobrá, ztratí se spojení apod. Na opačné straně jsou věci, kde je nezbytně nutné aby došlo ke zpracování události v definovaném časovém limitu. Pokud se to nestihne, tak někdo umře nebo dojde ke škodě na majetku.

Příkladem toho prvního jsou routery, mobily, zabezpečovací technika apod. Je to "taky realtime", ale nejde o život. Tam se klidně použije i JVM. A běžně se i používá.

Příkladem toho druhého je autopilot, senzory v letadle, řídící jednotka CNC stroje. To je "opravdový realtime", tam jde o život - autopilot nedokáže reagovat včas a místo stabilizace letadla ho rozhoupe; zpoždění mezi jednotlivými senzory může dát chybný údaj o stavu letadla; pokud řídící jednotka CNC stroje nedokáže včas poslat příkaz krokovému motoru, pak setrvačnost může motor "protočit" a třebas posunout nástroj "do materiálu", což takovou frézu poměrně často urazí a ta se proletí vzduchem. V případě strojů se servem je to ještě větší legrace, tam to umí švihnout portálem tak, že je stroj na odpis. Sem se hodí spíše C nebo assembler. Viděl jsem i interpretované jazyky, ale vždy to bylo imperativní. U těhle systémů je jedním ze stěžejních prvků "accountability". Dokážete zjistit, kolik času zabere provedení každé z operací. Interpretery v tomhle nekladou žádné překážky (pokud samotný interpreter je "accountable", pak ani jím interpretovaný program nemusí mít problém), ale kupříkladu použití OOP už problém byl. Ono některé vlastnosti OOP jdou přímo proti "accountability" (polymorfismus je prostě konečná). Když nedokážete říci, kolik maximálně času, bez ohledu na situaci, uplyne od přijetí signálu A do reakce B, tak vás s tím do letadla nepustí.

Ve chvíli, kdy víte, jestli chcete dělat "taky real time" nebo "opravdový real time", si musíte položit další otázku - jak to má být rychlé? Většina real time systémů kupodivu nevyžaduje nijak zvlášť rychlou reakci (nezaměňovat rychle a včas) nebo náročný výpočet. Tady více než kde jinde platí KISS. Proto se běžně využívají vyšší programovací jazyky. Pro RT úlohy zde jsou speciálně překladače (nebo přepínače v překladačích), které nejen že generují "RT friendly" kód, ale i umí spočítat výslednou reakční dobu. Jen za tím "vyšší programovací jazyky" nehledejte OOP nebo komplikované funkcionální programy plné closures. U "taky real time" se dnes často hraje na "když to dělám obvykle hodně rychle, tak to obvykle taky dělám včas", takže tam se používá vše co znáte a jen se nějak ošetří "chronicky známé neznámé" typu garbage collector. Pak se to jen spustí s profilerem a pro iterace, kdy "to nestihl" se hledá příčina a ta se řeší. Jakmile spadne procento iterací, kdy "to nestihl" pod nějakou mez, tak se to prohlásí za hotové.

Sten

Re:V čom sa programujú real-time aplikácie? Ada?
« Odpověď #14 kdy: 07. 08. 2012, 12:04:09 »
Java není vysokoúrovňový jazyk (VM není součást jazyka).
VM rozhodně není podmínka pro to, aby byl jazyk vysokoúrovňový. Java je vysokoúrovňový jazyk, protože například ani primitivní typy nejsou závislé na architektuře, na které program běží.

Nakonec odolám a zareaguji věcně: toto není pravdivé tvrzení.
Co na tom není pravdivého? Že používání haldy ani garbage collection nemá deterministickou dobu běhu a tudíž není real time? Proč se tedy v Real time Javě místo obojího používá region-based memory management?

Nevím, kromě propagace od Sunu/Oracle jsem neslyšel že by se to nějak opravdu používalo.

Znám několik bank, které to používají, ale máte pravdu, že moc rozšířené to není