ZBus am PC (RS232 zu RS485 Konverter)

Aus Ethersex_Wiki
Version vom 17. September 2009, 08:39 Uhr von Dinus (Diskussion | Beiträge) (Low Feature Variante ohne LEDs)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu: Navigation, Suche

Allgemeines zu ZBus )

Wichtig - erst diese Seite lesen: http://www.ethersex.de/index.php/Network_Bridges

Für den Aufbau eines RS485 Buses/Netzes gibt es einiges zu beachten. Dort ist auf Bild 1 der richtige Aufbau zu sehen.

ZBus an der seriellen Schnittstelle

Es gibt zwar die Möglichkeit ein ZBus Netz nur aus Ethersexen bestehend aufzubauen und dann eines als Gateway in die normale Netzwerkwelt zu benutzen (dieses Gateway hat dann einmal ZBus und einmal Ethernet). Jedoch kann man auch die serielle Schnittstelle eines normalen PCs oder sogar einen USB-zu-Seriell Konverter verwenden um ZBus mit Ethersexes zu sprechen. Dazu braucht es allerdings einen Konverter von dem RS232 das die auf der seriellen Schnitstelle gefahren wird zum RS485, dass bei ZBus normalerweise verwendet wird.

Der erste Versuch ist hier zu finden. Dieser ist allerdings noch komplizierter, braucht einen externen Attiny zum umschalten des RX/TX Pins (bei RS485 muss man zwischen Senden und Empfangen umschalten). Jedoch kann man sich dieses umschalten mit einem kleinen Trick ersparen.

Full Feautured Aufbau mit LEDs

PC als Host node am Zbus einsetzen:
Ein PC_Host Adapter kann so aussehen:
- Ist auch als universal rs232-rs485 Konverter einzusetzen
- Hat zwei rs485 Kanälen
- Das umschalten zwischen empfangen und senden ist Baudratenunabhaengig.
- Verkraftet eine Baudrate bis 115200.
- Mit den Steckverbinder kann man jedes Kabel anschliessen ohne zu loeten.
- Die Leds leuchten nur auf wenn etwas ampfangen oder gesendet wird.
- Kein Hardware handshake.
- J4 ist um bei kürzeren Leitungen 5V weiterzuleiten, sodass kein Extra Spannungsumwandler bei dem Node nötig ist.
- Mit 2 extra Jumper kann auch ein RS422 eingestellt werden

Die RS232 und RS485 sind getrennt nach aussen geführt, und können somit als Entwicklungsboard zusammen mit einem AVR Net-IO ohne änderung hergenommen werden.

Der Trick mit dem Umschalten beim RS485 ist folgender: Durch die 3 Biaswiderstände (570,156 und 570 Ohm) werden die Leitungen A und B auf eine logische 1 gesetzt, der Unterschied zwischen beiden beträgt ca. 0.6V. Die Biaswiderstände muss man als Abschlusswiderstände sehen, die dürfen nicht bei jedem Node vorhanden sein, weil sonst die 485 Chips die Last nicht mehr treiben können, also nur bei ersten und beim letzen mit Hilfe der Jumper stecken.

Der DataIn Pin des 485 Chips wird fest auf 0 gelegt, also eine logische 0, nun muss man nur noch den Transmitter einschalten, wenn auch von 232 Chip eine logische 0 Ankommt, da der Transmitter Enable Pin High Active ist braucht es noch eine Invertierung des Signals durch den 74HC04. Und schon kann man prima RS485 sprechen ohne zusätzlichen Umschaltpin.

Low Feature Variante ohne LEDs

Rs232-rs485.png

Da der 74HC04 nur verwendet wird um ein einziges Signal zu invertieren, der Rest ist nur für die Anzeige der LEDs da, kann man den ganzen Chip durch einen einzelnen Transistor und 2 Widerstände ersetzen. Bei dieser Schaltung ist weder der RS232 direkt rausgeführt, noch hat man 2 Kanäle, es ist nur die Low Budget Version, wenn man einen einfachen RS232 zu RS485 Konverter braucht.

Allerdings ist hier auch noch zu beachten, dass noch die 5V Versorgung fehlt. Diese kann man zum Beispiel wie bei der Full Featured Variante aufbauen, oder einfach einen 7805 mit der Schaltung wie im Datenblatt verwenden, um von 12/24V auf 5V zu kommen.

Bild mit fertige Platine und selbstbau Beschreibung --> RS232_zu_RS485_Converter

Software für den Konverter (Linux)

Die Software für das Einrichten eines ZBus Netzes mit einem solchen Konverter ist ein Userspace treiber, der ein Tun Device (erstellt) und darüber ZBus spricht. Die Software ist im Ethersex Repository unter contrib/ zu finden:

 $ cd ~/ethersex/contrib/zbus-serial-host # Ordner Wechseln
 $ make  # Software kompilieren
 $ ./zbus-serial-host -h # Hilfe anzeigen
  -h --help      Print this help and exit
  -r --baudrate  set baudrate
  -a --address   adds of the interface in the form 192.168.8.1/24
  -d --device    set the ttyS* interface to use
  -m --mtu       set mtu
  -u --up        call this command, when the interface is up
 

Nun muss man den ZBus "Treiber nur noch starten. Um ein zbus Device zbus0 zu erstellen, dass die Addresse 10.0.1.22 und die Netzmaske 10.0.1.255 hat, bei 19200 Baud, ist folgendes zu tun:

 # Der ZBus Treiber benötigt root Rechte, weil er ein Netzwerkinterface erstellt
 $ sudo ./zbus-serial-host -r 19200 -d /dev/ttyS0 -a 10.0.1.22/24 & # ZBus im Hintergrund starten
 $ ifconfig zbus0
  zbus0     Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  
           inet addr:10.0.1.22  P-t-P:10.0.1.22  Mask:255.255.255.0
           UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:174  Metric:1
           RX packets:0 errors:0 dropped:0 overruns:0 frame:0
           TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
           collisions:0 txqueuelen:500 
         RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

Das zbus0 Interface ist wie ein gewöhnliches Netzwerkinterface. (zb eth0). In diesem Zbus Netzwerk sollten alle Nodes Addressen aus dem Netz 10.0.1.255 haben. Sollen nun alle Rechner im Netzwerk wissen wie sie sich mit den ZBus Nodes in Verbindung setzen muss am Default Gateway (Router) noch eine Route eingetrachen werden, die sagt, wo Packete für das ZBus Netzwerk hinsollen. Angenommen der ZBus Gateway hat 10.0.0.188 als Addresse setz man die passende Route mit

 ip route add 10.0.1.0/24 via 10.0.0.188

Zu beachten ist auch, dass alle ZBus Nodes die gleiche Baudrate fahren müssen (vorallem sind Quarze Pflicht!)