Step 7 SFC51 RDSYSST Zustandsinfo eines Profibus CPs auslesen

vollmi

Level-3
Beiträge
5.433
Reaktionspunkte
1.409
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi

Ich habe in einem Zentralrack einer S7 CPU einen 342-5 CP für Profibus.
Jetzt wollte ich dafür meinen Auswertebaustein für Zustandsinfos den ich für die Integrierte PB/DP und PB/PN Schnittstelle benutze erweitern. Dazu wollte ich denselben SFC51 Aufruf verwenden wie zuvor nur jetzt halt für die CP Infos.

Für die Integrierte Schnittstelle rufe ich ihn ja so auf.
Code:
      CALL  "RDSYSST"       REQ       :="Sekunden"
       SZL_ID    :=W#16#694             //ID Status PB-IO 
       INDEX     :=W#16#1               //Nr. PROFIBUS-IO System
       RET_VAL   :=#RetVal
       BUSY      :=#busy
       SZL_HEADER:=#SZL_HEADER
       DR        :=#PB_Status

SZL_ID und Index hänge ich am Baustein normal von aussen an. Je nach Infos die ich haben will.
SZL_Header ist ein Struct angehängt wo ab dem zweiten byte ein Array of Bool losgeht welches dann einfach meine Zustandsinfos der Profibusteilnehmer enthält.
U #PB_Status.DEVICE_STATUS[10] // Profibusteilnehmer mit PB ID 10 OK/NOK
Alles schön und gut.

Nur für den CP krieg ich das nicht hin. Da müsste ich ja eigentlich nicht die Profibus-IO System abfragen (Hätte Nr180, die CP Adresse ist 1000) sondern eigentlich die Infos auswerten die man aus der Spezialdiagnose auch manuel sehen kann. Also ob die Projektierten Stationen auch vorhanden und ok sind.

Aber wie macht man das da und wie muss die SCL ID die Structur vom SZL_Header ausehen etc. Das ich die Infos auch wieder in nem Array habe?

Ich weiss dass das mit DP_Diag geht aber ich wollts gerne mit dem SFC15 hinkriegen und auch begreifen wie man solche Infos überhaupt erruiert.

mfG René
 
Hallo René,

wenn es dir um ProfiBus geht dann sollte die SZL-ID 692 sein (und nicht 694 - das wäre für PN).
Du schreibst aber von einem CP - also wäre dann die SZL-ID 4692.
Probier das doch bitte mal aus ...
Ansonsten nehme ich an, dass du ja auf Basis dessen arbeitest was hier mal als Pendant zum FB125/126 entstanden ist.

Gruß
Larry
 
Ansonsten nehme ich an, dass du ja auf Basis dessen arbeitest was hier mal als Pendant zum FB125/126 entstanden ist.

Dieses Pendant von dir habe ich mir eben mal angeschaut. Allerdings ist der doch recht mächtig. Ich hatte mir erhofft das man mit dem SFC51 irgendwie an die CP Daten selber rankommt, der Hat ja die diagnoseinfos schon für die Spezialdiagnose. Wenn ich dadrauf mit einem SFC51 anstoss drankäme wäre das interessant.

mfG René
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Beim CP342-5 wird in der CPU keine SZL über den Zustand des DP-Systems geführt (oder ist nicht abfragbar), es muß direkt der CP abgefragt werden. Dafür wird nicht der SFC51 RDSYSST verwendet sondern SFC59 RD_REC.

Warum willst Du die FC DP_DIAG nicht benutzen? Die kapselt die Kommunikation mit dem CP und sorgt für die nötigen Handshakes beim Übertragen der Datensätze. Außerdem weiß ich nicht, wo die Diagnosedatensätze >= 128 für den CP342-5 dokumentiert sind.

Ich benutze den FC3 DP_DIAG. Mit Diagnosetyp 0 (Stationsliste anfordern) und 2 (Einzelstatus anfordern).

Harald
 
Beim CP342-5 wird in der CPU keine SZL über den Zustand des DP-Systems geführt (oder ist nicht abfragbar), es muß direkt der CP abgefragt werden. Dafür wird nicht der SFC51 RDSYSST verwendet sondern SFC59 RD_REC.

Warum willst Du die FC DP_DIAG nicht benutzen? Die kapselt die Kommunikation mit dem CP und sorgt für die nötigen Handshakes beim Übertragen der Datensätze. Außerdem weiß ich nicht, wo die Diagnosedatensätze >= 128 für den CP342-5 dokumentiert sind.

Ich benutze den FC3 DP_DIAG. Mit Diagnosetyp 0 (Stationsliste anfordern) und 2 (Einzelstatus anfordern).

Weil ich das schonmal gemacht hab und ich damals den Baustein zusammengestellt habe.

Code:
DATA_BLOCK "IO Sensorik Diagnose"TITLE =
AUTHOR : VoR
VERSION : 0.1




  STRUCT 	
   slave_008_nicht_ok : BOOL ;	//Profibus-DP Slave 008 ausgefallen
   slave_007_nicht_ok : BOOL ;	//Profibus-DP Slave 007 ausgefallen
   slave_006_nicht_ok : BOOL ;	//Profibus-DP Slave 006 ausgefallen
   slave_005_nicht_ok : BOOL ;	//Profibus-DP Slave 005 ausgefallen
   slave_004_nicht_ok : BOOL ;	//Profibus-DP Slave 004 ausgefallen
   slave_003_nicht_ok : BOOL ;	//Profibus-DP Slave 003 ausgefallen
   slave_002_nicht_ok : BOOL ;	//Profibus-DP Slave 002 ausgefallen
   slave_001_nicht_ok : BOOL ;	//Profibus-DP Slave 001 ausgefallen
   slave_016_nicht_ok : BOOL ;	//Profibus-DP Slave 016 ausgefallen
   slave_015_nicht_ok : BOOL ;	//Profibus-DP Slave 015 ausgefallen
   slave_014_nicht_ok : BOOL ;	//Profibus-DP Slave 014 ausgefallen
   slave_013_nicht_ok : BOOL ;	//Profibus-DP Slave 013 ausgefallen
   slave_012_nicht_ok : BOOL ;	//Profibus-DP Slave 012 ausgefallen
   slave_011_nicht_ok : BOOL ;	//Profibus-DP Slave 011 ausgefallen
   slave_010_nicht_ok : BOOL ;	//Profibus-DP Slave 010 ausgefallen
   slave_009_nicht_ok : BOOL ;	//Profibus-DP Slave 009 ausgefallen
   slave_024_nicht_ok : BOOL ;	//Profibus-DP Slave 024 ausgefallen
   slave_023_nicht_ok : BOOL ;	//Profibus-DP Slave 023 ausgefallen
   slave_022_nicht_ok : BOOL ;	//Profibus-DP Slave 022 ausgefallen
   slave_021_nicht_ok : BOOL ;	//Profibus-DP Slave 021 ausgefallen
   slave_020_nicht_ok : BOOL ;	//Profibus-DP Slave 020 ausgefallen

Ich hätte das gerne als Array abgelegt aber dazu muss ja erstmal pro byte die Bits umsortiert werden und dann noch ein Byteswap pro wort. Und das für jede Statusinfo die man haben will über die ganze Länge.

Oder sehe ich da was falsch?
SFC51 hat mir ja für die interne schnittstelle die slaves grad in einer reihe supereinfach präsentiert, grad schön in nem array.

mfG René
 
Wenn du eine Steuerung mit Ethernet hast, kannst du auch mit Wireshark mithören welche SZL-IDs Step7 so abfragt, wenn du die Diagnose des CPs aufrufst. Denn alle dort angezeigten Werte werden rein über SZL abgefragt.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich könnte mir vorstellen, daß Step7 zur CP-Diagnose nicht mit der CPU sondern mit dem CP kommuniziert.


@vollmi
DP_DIAG:
- die Stationsliste (DTYP 0) kommt als Bit-Array in 16 Bytes (LIST_SLAVES_NOT_PRESENT)
- die Einzeldiagnose (DTYP 2) liefert 6 Byte (SLAVE_STATIONSTATUS), darin im ersten Byte .0: StationNonExistent / .1: StationNotReady

Ich werte von DP_RECV den DPSTATUS aus:
Bit .0 muß 0 sein = CP im Masterbetrieb
Bit .1 = 0: alle Slaves vorhanden / = 1: irgendein Slave ist problematisch, Stationsliste lesen ist sinnvoll

Meine Bit-Liste gestörter Slaves:
Die Stationsliste liefert mir direkt die nicht vorhandenen Slaves als Bitfeld. Von der Einzeldiagnose nehme ich noch das Bit .1 StationNotReady und setze damit ggf. zusätzlich das Bit in der Liste der nicht vorhandenen Slaves. (mache ich per Maskierbit SRD(DW#16#80000000, #DpAdresse) und verodern)
Ich meine, die Stationsliste entspricht dem Diagnosedatensatz 128 (SFC59). Die Liste entspricht Deinem Struct, allerdings um 1 Bit verschoben. Belegung des Bitfelds siehe:

Programmbeispiel zur Stationsliste: PROFIBUS DP Diagnosebaustein für CP342-5 (Master)
Programmbeispiel zur Einzeldiagnose: Welche Diagnosemeldungen des DP-Slaves können Sie an einem CP342-5 als DP-Master auslesen?

Harald
 
Hallo René,

wenn es dir um ProfiBus geht dann sollte die SZL-ID 692 sein (und nicht 694 - das wäre für PN).

Das finde ich jetzt interessant. Bei meiner 315PN/DP cpu (bei allen 20) funktioniert SZL-ID 692 für Profibus nicht. Meldet kein Fehler aber auch kein Ausfall einer Profibusstation.

Mit SZL-ID 694 wird der Profibusstationsausfall einwandfrei gemeldet. Was soll jetzt der Scheiss?
694 ist nach Deklaration ganz klar PN und 692 ganz klar PB.

Mit 694 kann ich natürlich auch kein 0..128 Bit langes Ergebnisarray anhängen. sondern muss das nehmen wie für PN.

mfG René
 
Das finde ich jetzt interessant. Bei meiner 315PN/DP cpu (bei allen 20) funktioniert SZL-ID 692 für Profibus nicht. Meldet kein Fehler aber auch kein Ausfall einer Profibusstation.

Mit SZL-ID 694 wird der Profibusstationsausfall einwandfrei gemeldet. Was soll jetzt der Scheiss?
694 ist nach Deklaration ganz klar PN und 692 ganz klar PB.

Mit 694 kann ich natürlich auch kein 0..128 Bit langes Ergebnisarray anhängen. sondern muss das nehmen wie für PN.

mfG René

Siemens verwendet intern in der Basic Library noch ganz andere Datensätze.
 

Für die Diagnose des Zustands einer Station PN oder DP wird in der Regel der W#16#0C96 verwendet. Für den Zustand einer Baugruppe im zentralen Aufbau ohne Diagnosefähigkeit W#16#0C91.
Für die Diagnose von Modulen in einem Rack W#16#4292 oder W#16#0292. Für die Diagnose von Racks in einem Subnet zuerst W#16#0294 und dann einzeln je Rack noch W#16#0C96.
 
Zuletzt bearbeitet:
Zurück
Oben