Zkušenost programování master-slave s využitím RS-485

Tak nějakou práci zveřenit nemohu. To by mě zaměstnavatel hnal svinským krokem, ale nějaké zkušenosti prozradit mohu.
Komunikace master-slave tedy česky mluvčí-posluchač je takovým nejjednodušším učebnicovým příkladem komunikace např. na linkách RS485. Master se ptá, slave mu odpovídá. Je v podstatě jedno, jaký formát datového rámce zvolíš, protože tento způsob komunikace má řadu nevýhod, jako je malá propustnost dat. Mezi hlavní nevýhodu patří to, že slave nemůže samovolně vysílat data, musí čekat, až se ho master zeptá a master musí pokorně čekat na odpověď slave. I přesto se hojně požívá.

Velmi důležité je, aby zařízení na sběrnici správně identifikovaly datové pakety. K tomu slouží např. 9. bit, jež je nahozen pouze u 1. byte, kterým je zpravidla adresa. Tím je také označen jeho začátek. Lze též použít nějaký znak, který ovšem nesmí být použit nikde uvnitř paketu. Pokud je potřeba přenést hodnotu shodnou s tímto znakem, nahrazuje se sekvení dvou jiných znaků. Též lze použít časové prodlevy mezi znaky. Paket je rozpoznán, když před ním je X ms trvající mezera.
Před tímto způsobem varuji, neboť může vést ke komplikacím zvlášte u implementací na PC. PC není schopno dodržovat stanovené mezery a protokol je pak nestabilní. Pakety se modou rozpadnou na více částí z nichž některé ke smůle mohou dávat smysl pro naslouchající zařízení.

Druhou neméně důležitou věcí je test integrity přijatého paketu. Může být na trase porušen a je třeba to nějak zjistit. Proto se používá v nejjednoduším případě kontrolní součet. Pro velké pakety a časté rušení je bezzubý. Nutno přidávat pak rámcový paritní bit, nebo CRC. Tyto metody však odhalí pouze chybu, maximálně ji lokalizují, ale nedokážo ji opravit a musí se paket opakovat. V případech velkého rušení nebo při velkých rychlostech by se pakety časo opakovaly a proto je výhodnější použít např. Hammingovy samoopravné kódy, které dokáží nejen identifikovat chybu, ale taky ji opravit. Čím větší je zabezpečení dat, tím více se musí přenést redundantních byteů takže je něco za něco.

Vlastní stavba paketu už může být jakkoli rozmanitá, ale nevhodný formát povede ke komplikaci při zpracování. Např. není-li v hlavičce paketu udaná délka na začátku, naslouchající zařízení jej nemůže odmítnou, má-li malý nebo zaplněný buffer. Dobré je, když hlavička obsahuje adresáta i odesilatele. Je to výhodné pro diagnostiku. Z odposlechnutých paketů lze snadno odvodit kdo s kým komunikuje. Také je dobré, když je v paketu rozlišeno, zda jde o povel mastera nebo odpověď slave. Pozor, nelze se spokojit pouze s rozlišením dle adresy, porotože naslouchající slave nemusí znát adresu mastera ani odpovídajícího slave a tak by paradoxně mohlo dojík k tomu, že na odpověď slave bude reagovat jiný slave, který ji bude interpretovat jako povel.

A jěště něco k hardware RS485. Probíral jsem se mnoha datasheety od předních výrobů jako je Texas Instruments, Maxim , Analog Devices a nejvíce informací jsem našel v aplikačních poznámkach 1. jmenovaného. Nicméně jde o jakési vodítko, nikoliv konečné zaručené řešení. Používání transilů (TVS) sice chrání odbvody, ale také limitují přenost dat při rozdílném potenciálu a dokáží ho i znemožnit. Někde použivájí unipolární transily, které bohužel limitůjí záporná napětí ačkoli je obvod schopen je zpracovávat do -7V.