# P-NET

P-NET ist ein multimaster- und multinetfähiges Feldbussystem für den vorrangigen Einsatz in verfahrenstechnischen Prozessen mit mittleren zeitlichen Anforderungen, bei dem Sensoren und Aktoren eines Fertigungsprozesses miteinander verbunden werden. Eine typische P-NET-Installation weist Antwortzeiten bis zu einigen Millisekunden und eine Buslänge bis zu einem Kilometer auf. Der P-NET-Standard ist nach dem OSI-Referenzmodell definiert. Im Gegensatz zu den meisten Feldbusprotokollen werden bei P-NET neben den Schichten 1 (Physical Layer), 2 (Data Link Layer) und 7 (Application Layer) noch die Schicht 3 (Network Layer) und 4 (Transport Layer, hier als Service Layer bezeichnet) beschrieben.

## P-NET Schichtenmodell
### P-NET Schicht 1 (Physical Layer)

Die physikalische Ebene des P-NET basiert auf dem RS-485-Standard von Electronic Industries Association. Nur die Verkabelung und der Leitungsabschluss unterscheiden sich davon. Anstelle der notwendigen Abschlusswiderstände wird die geschirmte zweiadrige Leitung zu einem physikalischen Ring geschlossen. Dadurch ist die Nutzung von bis zu 125 Busmodulen mit maximal 32 Mastermodulen je P-NET-Segment möglich. Die Datenübertragungsrate beträgt konstante 76,8 kbit/s und erfolgt im NRZ-Verfahren (No Return to Zero).

### P-NET Schicht 2 (Data Link Layer)

In der Abbildung ist die P-NET-Telegrammstruktur und der Aufbau eines Zeichens dargestellt. Es handelt sich hierbei um ein 9-Bit-Data-UART-Zeichen mit einem Startbit (logisch 0) und einem Stoppbit (logisch 1). Zusätzlich zu den 8 Datenbits wird vor dem Stoppbit noch das A/D-Bit eingefügt, dass der Erkennung des ersten Adressbytes dient (A/D=1) und damit gleichzeitig den Beginn eines Frames kennzeichnet. Dieses Bit dient also der Unterscheidung von Adress- bzw. Datenbytes. Das Telegramm beginnt immer mit dem Adressfeld von 2 bis 24 Bytes Länge. Danach schließt sich ein Control/Status-Feld von einem Byte Länge an. Dieses Byte beinhaltet im Request-Frame die Kodierung des Schicht-7-Dienstes und im Response-Frame die entsprechende Fehlerinformation. Das Byte Informationslänge kodiert im Anforderungstelegramm die Länge der Nutzdaten und die Art der Adressierung. In diesem Fall geben die Bits 0 bis 5 Auskunft über die Länge der Information, Bit 6 gibt an, ob eine Offsetkodierung vorliegt und Bit 7 gibt schließlich Auskunft darüber, ob die nachfolgende Softwire-Number (SWNo) 2 oder 4 Byte lang ist. Das nachfolgende Informationsfeld selbst enthält den Verweis auf die anzusprechende Variable sowie die eventuell zu übertragenen Daten. Die Datensicherung erfolgt mittels Prüfsummenverfahren, wobei das Sicherungsfeld das Zweierkomplement der errechneten Prüfsumme enthält. Für spezielle Anwendungen existiert eine Protokollvariante mit 2-Byte-CRC-Sicherung.
Das Adressfeld eines P-NET-Telegramms enthält die Adresse eines Busmoduls, die einfach oder komplex aufgebaut sein kann. Die Datenbits 0 bis 6 enthalten dabei die eigentliche Adresse. Das Bit 7 dient der Unterscheidung von Ziel- und Quelladressen. Als Adressen sind Werte von 1 bis 125 zugelassen. Die Adressen 0 und 127 sind reserviert. Die Adresse 126 dient als Rundspruchadresse (Broadcasting). Eine einfache Adresse kennzeichnet ein Busmodul im gleichen Segment und ist als ein Byte kodiert. Eine komplexe Adresse wird zur Adressierung von Busmodulen in entfernten Netzen genutzt und ist aus einer Folge von Adressbytes aufgebaut.
Die Vergabe des Buszugriffsrechts unter den Master-Modulen wird mittels eines virtuellen Token-Verfahrens gesteuert. Es basiert auf einer Zeitsteuerung und benötigt keine Telegramme zur Token-Weitergabe.

### P-NET Schicht 3 (Network Layer)

Die Hauptaufgaben der Schicht 3 sind der Transport der Daten von der Schicht 2 zur Schicht 4 und die Realisierung der Gatewayfunktionalität. In der Abbildung ist der prinzipielle Ablauf der Kommunikation über ein Gateway dargestellt. Hierbei sendet jedes Gateway nach Empfang eines Request-Telegramms, das an ein anderes Netz adressiert ist, ein Response-Telegramm mit der Kodierung Answer Comes Later zurück. Dieses Verhalten ist notwendig, um dem Prinzip der Immediate Response zu genügen. Der Client geht daraufhin in Warteposition, bis er ein zugehöriges Antworttelegramm empfängt. Das Gateway führt die lt. P-NET-Standard notwendige Adresskonvertierung durch und leitet das Request-Telegramm zum Server weiter. Das Antworttelegramm wird im Server generiert und als Response-Telegramm zum Gateway zurückgeschickt. Das Gateway kodiert nach dem Erhalt des Antworttelegramms durch den Server die eigentliche Response an den Client.

### P-NET Schicht 4 (Transport Layer, bei P-NET als Service Layer bezeichnet)

Die Schicht 4 umfasst zwei verschiedene Tasks. Die erste beinhaltet den P-NET-Service, der Daten in den internen Speicher schreibt bzw. herausließt oder eine Anfrage zurück leitet, falls die Variable in einem anderen Modul abgelegt ist. Die zweite Task enthält Details über alle Abfragen, die ausgesandt wurden, jedoch noch auf eine Antwort warten. Wenn die Antwort eintrifft, wird sie zur anfordernden Applikations-Task zurückgesandt. Deshalb wird die Adresse jeder Variablen in einer Liste (Softwire-List) abgelegt. Jedem Eintrag dieser Liste ist eine eindeutige Nummer zugeordnet, die Softwire-Number. Der Zugriff auf eine Variable erfolgt unter Verwendung ihrer Softwire-Number (SWNo). Das hat den Vorteil, dass die physikalische Adresse einer Variablen nicht bekannt sein muss und die Nutzung verschiedener Speichermedien (RAM, ROM, EEPROM) mit diesem Modell garantiert.

### P-NET Schicht 7 (Application Layer)

Die Schicht 7, mit den Anwendungsprogrammen greift auf die strukturierten Daten, abgelegt durch den Service in Schicht 4, zu. Die programmiertechnische Erstellung der Softwire-List erfolgt im Applikationsprogramm. Jedem Prozesssignal sind neben dem reinen Signalzustand bzw. -wert zusätzliche Informationen zugeordnet. Diese Informationen werden in Variablen gespeichert und betreffen spezielle Funktionen wie Konfiguration, Umrechnung, Skalierung, Filterung, Fehlerimplementierung etc. Im P-NET wird die Gesamtheit der auf ein Prozesssignal bezogenen Variablen und Funktionen als Prozessobjekt behandelt und trägt den Namen Channel (deutsch: Kanal).

## Kommunikationsdienste

Das P-NET-Protokoll unterscheidet nicht zwischen der Übertragung von Parametrierungs- bzw. Konfigurierungsdaten und den Prozessgrößen. Die Bedeutung der Daten ist der mitgeschickten Softwire-Number (SWNo) und dem Offset zu entnehmen. Da durch das P-NET-Protokoll eine Trennung von Anwendungsprogramm und Kommunikationssystem erfolgt, werden die Daten innerhalb des Clients in lokalen Variablen gespeichert. Auf die Daten des Servers kann weiterhin durch die entsprechenden Dienste zugegriffen werden.
| Dienst | Beschreibung |
| Store | Schreiben auf eine Variable |
| Read | Lesen einer Variablen |
| And | Bitweise logische UND-Verknüpfung zwischen den gesendeten Telegrammdaten und der Variable, Ergebnis wird im Slave gespeichert |
| Or | Bitweise logische ODER-Verknüpfung zwischen den gesendeten Telegrammdaten und der Variable, Ergebnis wird im Slave gespeichert |
| Test-And-Set | Ressourcensteuerung, Test auf Mehrfachzugriff durch mehrere Master |
| Long Load | Lesen eines Datenblocks von mehr als 56 Bytes bis maximal 64 KByte, automatische Segmentierung |
| Long Store | Schreiben eines Datenblocks von mehr als 56 Bytes bis maximal 64 KByte, automatische Segmentierung |
In der obigen Tabelle sind die sieben möglichen P-NET-Applikationsdienste zusammengetragen und kurz erläutert. Diese Dienste werden kodiert im Control/Status-Feld des Request-Telegramms übertragen. Das dazugehörige Response-Telegramm beinhaltet den entsprechenden Ergebniscode. Hier kann in Kommunikations- bzw. Applikationsfehler unterschieden werden. Das Applikationsprogramm kann auf diese Weise feststellen, ob im Modul ein Fehler vorliegt und in eine entsprechende Serviceroutine verzweigen.

## Kanaltypkonzept

Das Charakteristische bei P-NET ist das Channel-Konzept, welches die Verwaltungsstruktur für die Prozessobjekte, d. h. die Variablen und Funktionen eines Prozesssignals darstellt. Ein Channel ist als Folge von 16 Registern (Variablen) strukturiert. Diese Variablen werden als Softwire-Number (SWNo) angesprochen und können strukturierte Datentypen aufweisen, die in verschiedenen Speichermedien abgelegt werden. Die Abbildungsvorschrift zwischen Register, Channel und SWNo legt fest, dass das niederwertigste Halbbyte einer Softwire-Number die Registernummer enthält, während das höherwertige Halbbyte die Nummer des Channels im Modul festlegt. Ziel bei der Einführung war der Gedanke, Automatisierungsfunktionen immer nach dem gleichen Prinzip ansprechen zu können.
| Register | Name | Speicher | Datenformat | Bedeutung |
| 0 | PrimaryValue | … | … | … |
| 9 | ChConfig | EEPROM rpw | record | Konfiguration |
| A | Maintenance | EEPROM rpw | record | Wartungsinformationen |
| E | ChType | ROM ro | record | Typ- und Registerinformationen |
| F | ChError | RAM ro | record | Fehlerstatus |
Wie in der obigen Tabelle zu sehen ist, wurde die Grundstruktur eines Channels im Standard festgeschrieben. Der Service-Channel beinhaltet die ersten 16 SWNo mit fixierter Typisierung. Durch diesen Channel sind unbekannte P-NET-Teilnehmer über den Bus zu identifizieren. Unabhängig von seiner speziellen Funktion muss jedes P-NET-Modul einen Service-Channel besitzen. In der nachfolgenden Tabelle sind alle zwingenden Einträge eines Service-Channels aufgelistet und kurz erläutert.
| Register | Name | Bedeutung |
| 0 | NumberOfSWNo | Beinhaltet die höchste SWNo des Moduls |
| 1 | DeviceId | Durch dieses Record kann das Modul identifiziert werden |
| 4 | PnetSerialNo | Dient der Vergabe der Knotenadresse über den Bus |
| 9 | ModuleConfig | Beinhaltet Einstellungen zur Modulkonfiguration |
| D | WriteEnable | Schreibfreigabe für EPROM |
| E | ChType | Typ- und Registerinformationen |
| F | CommnonError | Modul-Fehlerstatus |
Es existieren Channels für typische Feldbusmodule, z. B. für Ein-/Ausgabe-Module (Digital I/O channel und Current output channel), für analoge Messwertaufnehmer (analog measurent channel) und für einfache Regler (PID regulator).

## Normierung

Auf europäischer Ebene ist P-NET in der Norm EN 50170-1(1997) festgelegt.