Aus RN-Wissen.de
Wechseln zu: Navigation, Suche
Laderegler Test Tueftler Seite

 
(8 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
In dieser Version werden die Festlegungen getroffen, die für ein kleines Controller/PC Netzwerk erforderlich sind. Beispielprogramme, Templates und Libraries für PC und µC sind teilweise fertig, teilweise in Entstehung, [[Network_Controller/PC_Version_0.1#Weblinks/Download|und können dann mit Download geholt werden.]]
+
In dieser Version werden die Festlegungen getroffen, die für ein kleines Controller/PC Netzwerk erforderlich sind. Beispielprogramme, Templates und Libraries für PC und µC sind teilweise fertig, teilweise in Entstehung, [[Network_Controller/PC#Weblinks/Download|und können dann mit Download geholt werden.]]
  
 
*Für µC-Programme liegt der Schwerpunkt vorerst auf Bascom, C-Libraries der Kern-Funktionen sind aber vorgesehen.  
 
*Für µC-Programme liegt der Schwerpunkt vorerst auf Bascom, C-Libraries der Kern-Funktionen sind aber vorgesehen.  
Zeile 17: Zeile 17:
 
**mehrere PC-Anwendungen
 
**mehrere PC-Anwendungen
  
==Konzept 0.1==
 
*Für die PC-Anwendungen ist der Aufbau des Controller-Netzwerkes transparent, d.h. die Adressierung erfolgt (normalerweise) mit 16-Bit ID-Codes
 
*µC seitig sind fix 2 Ziel- und Absenderpfadangaben festgelegt. In dieser Version generell in der 8-Bit Variante, die den (7-Bit) I2C-Adressbereich abdeckt und für maximal 64 µC Anwendungen ausreicht.
 
  
Diese Restriktionen vereinfachen die Programmentwicklung doch sehr und sollten trotzdem für kleinere Systeme ausreichen.
+
=Messages (Nachrichten)=
 +
<center>[[Bild:Rncomformat.png]]</center>
  
'''Details zu Messages:'''
+
Je nach physikalischem Transportmittel wird die Message verschieden eingepackt.
*[[Network Controller/PC Spezifikationen]]
+
Anm. IP: Das Längenwort (16-Bit) beinhaltet die Länge der Daten exklusive Längenwort. D.h, um z.B. vier Byte zu übertragen,  werden insgesamt 6 Byte weggeschickt.
  
=Routing Tables=
+
Der Vergleich mit einer Briefsendung ist zulässig, da wie dort gibt es
Diese Tabelle(n) führt das PC-Programm "RN_SERVER".
+
*Zieladresse (Target)
Wenn eine Message über IP hereinkommt, wird
+
*Absender    (Source)
*Target-ID in der Ziel-Tabelle gesucht, die Message wird dann mit den gefundenen Pfadangaben über COM(1) weitergeschickt.
+
*Daten
*Für Source-ID wird ein Tabelleneintrag generiert bzw. ein bestehender verwendet, die Referenz wird als Absende-Pfad eingetragen, der zweite Source-Pfad bleibt leer (NULL).
+
<center>[[Bild:Rncomtable.png]]</center>
+
  
=Generierung der Routing Tables=
+
Uns interessiert zuerst einmal nur, wie eine solche Nachricht vom Sender zum Empfänger und ggf. wieder zurückkommt, daher können uns die Daten selbst erst einmal völlig egal sein.  
==Atmega32-Anmeldung==
+
Die Devices vom Atmeg32 melden sich aktiv beim Router an (Das Verfahren wird noch näher erläutert). Die Geräte direkt im Atmega32 vom RNBFRA-Board senden eine Message an das Pseudo-Target '''"IAM"''' (I am = "Ich bin")
+
Als Absender wird die Kurzreferenz des Gerätes gesendet, die Daten beinhalten die 16-Bit ID des Gerätes.
+
<center>[[Bild:Rncomiam1.png]]</center>
+
Anm: Dass diese Meldung über "COMx" hereingekommen ist, wird vom Router ergänzt.
+
==Messages an Atmega32==
+
Wird nun über IP diese ID als Target angesprochen, wird die UART-Message so aufgebaut:
+
<center>[[Bild:Rncomflow1.png]]</center>
+
==Atmega16-Anmeldung==
+
Auch diese Devices melden sich aktiv. Der Atmega32 empfängt diese Message und leitet sie weiter wie dargestellt. dabei ergänzt er aber den Absender um die I2C Adresse des Atmega16, die ja als Backlink in der I2C-Message steht.
+
  
Beim PC landet diese Message genauso wir eine vom Atmega32, nur daß der Pfad aus zwei Einträgen besteht.
+
'''Details zu Messages:'''
<center>[[Bild:Rncomiam2.png]]</center>
+
*[[Network Controller/PC Spezifikationen]]
  
==Messages an Atmega16==
+
==Adressen==
Völlig analog zu Messages an dem Atmega32, die Tatsache, daß dann über I2C weitergeroutet wird, ist für der PC unerheblich.  
+
Für die PC-Anwendungen ist der Aufbau des Controller-Netzwerkes transparent, d.h. die Adressierung erfolgt (normalerweise) mit 16-Bit ID-Codes
<center>[[Bild:Rncomflow2.png]]</center>
+
Auch hier wird der Sourcepfad um den Eintrag "UARTx" erweitert. Denn wenn eine Antwort kommen sollte, muß ja klargestellt sein, daß das Ziel über die UART zu erreichen ist.
+
  
=Rückmeldungen=
+
==Pfade==
Wenn das Device nach Verarbeitung der Message-Daten etwas zurücksenden will, werden Target- und Source-Pfade vertauscht, der Ablauf ist dann analog wie beim Wegsenden der IAM Message, nur daß diesmal nicht mittels GCA, sondern gezielt an die I2C Backlink-Adresse gesendet wird.
+
Was ist denn in einer einzelnen Pfadangabe darzustellen ?
 +
*Typ und Wert
 +
**I2C  u. Adresse  (7-Bit)
 +
**UART  u. ev. eine Nummer 1, 2,..
 +
**RS232 das ist eigentlich das Gleiche wie UART oder COM
 +
**IP    u. Socket da müßte man schon mit einem 16-Bit Wort rechnen
 +
**Funktions-ID.  Auch da haben wir bisher 16 Bit festgelegt.  
  
=Heartbeat (HBT)=
+
Wenn man da noch die Möglichkeit einer vollständigen IP-Adresse dazunimmt, würden wir auch noch entweder Text ("www.nirwana.com") oder eine IP-Addresse (32-Bit) + Port (16-Bit) unterbringen.  
Einige Fragen könnten da aufgetaucht sein
+
*Woher weiß der Atmega16 (oder der AT90S2313), daß er sein "IAM" Messages an den Atmega32 schicken muß bzw. soll ?
+
*Und woher kennt er dessen I2C Adresse ?
+
  
Um wirklich zu einem "Plug n'Play" Netzwerk zu kommen, sendet jeder RNCOM Rechner, das sind in der konkreten Konfiguration
+
Was heißt denn eigentlich "Typ" ? Nun, im Grunde muß daraus nur eine bestimmte Programm-funktion abgeleitet werden, die dann auch ihren "Wert" bekommen kann. Wie kann man eine sowas identifizieren ?
*Atmega32
+
*Einfach ein Index (die soundsovielte Funktion)
*Atmega16
+
*Eine Direktadresse (wohl nur theoretisch)
*AT90S2313
+
*Eine ID (mit Tabelle)  
regelmäßig (etwa jede Sekunde) eine Message mit dem Target "Heartbeat" (HBT) auf jeder ihm zur Verfügung stehenden Leitung weg. Zuerstmal:
+
==Heartbeat UART (Atmega32)==
+
<center>[[Bild:Rncomhbt1.png]]</center>
+
Durch diese Message erfährt "Rnrouter" am PC, daß auf dem Com1-Port tatsächlich ein aktiver Rechner angeschlossen ist. Mehr eigentlich im Moment nicht.
+
==Heartbeat I2C (Atmega16 u. 32, AT90S2313)==
+
Auf I2C werden diese Heartbeats im [[Network_Controller/PC_Version_0.1#Messages|I2C Format]] gesendet, allerdings an die I2C-Addresse "GCA". Das ist einfach die Adresse NULL.
+
<center>[[Bild:Rncomhbt2.png]]</center>
+
6E*: Aus formalen Gründen (I2C Standard) wird bei GCA Messages dort immer das Bit 0 gesetzt. d.h. genaugenommen steht dort 6F. Das weiß aber auch der Empfänger und kann dieses Bit maskieren.
+
  
Durch die Ergänzung des Source-Pfades um die I2C-Backlink Adresse und Weiterleitung über UART erfährt der PC nun zwei Dinge:
+
Damit wir nicht irgendeinen kleinen Controller als Zwischenstation durch zu lange Messages oder Tabellen überfordern, ist es wohl ratsam, ein wenig Bits zu quetschen (Huffman läßt grüßen).
*Es gibt einen I2C Bus
+
*Es gibt dort einen Rechner mit der I2C Adresse 6E (Atmega16) bzw. 68 (AT90S2313)
+
  
=Next Device (NXT)=
+
*I2C Adressen haben im LSB-Bit immer NULL (das ist ja das R/W Bit), also sagen wir einfach, ein Pfad-Byte, dessen LSB = 0 ist, ist grundsätzlich Typ=I2C und gleichzeitig die Adresse.
Mit diesen Weisheiten sendet nun "RNROUTER" am PC eine "NXT" Message ganz gezielt an die Pfade, von denen er nun Kenntnis hat. An den Atmega16 sendet er z.B.  
+
*Ist das LSB = 1, kommts jetzt auf das nächste Bit an.
<center>[[Bild:Rncomnxt2.png]]</center>
+
*ist das NULL, gelten die restlichen 6 Bit als Funktionsindex, also eine Zahl 0-63. Das wird bei kleinen µC meistens auch schon reichen. Wenn wir noch festlegen, daß Index 0-3 immer eine UART (RS232 od. COM) bezeichnet, kommen wir auch da mit einem Byte aus. Das ist ja schon mal fein.
Durch die "NXT" Message wird am Atmega16 eine [[Network_Controller/PC_Version_0.1#Atmega16-Anmeldung|eine "IAM" Message]] zurück generiert. In den Daten steht nun die ID (16-Bit) und eine Device-Nummer (0-FF), wobei FF heißt, es gibt keine IDs mehr.
+
*es geht weiter wie dargestellt.  
 +
*"reserved" ist im Moment noch offen, da könnten wir z.B. sagen, daß die verbliebenen 4 Bit im ersten Byte eine Längenangabe sind, wieviele Type- und Wert-Bytes noch folgen.  
  
Der PC trägt dieser Gerät nun in seine Tabellen ein. Und sofort danach sendet er wieder eine "NXT" Messager los, diesmal aber statt "0" in den Daten die Device-Nummer, die er gerade gekriegt hat (Außer bei "FF" natürlich, da hört er damit auf).  
+
<center>[[Bild:path.PNG]]</center>
  
Dadurch bekommt er nach und nach sämtliche IDs, die auf dem Atmega16 zur Verfügung stehen.
 
  
==Anmerkung==
 
Wenn alle Mikrocontroller gleichzeitig eingeschaltet werden, ist natürlich dann Einiges auf dem Netz los. Das "Bottleneck" sind natürlich die UART-Verbindungen. Da aber kein Rechner eine "IAM" Meldung auf die Reise schickt, ohne daß er vorher ein "NXT" bekommen hat, regeln die UARTs den zulässigen Traffic gewissermaßen selbst.
 
  
 
=Weblinks/Download=
 
=Weblinks/Download=
Zeile 98: Zeile 73:
 
=Siehe auch=
 
=Siehe auch=
 
*[[Network Controller/PC Routing]]
 
*[[Network Controller/PC Routing]]
*[[Network Controller/PC Schichten]]
 
 
*[[Network Controller/PC Spezifikationen]]
 
*[[Network Controller/PC Spezifikationen]]
 +
*[[Network Controller/PC Praxis]]
 
*[[Kommunikation/Protokolle]]
 
*[[Kommunikation/Protokolle]]
  

Aktuelle Version vom 10. Oktober 2006, 13:13 Uhr

In dieser Version werden die Festlegungen getroffen, die für ein kleines Controller/PC Netzwerk erforderlich sind. Beispielprogramme, Templates und Libraries für PC und µC sind teilweise fertig, teilweise in Entstehung, und können dann mit Download geholt werden.

  • Für µC-Programme liegt der Schwerpunkt vorerst auf Bascom, C-Libraries der Kern-Funktionen sind aber vorgesehen.
  • PC-seitig soll der RN-Server erstmal den Abschluß bilden, die eigentlichen Anwendungen muß ich mangels VB-Erfahrung den Spezialisten überlassen, soweit sie mitspielen wollen. Ich selbst kann nur know-how für MS Visual C++ liefern.

Das Netzwerk

Rncomsmall.png

Teilnehmer

  • Ein RNBFRA 1.2 Board, mit
    • Powerport
    • Outputport
    • Expansionport (Input)
    • AT90S2313 als Coprozesser, mit dem Servoprogramm "RNSXNET". Das ist eine Abwandlung des RNS-Servers für Netzwerke
  • Ein Zusatzboard (Eigenbau) mit einem Atmega16
  • Ein PC, der mit COM1 (RS232) mit dem RNBFRA Board verbunden ist
    • das PC-Programm "RN_SERVER.EXE, das das Routing übernimmt
    • mehrere PC-Anwendungen


Messages (Nachrichten)

Rncomformat.png

Je nach physikalischem Transportmittel wird die Message verschieden eingepackt. Anm. IP: Das Längenwort (16-Bit) beinhaltet die Länge der Daten exklusive Längenwort. D.h, um z.B. vier Byte zu übertragen, werden insgesamt 6 Byte weggeschickt.

Der Vergleich mit einer Briefsendung ist zulässig, da wie dort gibt es

  • Zieladresse (Target)
  • Absender (Source)
  • Daten

Uns interessiert zuerst einmal nur, wie eine solche Nachricht vom Sender zum Empfänger und ggf. wieder zurückkommt, daher können uns die Daten selbst erst einmal völlig egal sein.

Details zu Messages:

Adressen

Für die PC-Anwendungen ist der Aufbau des Controller-Netzwerkes transparent, d.h. die Adressierung erfolgt (normalerweise) mit 16-Bit ID-Codes

Pfade

Was ist denn in einer einzelnen Pfadangabe darzustellen ?

  • Typ und Wert
    • I2C u. Adresse (7-Bit)
    • UART u. ev. eine Nummer 1, 2,..
    • RS232 das ist eigentlich das Gleiche wie UART oder COM
    • IP u. Socket da müßte man schon mit einem 16-Bit Wort rechnen
    • Funktions-ID. Auch da haben wir bisher 16 Bit festgelegt.

Wenn man da noch die Möglichkeit einer vollständigen IP-Adresse dazunimmt, würden wir auch noch entweder Text ("www.nirwana.com") oder eine IP-Addresse (32-Bit) + Port (16-Bit) unterbringen.

Was heißt denn eigentlich "Typ" ? Nun, im Grunde muß daraus nur eine bestimmte Programm-funktion abgeleitet werden, die dann auch ihren "Wert" bekommen kann. Wie kann man eine sowas identifizieren ?

  • Einfach ein Index (die soundsovielte Funktion)
  • Eine Direktadresse (wohl nur theoretisch)
  • Eine ID (mit Tabelle)

Damit wir nicht irgendeinen kleinen Controller als Zwischenstation durch zu lange Messages oder Tabellen überfordern, ist es wohl ratsam, ein wenig Bits zu quetschen (Huffman läßt grüßen).

  • I2C Adressen haben im LSB-Bit immer NULL (das ist ja das R/W Bit), also sagen wir einfach, ein Pfad-Byte, dessen LSB = 0 ist, ist grundsätzlich Typ=I2C und gleichzeitig die Adresse.
  • Ist das LSB = 1, kommts jetzt auf das nächste Bit an.
  • ist das NULL, gelten die restlichen 6 Bit als Funktionsindex, also eine Zahl 0-63. Das wird bei kleinen µC meistens auch schon reichen. Wenn wir noch festlegen, daß Index 0-3 immer eine UART (RS232 od. COM) bezeichnet, kommen wir auch da mit einem Byte aus. Das ist ja schon mal fein.
  • es geht weiter wie dargestellt.
  • "reserved" ist im Moment noch offen, da könnten wir z.B. sagen, daß die verbliebenen 4 Bit im ersten Byte eine Längenangabe sind, wieviele Type- und Wert-Bytes noch folgen.
Path.PNG


Weblinks/Download

http://www.oldformation.at/electronic/download/down.htm

Autor

Siehe auch


LiFePO4 Speicher Test