TIA Auswertung OB86

spirit

Level-1
Beiträge
961
Reaktionspunkte
23
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Ihr,

ich möchte gerne auswerten, welcher PN-Teilnehmer (Stationsnummer) ausgefallen ist ...


Dazu steht in der Beschreibung des OB86:

OB86.JPG


Nun stellt sich mir die Frage, wie ich das auslesen kann?

Mein Ansatz:

L ...
T #Adresse / INT


Nur, was kommt hinter das LADEN :confused:

Lieben Dank!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Bei Profibus wäre es ja das LB11, in dem die Adressen der ausgefallenen Stationen stehen.

Aber bei Profinet?

Welche Variable muss ich denn hier auswerten, um die Stationsnummer des ausgefallenen Profinet-Teilnehmers zu erhalten?
 
Noch eine Frage im Zusammenhang mit Profinet-Teilnehmern:

Warum wird mir denn vom Display keine Gerätenummer angezeigt?

Unbenannt.JPG
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Noch eine "doofe" Frage: Wo finde ich denn im TIA überhaupt die Stationsnummer des jeweiligen Profinet-Teilnehmers?

Unter Gerätesicht / Eigenschaften / Allgemein / Ethernet-Adressen ... ganz unten


Für die weitere Auswertung ist wohl der CPU-Typ noch von Bedeutung.
Bei einer 300er konnte ich %LB11 verwenden (kein optimierter Bausteinzugriff), ist halt gelb mit Warnung beim übersetzen, kann man über eine temporäre Variable umgehen.
Bei einer 1500er gehts dann über die HW-Kennung.
 
Da kann ich nur Mutmaßen: Das HMI ist nur dann ein Profinet IO Device wenn es im Control Panel des Gerätes angewählt wird, weiß leider nicht ob hier dann eine Gerätenr. vergeben werden kann.

Danke,

es handelt sich um ein "TP900 Comfort" und ich habe im Gerät "Profinet IO" aktiviert.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das HMI fungiert als IO Controller, deshalb keine Gerätenummer anwählbar.

Möchtest du einen Ausfall registrieren könntest du das über den Bereichszeiger oder eine eigenes Lifebit machen.


LG Sinix
 
Zuletzt bearbeitet:
Code:
      L     #OB86_Z23           //(DWORD)
      L     W#16#7FF            //Maske Bits 0..10
      UW                        //ausmaskieren
      T     #Stationsnummer     //(INT)

      OW                        //#OB86_Z23 aus AKKU2 in AKKU1 holen, POP oder TAK gehen auch
      UW    W#16#7800           //Bits 11..14 ausmaskieren
      SRW   11                  //Bits 11..15 --> Bits 0..4
      T     #IO_System_ID       //(INT)

Statt die Informationen des OB86 auszuwerten und Buchführen kann man auch mit SFC51 die SZL-ID W#16#0x94 lesen. Die liefert ein Bitfeld der Stationen.

Harald
 
@Harald:

Müsste es an den zwei Stellen nicht so heißen:

Code:
      L     #OB86_Z23       //(DWORD)
      L    [COLOR=#ff0000][B] D[/B][/COLOR]W#16#7FF       //Maske Bits 0..10
      UW                    //ausmaskieren
      T     #Stationsnummer //([B][COLOR=#ff0000]D[/COLOR][/B]INT)

...


@Sinix: Ok, weiß noch nicht wie das mit dem Lifebit funktioniert - aber versuche mich da einzulesen ... was für eine Herausforderung für das weibl. Geschlecht! :p

Wobei ja eigentlich die Meldung "Ausfall eines Profinet-Teilnehmers" (hier HMI-Gerät) keinen Sinn macht, da dann die Meldung eh net angezeigt werden kann - ist das weibliche Logik?
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
@Harald:

Müsste es an den zwei Stellen nicht so heißen:
Die Stationsnummer kann nur 0..2047 sein (Bits 0..10 = 11 Bit) --> speichern in eine 16-Bit INT-Variable reicht also.

In AWL wird nicht geprüft, ob man die Datentypen einhält. Die AKKUs sind datentypfrei. Als was die Werte in den AKKUs interpretiert werden bestimmt die Operation. Wie ich die Operanden in die AKKUs bekomme bzw. bereitstelle kann ich machen wie ich will.

"L W#16#7FF" oder "L DW#16#7FF" hat den selben Effekt --> danach steht 16#7FF im AKKU1. Der Befehl "L DW#..." braucht allerdings 2 Byte mehr Programmcode (wegen 32-Bit-Operand statt 16-Bit-Operand). Da ich nur die unteren 16 Bit des 32-Bit-DWORD #OB86_Z23 auswerten will ist 16-Bit-Verarbeitung (Operation "UW"!) nach dem Laden des DWORD ausreichend. Ich lade aber das ganze DWORD #OB86_Z23, weil das so schön symbolisch geht im Gegensatz zu dem sehr unschönen "L LB11".

Wenn Du Dich über W# vs. DW# wunderst, dann solltest Du Dich auch über die Operation "UW" vs. "UD" wundern. :cool:



Ist Dein TP900 so wichtig für die Anlage, daß es auf Ausfall überwacht werden muß (und evtl. an dritter Stelle gemeldet werden muß)?
Ich meine, der Prozess sollte auch (zumindest zeitweise) ohne angeschlossenes HMI laufen können.

Harald
 
@Sinix: Ok, weiß noch nicht wie das mit dem Lifebit funktioniert - aber versuche mich da einzulesen ... was für eine Herausforderung für das weibl. Geschlecht! :p

Wobei ja eigentlich die Meldung "Ausfall eines Profinet-Teilnehmers" (hier HMI-Gerät) keinen Sinn macht, da dann die Meldung eh net angezeigt werden kann - ist das weibliche Logik?

Es macht dann Sinn, wenn durch den Ausfall die Maschine stillgesetzt werden soll.
Je nach Automatisierungsgrad gibt es auch noch weitere HMI, Signallampen oder übergeordnete Systeme die eine Meldung anzeigen könnten.

Lifebit: da hab ich mal ein langsamen Taktmerker genommen und bei Wertänderung im HMI einen Merker invertiert. In der SPS dann den Merker auf einfache Änderung auswerten.

MfG Sinix
 
Es gibt schon ein ganz ohne Programmierung jede Sekunde toggelndes Lebensbit im Bereichszeiger "Koordinierung".
Dieses über eine Flankenerkennung dann negiert auf eine Einschaltverzögerung geben - fertig ist die Panelüberwachung.

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn Du Dich über W# vs. DW# wunderst, dann solltest Du Dich auch über die Operation "UW" vs. "UD" wundern. :cool:

Ist Dein TP900 so wichtig für die Anlage, daß es auf Ausfall überwacht werden muß (und evtl. an dritter Stelle gemeldet werden muß)?
Ich meine, der Prozess sollte auch (zumindest zeitweise) ohne angeschlossenes HMI laufen können.

Harald

Danke Harald!

Ja stimmt, dieses "UW" hatte ich so gar nicht mehr registriert. Aber hat sich ja nun eh erledigt ...

Nein, so wichtig ist es nicht auch das Panel zu überwachen - mich hatte es einfach nur gewundert, warum in der HW-Config keine Gerätenummer vergeben ist. Nennen wir es einfach "weibliche Neugierde"! :p


Habe aber noch einige Verständnisprobleme:


In der OB-Beschreibung steht unter anderem ...

OB86_Z23: Adresse des betroffenen DP-Slaves:
- Bit 0 bis 7: Nr. der DP-Station
- Bit 8 bis 15: DP-Mastersystem-ID
- Bit 16 bis 30: logische Basisadresse bei einemS7-Slave
bzw. Diagnoseadresse bei einem DP-Normslave
- Bit 31: I/O-Kennung

Bei Profinet steht ja die Stationsnummer in Bit 0-10. Was ist nun, wenn ich in einem System Profibus- u. Profinet-Teilnehmer habe. Die nutzen ja dann beide diese Bits; das kann ja aber nicht mehr auseinandergehalten werden, oder?

DP-Station: Bit 0-7
PN-Station: Bit 0-10

Wie kann das gehen? :confused:

Für was genau steht eigentlich dieses "Z23" hinter OB86? Und entspringt es dem "OB86_RACKS_FLTD"?
 
Zuletzt bearbeitet:
Was ist nun, wenn ich in einem System Profibus- u. Profinet-Teilnehmer habe. Die nutzen ja dann beide diese Bits; das kann ja aber nicht mehr auseinandergehalten werden, oder?

DP-Station: Bit 0-7
PN-Station: Bit 0-10

Wie kann das gehen? :confused:

A) zusätzlich auswerten der OB86_FLT_ID
B) bei wenigen Teilnehmern: DP-Adressen <> IO-Gerätenummern

MfG Sinix
 
A) zusätzlich auswerten der OB86_FLT_ID
B) bei wenigen Teilnehmern: DP-Adressen <> IO-Gerätenummern

MfG Sinix

Danke Sinix,

das versuche ich mal ... ;)


Um die Bits 0-7 (Profibus!) auszumaskieren kann ich da also genauso verfahren, wei bei Profinet?

Code:
L     #OB86_Z23
L     W#16#7FF
UW
T     DP_Stationsnummer
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Also irgendwie klappt es noch nicht wie gewünscht ...

Habe jetzt mal für die Profibus-Auswertung Folgendes programmiert:

Code:
//*** Ausfall einer DP-Station
      L     #OB86_FLT_ID
      L     196
      ==I
      =     #Profibus_DP

//*** Stations-Nr aus Bit 0 bis 7 ausmaskieren
      U     #Profibus_DP
      SPB   Stat
      SPA   Ende

Stat: L     #OB86_Z23
      L     W#16#7FF
      UW
      T     #Stationsnummer

Ende: NOP 0


Nach meinem Verständnis dürfte jetzt doch in Stationsnummer nur geschrieben werden, wenn eine Profibus-Station einen Ausfall hat.

Im Test wird jedoch der Wert 259 anstatt 3 (= Profibusadresse) geschrieben; woran könnte das liegen? :confused:
 
@Spirit:
Es gibt doch speziell zu dem Thema einen tollen Thread hier im Forum (initiert von Matze001) - darin sind doch verschiedene Varianten eines Bausteins realisiert (von denen so weit ich weiß jede auch funktioniert), die dein aktuelles Problem lösen würden.
http://www.sps-forum.de/faq/53809-profibus-profinet-teilnehmer-diagnose.html?highlight=Profinet

Gruß
Larry

Danke Larry für den Anstoß!

Auf den von dir verlinkten Seiten war ich schon; allerdings verstand ich da nur Flughafen, Bahnhof, Taxistand. Will heißen, die dargestellten Bausteine übersteigen meine Kenntnisse; und es muss doch auch mittels einer Auswertung im OB86 gehen ...

Nach meinem Beispiel in #18 habe ich es soweit hinbekommen, dass je nach Ausfall eines Profinet- bzw. Profibusteilnehmers in die korrekte Stationsnummer geschrieben wird. Allerdings besteht noch immer das Problem, dass beispielsweise bei Ausfall des Teilnehmers mit der Profibus-Adresse 3 der Wert 259 eingeschrieben wird. Könnte mir da evtl. noch jemand zur Hand gehen, wo das Problem zu suchen ist? :confused:

Lieben Dank schon mal ...
 
Zurück
Oben