TwinCAT-Beispiel für die Diagnose mit der Feldbuskarte FC310x
Über das Bit DiagnoseStation11 wird die Diagnose der Station 11 gemeldet. Die Diagnoseinformationen werden mit dem ADS-Baustein ausgelesen und in das Array strDiagnose kopiert. Dort kann die weitere Bearbeitung erfolgen.
NETID NetID der FC310x
Karte
Port
Diagnose Port Fest 200
IDXGRP Slave-Adresse im High-Wort und die
Konstante 0xF181 im Low-Wort
IDXOFF immer "0", gesamte
Diagnose auslesen
LEN 276
Byte
Aufbau der Diagnosedaten
Offset |
Beschreibung |
---|---|
0 |
Receive-Error-Counter (WORD): Anzahl der fehlerhaften Telegramme bei der Kommunikation mit diesem Slave |
2 |
ab FC310x, Version 1.11: |
20 |
NoAnswer-Counter (DWORD): Anzahl der Telegramme bei der Kommunikation mit diesem Slave, auf die nicht geantwortet und bei denen kein Repeat durchgeführt wurde. Wenn ein Slave das erste Mal nicht antwortet, wird bis zu MaxRetryLimit mal das Telegramm wiederholt, wenn er auch dann nicht geantwortet hat, wird beim nächsten Mal keine Wiederholung mehr durchgeführt. |
24-31 |
reserviert |
32-37 |
Profibus-Norm-Diagnose |
38-275 |
Profibus-Norm-Extended-Diagnose (siehe Dokumentation des Herstellers) |
Programmbeispiel
VAR
DiagnoseStation11 AT %IX100.0:BOOL;
strDiagnose : ARRAY[0..275] OF BYTE;
fbADSREAD : ADSREAD;
k: INT;
END_VAR
CASE k OF
0: IF DiagnoseStation11 THEN fbADSREAD( NETID:= '172.16.3.106.2.1',
PORT:=200,
IDXGRP:=16#BF181,
IDXOFFS:=16#0,
LEN:=276,
DESTADDR:=ADR(strDiagnose),
READ:= TRUE,
TMOUT:= t#10s, );
k:=k+1;
END_IF
1: fbADSREAD(READ:= FALSE);
IF NOT fbADSREAD.busy THEN
k:=0;
END_IF
END_CASE