Elkészült a Modbus hálózat első eszköze. Ezen keresztül tud kommunikálni majd a Master eszköz az összes perifériával, Slave-vel.
A kapcsolás a PC-ből érkező soros portot, ami RS232 által előírt jelszinteket követi, illeszti a Modbus által használt RS485 vonalra.
Az RS232 egy UART. A magas jelszint -3-tól -15V-ig terjed. Az alacsony jelszint pedig 3-tól 15V-ig terjed. Ezeket a szinteket a GND vezetékhez képest kell érteni. A szabvány előír emellett ún. handshake jeleket. Ezekkel jelzi a PC (a szabványban DTE-vel jelölik), hogy adatot akar küldeni, illetve a periféria (legtöbbször modem volt, a szabványban DCE-vel jelölik) is tud jelezni bizonyos eseményeket. A handshake jelekről részletesebben itt.
Első lépésben átalakítjuk az RS232 által használt jelszinteket TTL jelszintre. Ez azt jelenti, hogy az 1-es szint 5V körül helyezkedik el, a 0V-os szint 0V körül a GND vezetékhez viszonyítva. A PC felől érkező RTS (ReadyToSend) jelet visszaküldi a CTS (ClearToSend) vonalon. Ezzel jelzi a PC-nek, hogy szabad az adat útja. A legtöbb konfiguráció ezt figyelmen kívül hagyja, azonban jelen esetben nekünk engedélyezni kell. Ezt a vonalat is TTL szintekre illesztjük, egyrészt a következő bekezdésben említettek miatt kényszerűségből, másrészt helyet kapott egy LED a NYÁK-on, ami jelzi az adat irányát az RS485 buszon. A LED vezérlését azért a szintillesztő IC után kötöttem, mert ennek a hibája a LED-en szemmel látható hatást fejt ki. A szintillesztő IC típusa MAX232.
Az RS232 Full-Duplex, azaz mindkét irányban folyhat rajta a kommunikáció egy időben. Az RS485 busz Half-Duplex, azaz két irányban folyhat a kommunikáció, de egy időpillanatban egyszerre csak egy irányba, ezért van értelme beszélni az adat irányáról.
Két eszköz közötti kommunikációhoz három vezetékre van szükség az RS485 esetén is. Mint mindig, egy közös referenciapontot be kell kötni, ez lesz a COM vezeték, vagy GND. Ehhez a vezetékhez képest helyezkedik el az A és a B vezeték potenciálja szimmetrikusan. Azaz, ha az A vezeték 3V potenciált mutat a COM-hoz képest, akkor a B potenciálja a COM-hoz képest -3V.
Ez az átviteli mód lehetővé teszi, hogy a mindkét kábelen jelentkező (azaz közös módusú) zajt kiszűrjük. A használt jel az ún. differenciális jel. Differenciális jel esetén, ha a két vezeték egyenlő mértékben emelkedik a föld főlé, vagy süllyed alá, az nem változtatja meg vett adatot. A mi általunk használt vonalmeghajtóból kijövő jel körülbelül fél tápfeszültséghez képest ad differenciális jelet.
A vonalat egyszerre mindig egy eszköz hajtja meg, erről szoftveres úton kell gondoskodni. Az RS485 Line driver IC típusa 75176.
A 75176-nak két vezérlőjele van, és két adatvonala a TTL oldalon. Az adatvonal a TTL level UART Rx és Tx, amit R és D betűvel van jelölve. Az egyik vezérlőjellel a vonalmeghajtót lehet engedélyezni, a másikkal a fogadó részt. Amennyiben azt szeretnénk, hogy a kiküldött adatokat mi is megkapjuk, a fogadó részt folyton engedélyezzük, amikor csak mások üzeneteire vagyunk kíváncsiak, ellenütemben vezéreljük őket.
Mivel az eszközök nyugalomban hallgatnak (nagy impedanciát mutatnak a busz irányába), ezért akárhány eszközt felfűzhetünk egyetlen buszra. Ez erősen előnyös pl a Modbus felhasználásnál, illetve DMX vonalaknál is.
Az RS485 használatához még 4 ellenállásra van szükség, illetve egy kábelt kell kihúzni, amire az összes eszközt felfűzzük. Fontos, hogy nem lehet T alakú vagy egyéb leágazás. Két ellenállást a vezeték két végére kell helyezni, ezek értéke megegyezik a kábel hullámimpedanciájával. Sokak talán már tudják, hogy erre azért van szükség, hogy a vezeték végéről ne verődjenek vissza a nagyfrekvenciás jelek. Ezen jelenség nem lehetnek leágazások a rendszerben. A másik két ellenállás egy felhúzó és egy lehúzó ellenállás a két vezetékre. Ez ahhoz kell, hogy amikor minden eszköz hallgat a vonalon, akkor mindegyik a logikai 1-et hallja. Ez az UART idle state jelszintje.
A Modbus specifikálása során azért az RS485-öt választották, mert ellenálló a zajjal szemben, és ettől függetlenül nagy távolságokra elvihető. Ez úgy a teljes, ha minden eszközt galvanikusan elválasztunk egymástól. További védelmet jelent a szintillesztő RS485 vonalaira kötött soros alacsony értékű védőellenállás. Ez megakadályozza, hogy a vezeték elhanyagolható mértékű ellenállása korlátozza csak az áramot, amikor valami véletlen folytán két eszköz próbálja meg meghajtani a vonalat ellentétes jelszintre. Kiegészítésként TVS diódákat helyezünk a ugyanezen kimenetek és a föld közé. Ez az esetleges elektrosztatikus kisülés ellen nyújt védelmet.
A buszt védő áramköri elemeket beültettük, azonban galvanikus leválasztásra nem került sor.
Néhány további kép az eszközzel kapcsolatban:
UPDATE: A cikkben hibás kapcsolási rajz van feltüntetve. Természetesen a 75176 R kimenetére felhúzó ellenállást kötöttünk, illetve a MAX232 is helyesen van bekötve. (A rajzon TTL szint van az RS232 fel ékötve, és az RS232 jelszint a TTL áramkörök fele)