Azyklisches Lesen/Schreiben von Daten über PROFIBUS DP V1
Überblick
Für den azyklischen DP V1-Zugriff ist ein Mechanismus auf der Grundlage von Slot-/Index- und Längenadressierung im LTMR-Controller implementiert.
Auf die Variablen wird in Schritten von 10 Registern zugegriffen. Auf Register, die sich zwischen zwei Untergruppen befinden, kann nicht zugegriffen werden. Ist kein Registerzugriff möglich, wird über DP V1 ein „Erkannter Fehler“-Wert (z. B. „nicht alle Register gefunden“) zurückgesendet.
Lesen azyklischer Daten (DS_Read)
Mit der Funktion
DS_Read
kann das PROFIBUS
DP-Primärgerät Daten aus dem Sekundärgerät
auslesen. In der folgenden Tabelle sind die Inhalte eines DS_Read-Blocks
aufgeführt:
Byte |
Syntax |
---|---|
0 [Funktionsnummer] |
0x5E [ |
1 [Slot-Nummer] |
Konstanter Wert = 1 |
2 [Index] |
Registeradresse / 10 Der Registerzugriff erfolgt üblicherweise in Schritten von 10 Registern. Der Index wird immer auf eine ganze Zahl abgerundet. |
3 [Länge] |
Länge von Datenblöcken in Bytes (Anzahl der Register) x 2 Maximale Anzahl der Register = 20 (40 Bytes) Eine beliebige Länge zwischen 2 und 40 Bytes ist möglich. |
4 bis (Länge + 3) |
Zu lesender Block an Datenbytes |
DS_Read-Beispiel
Beispiel: Lesen der Identifikationsregister 50 bis 62
Byte |
Wert |
---|---|
0 [Funktionsnummer] |
0x5E [ |
1 [Slot-Nummer] |
1 |
2 [Index] |
5 [50/10] |
3 [Länge] |
26 [(50 bis 62 = 13) x 2] |
4 bis 29 |
Wert der Register 50 bis 62 |
Senden azyklischer Daten (DS_Write)
Mit der Funktion
DS_Write
kann das PROFIBUS DP-Primärgerät Daten an das Sekundärgerät
senden.
Vor dem Schreiben eines Datenblocks empfiehlt es sich, zunächst einen Datenblock zu lesen, um nicht betroffene Daten zu schützen. Der gesamte Block wird nur geschrieben, wenn Sie über eine entsprechende Schreibberechtigung verfügen. Das können Sie in der jeweiligen Registertabelle in Abschnitt Variablengruppen - Kommunikation überprüfen. In Spalte 3 der Tabellen ist jeweils angegeben, ob die Variablen schreibgeschützt sind oder ob ein Lese- und Schreibzugriff möglich ist.
In der folgenden Tabelle sind die Inhalte eines DS_Write-Blocks aufgeführt:
Byte |
Syntax |
---|---|
0 [Funktionsnummer] |
0x5F [ |
1 [Slot-Nummer] |
Konstanter Wert = 1 |
2 [Index] |
Registeradresse / 10 Der Registerzugriff erfolgt üblicherweise in Schritten von 10 Registern. Der Index wird immer auf eine ganze Zahl abgerundet. |
3 [Länge] |
Länge von Datenblöcken in Bytes (Anzahl der Register) x 2 Maximale Anzahl der Register = 20 (40 Bytes) Eine beliebige Länge zwischen 2 und 40 Bytes ist möglich. |
4 bis (Länge + 3) |
Zu schreibender Block an Datenbytes |
DS_Write-Beispiel: Beschreibung des Verfahrens
Beispiel: Rücksetzen einer Auslösung durch Einstellen von Bit 704.3 auf 1
1. Lesen Sie 700 bis 704 aus.
Byte |
Wert |
---|---|
0 [Funktionsnummer] |
0x5E [ |
1 [Slot-Nummer] |
1 |
2 [Index] |
70 [700/10] |
3 [Länge] |
10 [(700 bis 704 = 5) x 2] |
4 bis 13 |
Aktuelle Werte der Register 700 bis 704 |
2. Stellen Sie Bit 3 des Registers 704 auf 1 ein.
3. Schreiben Sie in die Register 700 bis 704.
Byte |
Wert |
---|---|
0 [Funktionsnummer] |
0x5F [ |
1 [Slot-Nummer] |
1 |
2 [Index] |
70 [700/10] |
3 [Länge] |
10 [(700 bis 704 = 5) x 2] |
4 bis 13 |
Neue Werte der Register 700 bis 704 |
Rückmeldung bei erkanntem Fehler
Ist kein Registerzugriff möglich, wird ein „Erkannter Fehler“-Wert über DP V1 zurückgegeben.
Die Antwort am DP bei einem erkannten Fehler hat die folgenden ersten vier Bytes:
Byte |
Wert |
Bedeutung |
---|---|---|
0 |
0xDE/ 0xDF |
für DS_Read / DS_Write |
1 |
0x80 |
Hinweis auf DP V1 |
2 |
0xB6 |
„Erkannter Fehler“-Klasse + „Erkannter Fehler“-Code 1 = Zugriff verweigert |
3 |
0xXX |
„Erkannter Fehler“-Code 2, LTMR-spezifisch (siehe nachfolgende Tabelle) |
Nachfolgend ist der LTMR-spezifische Fehlercode 2 aufgeführt:
„Erkannter Fehler“-Code 2 |
Bedeutung |
---|---|
01 |
Interne Stapelanforderung voll |
03 |
Register nicht verwaltet oder Anforderung erfordert Administratorzugriffsrechte |
06 |
Register definiert aber nicht beschrieben |
07 |
Nicht alle Register gefunden |
08 |
Schreiben auf Register nicht zulässig |
10 |
Geschriebener Wert nicht im Bereich des Registers – Wortwert zu hoch |
11 |
Geschriebener Wert nicht im Bereich des Registers – Wortwert zu niedrig |
12 |
Geschriebener Wert nicht im Bereich des Registers (MSB-Wert zu hoch) |
13 |
Geschriebener Wert nicht im Bereich des Registers (MSB-Wert zu niedrig) |
14 |
Geschriebener Wert nicht im Bereich des Registers (LSB-Wert zu hoch) |
15 |
Geschriebener Wert nicht im Bereich des Registers (LSB-Wert zu niedrig) |
16 |
Geschriebener Wert ist kein gültiger Wert. |
20 |
Zurückweisung durch Modul, sendet „Erkannter Fehler“-Block zurück |
255 |
Interner Fehler erkannt |
Die Darstellung eines „Erkannter Fehler“-Codes und einer „Erkannter Fehler“-Klasse in der Anwenderlogik hängt von der Primärimplementierung (z. B. der SPS) ab.
Der Mechanismus greift nur auf Parameterblöcke ab einem dedizierten Parameter (MB-Adresse) zu. Das heißt, dass auch auf nicht verwendete Parameter (MB-Adressen) zugegriffen wird. Der aus diesen Parametern gelesene Datenwert ist dann 0x00. Beim Schreiben ist es jedoch erforderlich, den Wert 0x00 in diese Parameter zu schreiben. Andernfalls wird der komplette Schreibzugriff abgelehnt.
Interne TeSys T-Register
Weitere Informationen zu den internen TeSys T-Registern finden Sie in den Communication Variables tables.