TIA Auswertung OB

Tuc_Tuc

Level-1
Beiträge
21
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

in meinem Baustein hätte ich gerne eine Daignosefunktion für OB 86(Rack or station error). Ich benutze eine et200sp und CM4*IO Link module.

Mein Problem: Viele der "Fehler" gibt es nur als gegangen. Nehmen wir Z.B. "Wiederkehr eines PROFINET IO-Devices, Sollausbau weicht von Istausbau ab". Ich verliere die Verbindung zur Station, OB 86 kommt. Mein Baustein geht jetzt in Fehlermodus und zeigt "Ausfall eines PROFINET IO-Devices".
Wenn in in diesem Fehlerfall nun ein CM-Modul weggenommen wurde, und dann die Verbindung wieder hergestellt ist, bekomme ich den Fehler: "Wiederkehr eines PROFINET IO-Devices, Sollausbau weicht von Istausbau ab". Wenn der CM-Baustein jetzt wieder gesteckt wird und somit der Fehler weg ist, erhalte ich keinen OB 86 Aufruf mehr. Ich setzte in meinem Baustein den Fehler aber nur zurück, wenn ich von OB86 wieder ein ok bekomme. Ich will ja wissen welcher Fehler mal kam und welcher weg ist. Ist meine Denkweise zu diesem Thema falsch. Bitte helt mir *verzweifel*. Vielen Dank!


Beschreibung Rückgabe für OB 86 Aufruf in TIA:
EV-class 16# Fault_ID Beschreibung
39 CA Ausfall eines PROFINET IO-Systems
39/38 CB Ausfall/Wiederkehr eines PROFINET IO-Devices
38 CC Wiederkehr eines PROFINET IO-Devices mit Störung oder Wartung
38 CD Wiederkehr eines PROFINET IO-Devices, Sollausbau weicht von Istausbau ab
38 CE Wiederkehr eines PROFINET IO-Devices, Fehler bei der Baugruppenparametrierung
32/33 CF Aktivierung/Deaktivierung eines IO-Devices mit der Anweisung "D_ACT_DP"
39/38 F8 Ausfall/Wiederkehr eines Teils der Submodule eines PROFINET I-Devices
38 F9 Wiederkehr eines Teils der Submodule eines PROFINET I-Devices mit Device-Konfigurationsunterschied


Programmabschnitt Auswertung OB 86
IF #TOP_SI.NUM = 86 AND #TOP_SI.ZI1 = #HW_ID_Station THEN //Wenn OB 86 und HardwareID von zu überwachender Station
#RetVal := RD_SINFO(TOP_SI => #TOP_SI_OB86, START_UP_SI => #START_UP_SI); //Hole OB 86 infos

CASE BYTE_TO_INT(#TOP_SI_OB86.Fault_ID) OF //Unterscheide welcher Fehler
16#CB:
IF #TOP_SI_OB86.Event_Class = 16#39 THEN
#ErProfDev := true;
ELSE //OB86 Fehler beseitigt. (einzige Rücksetzung für Fehler= falsch???)
#ErProfDev := false;
#ErProfFault := false;
#ErProfPara := false;
#ErProfCof := false;
END_IF;
16#CC:
#ErProfFault := true;
16#CD:
#ErProfPara := true;
16#CE:
#ErProfCof := true;
16#CF:
IF #TOP_SI_OB86.Event_Class = 16#32 THEN
#ErProfAc := true;
ELSE
#ErProfAc := false;
END_IF;
END_CASE;
 
Zuletzt bearbeitet:
Ich hatte das Problem auch schon mal. Ich habe die Diagnose von der OB-Auswertung auf das Auslesen von SZL-Informationen umgestellt, finde ich zuverlässiger und auch flexibler.

Bei der OB-Auswertung musst du auch immer einen Neustart der SPS beachten. Z.B. wenn bei ausgefallenem Teilnehmer die SPS ausgeschaltet wird, dann der Teilnehmer angeklemmt und die SPS neugestartet wird, gibt es auch keinen Wiederkehr-Aufruf des OBs. Selbst die von Siemens programmierte Diagnosefunktion von PCS7 verheddert sich in so einem Fall.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Vielen Dank für deine Antwort. Fühle mich hier mit meinenm Problem schonmal nichtmehr ganz so alleine *nurnoch halb verzweifelt :)*.

Leider muss ich eine 1500er benutzen. Hier gibt es soviel ich weiß keine SZL mehr? Falls ich hier falsch liege würde ich mich über ein paar Beispiele sehr freuen.

Mit den bereitgestellten zusätzlichen Diagnosebausteinen (z.B. "LED") habe ich es bisher nur geschafft zu sagen, ob die Baugruppe ok oder nicht ok ist. Nicht was nicht ok ist. Das muss doch besser gehen?
Freue mich über weitere Ideen. Danke!
 
Ich habe hierzu auch noch einen Beitrag gefunden (falls jemand mal dieses Thread aufrufen sollte).

https://support.automation.siemens....lib.csinfo&lang=de&objid=98210758&caller=view
(Beitrags-ID:98210758 )

Die Idee von TMaroni werde ich mal versuchen umzusetzen.
In dem gelinkten Beitrag ist eine schöne Anleitung wie man im OB 100 alle HW_IDs in den Speicher zieht. So kann man diese verwenden um alle Teilnehmer zu überprüfen, ohne das der Anwender viel am Baustein machen muss.

Mich stört ein bisschen, dass man "Devicestate" mit einem Array aus 1028Bit abfragen muss und die "Modulstate" mit jeweils 128bit . Unsere Bausteine dürfen (wie immer) kein Platz verbrauchen. Aber sehe auch keine anderen Möglichkeiten mehr.

Ich weiß noch nicht, ob ich GET-Diagnose richtig verstanden habe. Ich habe mit dieser ja auch nur die Anzeige "Wartung nötig", "Fehler" oder "alles ok". Ist ja jetzt nicht die größte Auswahl. Weil Fehler oder kein Fehler liefert mir ja schon mein "Devicestate" und "Modulstate". Naja ich teste mal.

Das heißt aber auch für mich, dass ich die OBs garnichtmehr abfragen brauche?

Vielen Dank für eure Hife. Ich schaff das noch :smile:

Weitere Ideen, Verbesserungsvorschläge, Anregungen, oder wenn einfach nur jemand seinen Senf dazu geben möchte, freut mich alles sehr. Macht weiter so.
 
Mit "Get_Diag" kann ich den Status vom Modul auswerten. Wenn man das dann noch mit den ganzen OB aufrufenverknüpft, kann man auch so ueimlicha lles zurücksetzen.

Danke für eure Tipps!
 
Zuletzt bearbeitet:
Zurück
Oben