Pnoz Multi m B1 - Diagnosedaten...

Nitro-Haiza

Level-2
Beiträge
111
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich habe eine Pnoz Multi m B1 und eine CPU 314C-2 PN/DP über Profinet verbunden. In der PDF habe ich das Thema Diagnosedaten gefunden. Wie komme ich an diese Daten ran? Die Programmierung läuft über Step 7 Classic.

Danke.
 

Anhänge

  • Screenshot 2025-12-22 222141.png
    Screenshot 2025-12-22 222141.png
    175 KB · Aufrufe: 18
  • Screenshot 2025-12-22 222119.png
    Screenshot 2025-12-22 222119.png
    135,6 KB · Aufrufe: 18
  • Screenshot 2025-12-22 222813.png
    Screenshot 2025-12-22 222813.png
    219,5 KB · Aufrufe: 17
Hallo,

hier ist die aktuellste Kommunikationsanleitung v13: https://www.pilz.com/download/open/OM_CI_PNOZmulti_2_1002971-DE-13.pdf

Es gibt 2 Arten von Diagnose.
Dein Screenshot geht auf die Diagnosedaten auf Feldbusebene ein. Dies musst du über deine Siemens abfragen, ich glaub OB82 sollte es sein.

Ansonsten gibt es noch die Programm-Diagnosedaten (Teilbetätigt, Rückführkreisfehler,..), dies geht über die Diagnoseworte:

Die Diagnoseworte sind in Kapitel 8.4 (Seite 147) beschrieben. Diese orientieren sich an den Element-IDs, welche im PNOZmulti Configurator den Elementen aktiviert wurden.
Die Adressierung geschieht anhand der Tabellen&Segmente, bei dir E530..544 und A530..531.
Du frägst in A530 die Tabelle 70 und in A531 das Segment 0 vom PNOZmulti an.
Dann bekommst du auf E530 und E531 dies bestätigt und ab E532 die Nutzdaten, in diesem Fall 12 Byte mit den Diagnosedaten der Element-IDs 1..6

Der Techsupport von Pilz hat hier ein Beispielprojekt, einfach nachfragen.
Dies frägt diese Tabellen&Segmente ab und schreibt diese in einen DB nach folgendem Prinzip (aus TIAv20):

Code:
// Tab 70 - Seg 0 - Diagnostic Words - Element-ID 1..6
IF ("00_PNOZ_Data".Telegram.In.Table = 70)
    AND ("00_PNOZ_Data".Telegram.In.Segment = 0)
THEN
    #iCounterElementID := 1;
   
    //assemble the data out of two byte
    #stTempWord.Byte_0 := "00_PNOZ_Data".Telegram.In.Payload[0];
    #stTempWord.Byte_1 := "00_PNOZ_Data".Telegram.In.Payload[1];
    "00_PNOZ_Data".DiagnosticWords.ElementID[#iCounterElementID] := #wTempWord;
   
    #stTempWord.Byte_0 := "00_PNOZ_Data".Telegram.In.Payload[2];
    #stTempWord.Byte_1 := "00_PNOZ_Data".Telegram.In.Payload[3];
    "00_PNOZ_Data".DiagnosticWords.ElementID[#iCounterElementID + 1] := #wTempWord;
   
    #stTempWord.Byte_0 := "00_PNOZ_Data".Telegram.In.Payload[4];
    #stTempWord.Byte_1 := "00_PNOZ_Data".Telegram.In.Payload[5];
    "00_PNOZ_Data".DiagnosticWords.ElementID[#iCounterElementID + 2] := #wTempWord;
   
    #stTempWord.Byte_0 := "00_PNOZ_Data".Telegram.In.Payload[6];
    #stTempWord.Byte_1 := "00_PNOZ_Data".Telegram.In.Payload[7];
    "00_PNOZ_Data".DiagnosticWords.ElementID[#iCounterElementID + 3] := #wTempWord;
   
    #stTempWord.Byte_0 := "00_PNOZ_Data".Telegram.In.Payload[8];
    #stTempWord.Byte_1 := "00_PNOZ_Data".Telegram.In.Payload[9];
    "00_PNOZ_Data".DiagnosticWords.ElementID[#iCounterElementID + 4] := #wTempWord;
   
    #stTempWord.Byte_0 := "00_PNOZ_Data".Telegram.In.Payload[10];
    #stTempWord.Byte_1 := "00_PNOZ_Data".Telegram.In.Payload[11];
    "00_PNOZ_Data".DiagnosticWords.ElementID[#iCounterElementID + 5] := #wTempWord;
   
    //Next table/segment
    IF ("00_PNOZ_Data".Config.Number_DiagWords >= 7) THEN    //if more diagWords are configured
        "00_PNOZ_Data".Telegram.Out.Table := 70;
        "00_PNOZ_Data".Telegram.Out.Segment := 1;
    ELSE
        "00_PNOZ_Data".Telegram.Out.Table := 0;
        "00_PNOZ_Data".Telegram.Out.Segment := 0;
        "00_PNOZ_Data".DiagnosticWords.Retrieved := TRUE;
        #Completed := TRUE;
        #InProcess := FALSE;
        #Start := FALSE;
        RETURN;
    END_IF;
END_IF;


Grüße
Raphael
 
Zurück
Oben