( locsemege | 2014. 08. 30., szo – 12:06 )

Egy ilyen vezérlést, szabályozást szerintem több egymással kommunikáló alrendszerrel volna jó megcsinálni, így sza2king fórumtárssal értek egyet. Egy olyan bonyolultságú rendszer, mint az RPi, és a rajta futó oprendszer, nem igazán alkalmas valós idejű problémák biztonságos kezelésére. Mi van akkor, ha egy bug miatt elhasal az alkalmazás, netán az egész oprendszer? Mi a helyzet a valóban realtime problémákkal?

A gyors beavatkozást igénylő szabályozásokat, teszem azt, PID-szabályozókat, PWM-eket mindenképpen mikrokontrollerekkel oldanám meg. Ezek programját C-ben vagy assembly-ben volna jó megírni. Ezek valóban csak a feladatot valósítanák meg mindenféle sallang nélkül. Itt nincs kernel, nincs memória management, nincs védett mód, csak a hardware és az azt vezérlő kód. A szabályozó paraméterek és alapjelek persze jöhetnek már a mikrokontrollerrel kommunikáló felsőbb szintű vezérlés felől, azaz egy böszme nagy oprendszerrel ellátott RPi felől, s a mérési eredményeket is ebbe az irányba kommunikálnák a mikrokontrollerek.

Ha döglés van, watchdog újra boot-olja az oprendszert, a mikrokontrollerek az utolsó alapjel és szabályozási paraméterek alapján viszik tovább a gépet. Ráadásul szabályozva, hiszen a szabályozó hurkot értelemszerűen a mikrokontrollereknek kellene megvalósítani, a felsőbb szintű vezérlés csak a paramétereket és alapjelet szolgáltatja.

Ha a mikrokontroller döglik - ne tegye, de ha mégis -, a watchdog nagyon gyorsan feléleszti, itt az újraindulás lényegesen gyorsabb, mint az oprendszer esetén. Talán néhány ms. A kommunikáció olyan legyen, hogy bárhol félbehagyott kommunikáció esetén is legyen szinkron. Teszem azt, ilyen az i2c start feltétel, vagy valamilyen huzalozott VAGY kapcsolattal megvalósított dedikált vonal, amely jelzi, hogy kommunikáció eleje van. Lényeg az, hogy bárki, akár a mikrokontroller, akár az oprendszer bármikor éled fel, azonnal egymásra találjanak a kommunikációban, amely természetesen CRC-vel védett, címzett, keretezett csomagokban történik.

A mikrokontrollerek meg tudják különböztetni, hogy power on reset, brown out reset, vagy watchdog reset volt, így megoldható, hogy egyes változókat watchdog reset után nem inicializálunk, így watchdog után, de még kommunikáció előtt úgy szabályoz tovább, mint watchdog előtt.

Ezek mind olyan dolgok, amelyet egy oprendszerrel közvetlenül nem lehet.

Megjegyzés: erőműveket sem PC-vel vezérelnek, hanem duplikált mikrokontrolleres kártyákkal, de ezen kártyákkal PC-vel tartják a kapcsolatot. Ha megdöglik a PC, az erőmű jár tovább, legfeljebb nem lehet módosítani rövid ideig, hogy mondjuk a szinkrongenerátor gerjesztésének megváltoztatásával néhány MVAr-sal több meddőteljesítményt vállaljon magára a blokk. :)

Észrevétel a CRC-hez. 8 bites nem elegendő, hibás csomagnak 1/256-od valószínűséggel ugyanaz lesz a CRC-je, 0.39 % viszont túl nagy érték. Velem már fordult elő olyan, hogy elkerekedett szemmel néztem, hogyan jutott el hibás csomag egyik helyről a másikra, amikor azt ki kellett volna dobnia.

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE