Watchdog: dvě čísla a obě jsou špatně
Bezdrátová smyčka potřebuje pravidlo pro ticho. To pravidlo má jen dvě čísla — kolik zmeškaných period se ještě toleruje a co se pak stane — a obě strany té volby jsou špatné.
Krátký limit
Stroj se zastaví, kdykoli rádio kýchne. Při pěti procentech ztrátovosti a limitu na jeden výpadek se to stane každou dvacátou periodu — u smyčky na 100 Hz pětkrát za sekundu. Provoz s takovým nastavením nevydrží ani hodinu a první, co obsluha udělá, je že watchdog vypne. To je nejhorší možný výsledek celé té úvahy.
Dlouhý limit
Stroj jede dál, i když už dávno nikdo neřídí. Půl sekundy při jednom a půl metru za sekundu je pětasedmdesát centimetrů nevšimnutí si — a teprve pak začne brzdit.
Jak se ta dvě čísla volí
Šance na k výpadků za sebou je p^k, takže každý povolený výpadek navíc zředí planá zastavení faktorem 1/p a přidá jednu periodu slepoty. Při pěti procentech to je dvacetinásobek méně planých zastavení za jednu periodu — a to je mimořádně výhodný obchod, který se dá udělat jen několikrát.
| povolených výpadků | P(planě) při p = 5 % | na 100 Hz jednou za | slepá dráha při 1,5 m/s |
|---|---|---|---|
| 1 | 5 % | 0,2 s | 1,5 cm |
| 2 | 0,25 % | 4 s | 3 cm |
| 3 | 0,0125 % | 80 s | 4,5 cm |
| 4 | 6 ppm | 27 min | 6 cm |
| 5 | 0,3 ppm | 9 hodin | 7,5 cm |
Ta tabulka je celý návrh watchdogu. Čtyři až pět povolených výpadků obvykle sedne: planá zastavení jsou vzácná a slepá dráha je pár centimetrů. Vždycky se ale musí ověřit na skutečném rozdělení ztrát, ne na tomhle nezávislém modelu — o tom byla minulá kapitola, a se shluky vyjdou čísla v prvním sloupci o dva řády jinak.
A co se stane potom
„Zastavit“ není jedna věc. Zastavení kategorie 1 podle IEC 60204-1 znamená řízené zabrzdění s odpojením až po zastavení; kategorie 0 znamená okamžité odpojení energie a dojezd setrvačností. Pro výpadek spoje je správně kategorie 1 — brzdit se dá, protože pohon je pořád napájený a jen nedostává povely.
Chyba, která se dělá pravidelně: watchdog se nastaví na komunikačním stacku, ne v aplikaci. Stack pak hlásí spojení jako živé, protože se udržuje vlastními keep-alive rámci, zatímco aplikace nedostala čerstvá data už tři sekundy. Watchdog musí hlídat data, ne spojení.