Step7: FB126, Profinet Diagnostics

userxyz

Member
Join Date
May 2002
Location
any
Posts
2,768
Hi,

I use the FB126 in one of my projects to be able to visualise slave status on Scada.

The questions I have:

Isn't there a better method then FB126 for slave diagnostics on profinet ? This block is very poor. In the instance of FB126 I can find mij Master network status and the slave status can be found in the online generated DB200.
Is this the only thing this FB can do, show slavediag, but not wich card and so on ??

Kind regards,
C
 
Last edited:
I believe it can activate/deactivate devices as well, but it really just does network diagnostics, as opposed to HW diagnostics.

Report System Error or System Diagnostics (Portal) can do the HW alarms, but I don't know how many 3rd party SCADA systems support controller based alarms.
 
FB126 is not well documented. You can reverse engineer enable/disable functions from FB126 Wincc example.

FB126 is documented on link, but not for all functions what it supports.

https://support.industry.siemens.com/cs/document/98278878/diagnostic-package-pniodiag-for-diagnostic-evaluation-for-profibus-dp-and-profinet-io-%28step-7-v5-x%29?dti=0&lc=en-WW

basic idea is, that you have on DB-block every second word showing slave status. DBW address, which shows slave status depends of communication channel and slave number of station.
For station card errors you need to look different commands.

You can do same than FB126 with OB error blocks, but it isn't easy either if you have several different stations.
 
Last edited:
Code

I made something like this to simplify some code:

Code:
FUNCTION "PNIO_DIAG" : VOID
TITLE =Analyse PNIO Data PROFINET
AUTHOR : Gerry
VERSION : 0.1

BEGIN
NETWORK
TITLE =PROFINET Network Status

      OPN   #iDBnr_Instance_FB126; 
      LAR1  P##System_Bits; 
      L     DBW 1642; 
      CAW   ; 
      T     W [AR1,P#0.0]; 

      A     #System_Bits.Bit_0_OK; 
      =     #PN_SLAVES_OK; 

NETWORK
TITLE =PROFINET Slave 1 Status 

      L     #PN_Slv_Adr_1; 
      L     0; 
      ==I   ; 
      JC    nex1; 

      OPN   #DBnr_GlobalDB; 
      L     #PN_Slv_Adr_1; 
      L     1; 
      -I    ; 
      L     2; 
      *I    ; 
      SLD   3; 
      LAR1  ; 
      L     DBW [AR1,P#0.0]; 
      CAW   ; 
      LAR1  P##Slave_Bits; 
      T     W [AR1,P#0.0]; 

      A     #Slave_Bits.Bit_0_OK; 
      =     #PN_SLV_1_OK; 

nex1: NOP   0; 

NETWORK
TITLE =PROFINET Slave 2 Status 

      L     #PN_Slv_Adr_2; 
      L     0; 
      ==I   ; 
      JC    nex2; 

      OPN   #DBnr_GlobalDB; 
      L     #PN_Slv_Adr_2; 
      L     1; 
      -I    ; 
      L     2; 
      *I    ; 
      SLD   3; 
      LAR1  ; 
      L     DBW [AR1,P#0.0]; 
      CAW   ; 
      LAR1  P##Slave_Bits; 
      T     W [AR1,P#0.0]; 

      A     #Slave_Bits.Bit_0_OK; 
      =     #PN_SLV_2_OK; 

nex2: NOP   0; 

NETWORK
TITLE =PROFINET Slave 3 Status 

      L     #PN_Slv_Adr_3; 
      L     0; 
      ==I   ; 
      JC    nex3; 

      OPN   #DBnr_GlobalDB; 
      L     #PN_Slv_Adr_3; 
      L     1; 
      -I    ; 
      L     2; 
      *I    ; 
      SLD   3; 
      LAR1  ; 
      L     DBW [AR1,P#0.0]; 
      CAW   ; 
      LAR1  P##Slave_Bits; 
      T     W [AR1,P#0.0]; 

      A     #Slave_Bits.Bit_0_OK; 
      =     #PN_SLV_3_OK; 

nex3: NOP   0; 

NETWORK
TITLE =PROFINET Slave 4 Status 

      L     #PN_Slv_Adr_4; 
      L     0; 
      ==I   ; 
      JC    nex4; 

      OPN   #DBnr_GlobalDB; 
      L     #PN_Slv_Adr_4; 
      L     1; 
      -I    ; 
      L     2; 
      *I    ; 
      SLD   3; 
      LAR1  ; 
      L     DBW [AR1,P#0.0]; 
      CAW   ; 
      LAR1  P##Slave_Bits; 
      T     W [AR1,P#0.0]; 

      A     #Slave_Bits.Bit_0_OK; 
      =     #PN_SLV_4_OK; 

nex4: NOP   0; 

NETWORK
TITLE =PROFINET Slave 5 Status 

      L     #PN_Slv_Adr_5; 
      L     0; 
      ==I   ; 
      JC    nex5; 

      OPN   #DBnr_GlobalDB; 
      L     #PN_Slv_Adr_5; 
      L     1; 
      -I    ; 
      L     2; 
      *I    ; 
      SLD   3; 
      LAR1  ; 
      L     DBW [AR1,P#0.0]; 
      CAW   ; 
      LAR1  P##Slave_Bits; 
      T     W [AR1,P#0.0]; 

      A     #Slave_Bits.Bit_0_OK; 
      =     #PN_SLV_5_OK; 

nex5: NOP   0; 

NETWORK
TITLE =PROFIBUS Network Status

      OPN   #iDBnr_Instance_FB126; 
      LAR1  P##System_Bits; 
      L     DBW 1578; 
      CAW   ; 
      T     W [AR1,P#0.0]; 

      A     #System_Bits.Bit_0_OK; 
      =     #DP_SLAVES_OK; 

NETWORK
TITLE =PROFIBUS Slave 1 Status 

      L     #DP_Slv_Adr_1; 
      L     0; 
      ==I   ; 
      JC    nex6; 

      OPN   #DBnr_GlobalDB; 
      L     #DP_Slv_Adr_1; 
      L     1; 
      -I    ; 
      L     2; 
      *I    ; 
      SLD   3; 
      LAR1  ; 
      L     DBW [AR1,P#0.0]; 
      CAW   ; 
      LAR1  P##Slave_Bits; 
      T     W [AR1,P#0.0]; 

      A     #Slave_Bits.Bit_0_OK; 
      =     #DP_SLV_1_OK; 

nex6: NOP   0; 

NETWORK
TITLE =PROFIBUS Slave 2 Status 

      L     #DP_Slv_Adr_2; 
      L     0; 
      ==I   ; 
      JC    nex7; 

      OPN   #DBnr_GlobalDB; 
      L     #DP_Slv_Adr_2; 
      L     1; 
      -I    ; 
      L     2; 
      *I    ; 
      SLD   3; 
      LAR1  ; 
      L     DBW [AR1,P#0.0]; 
      CAW   ; 
      LAR1  P##Slave_Bits; 
      T     W [AR1,P#0.0]; 

      A     #Slave_Bits.Bit_0_OK; 
      =     #DP_SLV_2_OK; 

nex7: NOP   0; 

NETWORK
TITLE =PROFIBUS Slave 3 Status 

      L     #DP_Slv_Adr_3; 
      L     0; 
      ==I   ; 
      JC    nex8; 

      OPN   #DBnr_GlobalDB; 
      L     #DP_Slv_Adr_3; 
      L     1; 
      -I    ; 
      L     2; 
      *I    ; 
      SLD   3; 
      LAR1  ; 
      L     DBW [AR1,P#0.0]; 
      CAW   ; 
      LAR1  P##Slave_Bits; 
      T     W [AR1,P#0.0]; 

      A     #Slave_Bits.Bit_0_OK; 
      =     #DP_SLV_3_OK; 

nex8: NOP   0; 

NETWORK
TITLE =PROFIBUS Slave 4 Status 

      L     #DP_Slv_Adr_4; 
      L     0; 
      ==I   ; 
      JC    nex9; 

      OPN   #DBnr_GlobalDB; 
      L     #DP_Slv_Adr_4; 
      L     1; 
      -I    ; 
      L     2; 
      *I    ; 
      SLD   3; 
      LAR1  ; 
      L     DBW [AR1,P#0.0]; 
      CAW   ; 
      LAR1  P##Slave_Bits; 
      T     W [AR1,P#0.0]; 

      A     #Slave_Bits.Bit_0_OK; 
      =     #DP_SLV_4_OK; 

nex9: NOP   0; 

NETWORK
TITLE =PROFIBUS Slave 5 Status 

      L     #DP_Slv_Adr_5; 
      L     0; 
      ==I   ; 
      JC    ne10; 

      OPN   #DBnr_GlobalDB; 
      L     #DP_Slv_Adr_1; 
      L     1; 
      -I    ; 
      L     2; 
      *I    ; 
      SLD   3; 
      LAR1  ; 
      L     DBW [AR1,P#0.0]; 
      CAW   ; 
      LAR1  P##Slave_Bits; 
      T     W [AR1,P#0.0]; 

      A     #Slave_Bits.Bit_0_OK; 
      =     #DP_SLV_5_OK; 

ne10: NOP   0; 

NETWORK
TITLE =PROFIBUS Slave 6 Status 

      L     #DP_Slv_Adr_6; 
      L     0; 
      ==I   ; 
      JC    ne11; 

      OPN   #DBnr_GlobalDB; 
      L     #DP_Slv_Adr_6; 
      L     1; 
      -I    ; 
      L     2; 
      *I    ; 
      SLD   3; 
      LAR1  ; 
      L     DBW [AR1,P#0.0]; 
      CAW   ; 
      LAR1  P##Slave_Bits; 
      T     W [AR1,P#0.0]; 

      A     #Slave_Bits.Bit_0_OK; 
      =     #DP_SLV_6_OK; 

ne11: NOP   0; 

NETWORK
TITLE =PROFIBUS Slave 7 Status 

      L     #DP_Slv_Adr_7; 
      L     0; 
      ==I   ; 
      JC    ne12; 

      OPN   #DBnr_GlobalDB; 
      L     #DP_Slv_Adr_7; 
      L     1; 
      -I    ; 
      L     2; 
      *I    ; 
      SLD   3; 
      LAR1  ; 
      L     DBW [AR1,P#0.0]; 
      CAW   ; 
      LAR1  P##Slave_Bits; 
      T     W [AR1,P#0.0]; 

      A     #Slave_Bits.Bit_0_OK; 
      =     #DP_SLV_7_OK; 

ne12: NOP   0; 

NETWORK
TITLE =PROFIBUS Slave 8 Status 

      L     #DP_Slv_Adr_8; 
      L     0; 
      ==I   ; 
      JC    ne13; 

      OPN   #DBnr_GlobalDB; 
      L     #DP_Slv_Adr_8; 
      L     1; 
      -I    ; 
      L     2; 
      *I    ; 
      SLD   3; 
      LAR1  ; 
      L     DBW [AR1,P#0.0]; 
      CAW   ; 
      LAR1  P##Slave_Bits; 
      T     W [AR1,P#0.0]; 

      A     #Slave_Bits.Bit_0_OK; 
      =     #DP_SLV_8_OK; 

ne13: NOP   0; 

NETWORK
TITLE =PROFIBUS Slave 9 Status 

      L     #DP_Slv_Adr_9; 
      L     0; 
      ==I   ; 
      JC    ne14; 

      OPN   #DBnr_GlobalDB; 
      L     #DP_Slv_Adr_9; 
      L     1; 
      -I    ; 
      L     2; 
      *I    ; 
      SLD   3; 
      LAR1  ; 
      L     DBW [AR1,P#0.0]; 
      CAW   ; 
      LAR1  P##Slave_Bits; 
      T     W [AR1,P#0.0]; 

      A     #Slave_Bits.Bit_0_OK; 
      =     #DP_SLV_9_OK; 

ne14: NOP   0; 

NETWORK
TITLE =PROFIBUS Slave 10 Status 

      L     #DP_Slv_Adr_10; 
      L     0; 
      ==I   ; 
      JC    ne15; 

      OPN   #DBnr_GlobalDB; 
      L     #DP_Slv_Adr_10; 
      L     1; 
      -I    ; 
      L     2; 
      *I    ; 
      SLD   3; 
      LAR1  ; 
      L     DBW [AR1,P#0.0]; 
      CAW   ; 
      LAR1  P##Slave_Bits; 
      T     W [AR1,P#0.0]; 

      A     #Slave_Bits.Bit_0_OK; 
      =     #DP_SLV_10_OK; 

ne15: NOP   0; 

NETWORK
TITLE =PROFIBUS Slave 11 Status 

      L     #DP_Slv_Adr_11; 
      L     0; 
      ==I   ; 
      JC    ne16; 

      OPN   #DBnr_GlobalDB; 
      L     #DP_Slv_Adr_11; 
      L     1; 
      -I    ; 
      L     2; 
      *I    ; 
      SLD   3; 
      LAR1  ; 
      L     DBW [AR1,P#0.0]; 
      CAW   ; 
      LAR1  P##Slave_Bits; 
      T     W [AR1,P#0.0]; 

      A     #Slave_Bits.Bit_0_OK; 
      =     #DP_SLV_11_OK; 

ne16: NOP   0; 

NETWORK
TITLE =PROFIBUS Slave 12 Status 

      L     #DP_Slv_Adr_12; 
      L     0; 
      ==I   ; 
      JC    ne17; 

      OPN   #DBnr_GlobalDB; 
      L     #DP_Slv_Adr_12; 
      L     1; 
      -I    ; 
      L     2; 
      *I    ; 
      SLD   3; 
      LAR1  ; 
      L     DBW [AR1,P#0.0]; 
      CAW   ; 
      LAR1  P##Slave_Bits; 
      T     W [AR1,P#0.0]; 

      A     #Slave_Bits.Bit_0_OK; 
      =     #DP_SLV_12_OK; 

ne17: NOP   0; 

NETWORK
TITLE =PROFIBUS Slave 13 Status 

      L     #DP_Slv_Adr_13; 
      L     0; 
      ==I   ; 
      JC    ne18; 

      OPN   #DBnr_GlobalDB; 
      L     #DP_Slv_Adr_13; 
      L     1; 
      -I    ; 
      L     2; 
      *I    ; 
      SLD   3; 
      LAR1  ; 
      L     DBW [AR1,P#0.0]; 
      CAW   ; 
      LAR1  P##Slave_Bits; 
      T     W [AR1,P#0.0]; 

      A     #Slave_Bits.Bit_0_OK; 
      =     #DP_SLV_13_OK; 

ne18: NOP   0; 

END_FUNCTION
 
Profinet can be channel 0,1 or 2 depending if you have profibus ports on CPU or only profinet port.

Profinet slave 1 have db200.dbw0 or db200.dbw512 address on diag buffer. So you can hard code addresses
Or if you mean that profinet slave1 = profinet device 1, which can have different slave addresses depending of project. Then it is useful to count dbw address on FC-call and call FC-block with different parameters.
 

Similar Topics

This is probably one for Jesper or Daniel. I want to use FB126 to replace the FC125 that I used in an old project which is being used as the basis...
Replies
8
Views
10,744
Hello Inside a FB, I´m trying to transfer a string from a DB to a IN_OUT var that was define as a UDT. The problem is that i can´t determine the...
Replies
4
Views
84
Hi all, I am trying to convert RSLogix 5000 program to Step7. I need to bit shift left my array of double integers for tracking the product on...
Replies
2
Views
504
I have a word in some DB which I want to load to AR1 and use as a pointer. In order to do this I need to write L DBxy.DBW xy SLD 3 LAR1 I...
Replies
3
Views
507
Hi, is there any way to export all contents of Block folder (OBs, FBs, DBs, etc) to a text file? I know it is possible to export symbol table, but...
Replies
5
Views
1,198
Back
Top Bottom