TwinCAT - Example for Diagnostics with the FC310x Fieldbus Card
The DiagnoseStation11 bit signals diagnosis for station 11. The diagnostic information is read with the ADS block, and copied into the strDiagnose array. Further processing can be done there.
NETID       NetID of the FC310x
card
Port           
Diagnostic port fixed 200
IDXGRP    Slave address in the high word, and the
constant 0xF181 in the low word
IDXOFF     always "0", read entire
diagnosis
LEN           276
bytes
Structure of the diagnostic data
| Offset | Description | 
|---|---|
| 0 | Receive Error Counter (WORD): The number of faulty telegrams occurring while communicating with this slave. | 
| 2 | As from FC310x, version 1.11: | 
| 20 | NoAnswer Counter (DWORD): The number of telegrams occurring during communication with this slave that received no answer and which have not been repeated. The first time that a slave fails to answer, the telegram is repeated up to MaxRetryLimit times, but if it does not answer even then, further telegrams are not repeated. | 
| 24-31 | reserved | 
| 32-37 | Profibus standard diagnostics | 
| 38-275 | Profibus standard extended diagnostics (see manufacturer's documentation) | 
Programming Example
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