Aus RN-Wissen.de
Wechseln zu: Navigation, Suche
Balkonkraftwerk Speicher und Wechselrichter Tests und Tutorials

(Version 0.1 Controller-Network)
Zeile 1: Zeile 1:
 
Für das Projekt "Network Controller/PC" werden hier die ganz konkreten Spezifikationen angelegt. Als "Sprache" wird Pseudo-Code, an C angelehnt, verwendet.  
 
Für das Projekt "Network Controller/PC" werden hier die ganz konkreten Spezifikationen angelegt. Als "Sprache" wird Pseudo-Code, an C angelehnt, verwendet.  
  
=Version 0.1 Controller-Network=
 
T-1, T-2, S-1, S-2 sind in dieser Version immer 8-Bit Pfadangaben. In dieser Version sind nur zwei Pfadangaben je Richtung erlaubt, die sind aber auch immer da, selbst wenn der Inhalt NULL ist (void). 
 
<center>[[Bild:pathsmall.png]]</center>
 
Die Referenzen 0-63 brauchen nur innerhalb eines Rechners eindeutig zu sein. Einige Werte sind allerdings vordefiniert und für alle Rechner gleich
 
*HBT  "Heartbeat"  Broadcast
 
*ASK  "Suche Gerät" Broadcast  Daten: 8-Bit NULL, 16-Bit ID
 
*NXT  "Next"  Frage nach Geräteliste  Daten: 8-Bit Geräteindex
 
*IAM  "I am"  Information über ein Gerät Daten: 8-Bit Device-Index, 16-Bit ID
 
*UART  Die UART (In Vers-0.1 wird von maximal 1 UART je Rechner ausgegangen)
 
  
 
+
=Layer-0=
==Version 0.1 Layer-0 UART==
+
Für die unterste Schicht, Layer-0, gibt es drei Versionen:
 +
<center>[[Bild:Rncomlay0.png]]</center>
 +
==IP (TCP/IP)==
 +
<center>[[Bild:Rncomformatip.png]]</center>
 +
Die Länge ist "host-order" d.h. low-Byte zuerst, immer exklusive Länge, d.h. für 4 Bytes Layer-1 Daten werden insgesamt 6 Byte übertragen. 
 +
==UART==
 
<center>[[Bild:Rncomformatrs.png]]</center>
 
<center>[[Bild:Rncomformatrs.png]]</center>
 
*Maximale Frame-Size
 
*Maximale Frame-Size
Zeile 65: Zeile 61:
 
[[Network_Controller/PC_RS232_mit_Windows#Network_Controller.2FPC_RS232_mit_Windows|RS232 mit Windows]]
 
[[Network_Controller/PC_RS232_mit_Windows#Network_Controller.2FPC_RS232_mit_Windows|RS232 mit Windows]]
  
 
+
==I2C==
==Version 0.1 Layer-0 I2C==
+
 
<center>[[Bild:Rncomformati2c.png]]</center>
 
<center>[[Bild:Rncomformati2c.png]]</center>
*Maximale Frame-Size
 
 
*Fwd die Empfänger-I2C-Adresse. In der vorliegenden Version werden nur 7-Bit Adressen zugelassen. Für Broadcasts (HBT, ASK) wird GCA (= NuLL) verwendet.
 
*Fwd die Empfänger-I2C-Adresse. In der vorliegenden Version werden nur 7-Bit Adressen zugelassen. Für Broadcasts (HBT, ASK) wird GCA (= NuLL) verwendet.
 
*Bck ist immer die Absender-I2C-Adresse. Aus formalen Gründen wird immer das Bit 0 gesetzt.  
 
*Bck ist immer die Absender-I2C-Adresse. Aus formalen Gründen wird immer das Bit 0 gesetzt.  
Zeile 74: Zeile 68:
 
Programmiertechnisch ist dazu wohl nicht viel zu sagen.
 
Programmiertechnisch ist dazu wohl nicht viel zu sagen.
  
=Version 0.1 PC-Network=
+
 
 +
=Layer-1 Version 0.1=
 +
Hier sind es zwei Ausprägungen: Für die PC-Seite und für die Microcontroller
 +
<center>[[Bild:Rncomlay1.png]]</center>
 +
==PC==
 
In dieser Version gibt es keine Pfadangaben, sondern immer 16-Bit IDs. Da sich eine IP-Verbindung ja als point-to-point darstellt, ist der Bedarf an Routing-Pfaden nicht sosehr gegeben.  
 
In dieser Version gibt es keine Pfadangaben, sondern immer 16-Bit IDs. Da sich eine IP-Verbindung ja als point-to-point darstellt, ist der Bedarf an Routing-Pfaden nicht sosehr gegeben.  
==Version 0.1 Layer-0 IP==
+
==µC==
<center>[[Bild:Rncomformatip.png]]</center>
+
T-1, T-2, S-1, S-2 sind in dieser Version immer 8-Bit Pfadangaben. In dieser Version sind nur zwei Pfadangaben je Richtung erlaubt, die sind aber auch immer da, selbst wenn der Inhalt NULL ist (void). 
 +
<center>[[Bild:pathsmall.png]]</center>
 +
Die Referenzen 0-63 brauchen nur innerhalb eines Rechners eindeutig zu sein. Einige Werte sind allerdings vordefiniert und für alle Rechner gleich
 +
*HBT  "Heartbeat"  Broadcast
 +
*ASK  "Suche Gerät" Broadcast  Daten: 8-Bit NULL, 16-Bit ID
 +
*NXT  "Next"  Frage nach Geräteliste  Daten: 8-Bit Geräteindex
 +
*IAM  "I am"  Information über ein Gerät Daten: 8-Bit Device-Index, 16-Bit ID
 +
*UART  Die UART (In Vers-0.1 wird von maximal 1 UART je Rechner ausgegangen)
 +
 
  
Anm: Die Länge ist "host-order" d.h. low-Byte zuerst
 
  
 
==Autor==
 
==Autor==

Version vom 20. September 2006, 10:47 Uhr

Für das Projekt "Network Controller/PC" werden hier die ganz konkreten Spezifikationen angelegt. Als "Sprache" wird Pseudo-Code, an C angelehnt, verwendet.


Layer-0

Für die unterste Schicht, Layer-0, gibt es drei Versionen:

Rncomlay0.png

IP (TCP/IP)

Rncomformatip.png

Die Länge ist "host-order" d.h. low-Byte zuerst, immer exklusive Länge, d.h. für 4 Bytes Layer-1 Daten werden insgesamt 6 Byte übertragen.

UART

Rncomformatrs.png
  • Maximale Frame-Size
#define FRAME_C_MAX   127     

Das ist die maximale Netto-Länge zwischen STX und ETX, exklusive. Auch das scheint für µC etwas groß, aber es wird davon ausgegangen, daß die real benötigten Messages weit kürzer sein werden, d.h. das regelt sich vermutlich von selbst durch die Vereinbarungen und Restriktionen in den oberen Layern

  • Kontrollzeichen
#define CTL_M_MASK   0xF8 
#define CTL_M_ADON   0x08 
#define CTL_C_BASE   0xA8 
#define CTL_C_STX   CTL_C_BASE + 1 
#define CTL_C_ETX   CTL_C_BASE + 2 
#define CTL_C_PFX   CTL_C_BASE + 3 
  • Code-Beispiel/Muster für Paket-senden

( transmit() stellt die Funktion für den tatsächlichen physischen Output dar).

static unsigned char bTxBcc;            // Checksum für BCC 
// --------------------------------------------------------------
void TxStartFrame ( void )
{
  bTxBcc = 0
  transmit ( CTL_C_STX )                         
}
// --------------------------------------------------------------
void TxCloseFrame ( void )
{
  TxSendStuffByte ( bTxBcc )  // auch das BCC mit ev. prefixed werden
  transmit ( CTL_C_ETX )                         
}
// --------------------------------------------------------------
void TxSendFrameByte ( unsigned char bTxChar)
{
     bTxBcc ^= bTxChar
     TxSendStuffByte ( bTxChar ) 
}
// --------------------------------------------------------------
void TxSendStuffByte ( unsigned char bTxChar)
{
     if (bTxChar & CTL_M_MASK) == CTL_C_BASE) 
     { 
       transmit ( CTL_C_PFX )
       transmit ( bTxChar + CTL_M_ADON )      
     } 
     else 
     { 
       transmit ( bTxChar )        
     } 
}
  • Die entsprechende Empfangsroutine ist etwas komplexer und wird wesentlich mehr vom Geschick und den Gewohnheiten des Programmieres bestimmt.

RS232 mit Windows

I2C

Rncomformati2c.png
  • Fwd die Empfänger-I2C-Adresse. In der vorliegenden Version werden nur 7-Bit Adressen zugelassen. Für Broadcasts (HBT, ASK) wird GCA (= NuLL) verwendet.
  • Bck ist immer die Absender-I2C-Adresse. Aus formalen Gründen wird immer das Bit 0 gesetzt.

Programmiertechnisch ist dazu wohl nicht viel zu sagen.


Layer-1 Version 0.1

Hier sind es zwei Ausprägungen: Für die PC-Seite und für die Microcontroller

Rncomlay1.png

PC

In dieser Version gibt es keine Pfadangaben, sondern immer 16-Bit IDs. Da sich eine IP-Verbindung ja als point-to-point darstellt, ist der Bedarf an Routing-Pfaden nicht sosehr gegeben.

µC

T-1, T-2, S-1, S-2 sind in dieser Version immer 8-Bit Pfadangaben. In dieser Version sind nur zwei Pfadangaben je Richtung erlaubt, die sind aber auch immer da, selbst wenn der Inhalt NULL ist (void).

Pathsmall.png

Die Referenzen 0-63 brauchen nur innerhalb eines Rechners eindeutig zu sein. Einige Werte sind allerdings vordefiniert und für alle Rechner gleich

  • HBT "Heartbeat" Broadcast
  • ASK "Suche Gerät" Broadcast Daten: 8-Bit NULL, 16-Bit ID
  • NXT "Next" Frage nach Geräteliste Daten: 8-Bit Geräteindex
  • IAM "I am" Information über ein Gerät Daten: 8-Bit Device-Index, 16-Bit ID
  • UART Die UART (In Vers-0.1 wird von maximal 1 UART je Rechner ausgegangen)


Autor

Siehe auch


LiFePO4 Speicher Test