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