# OBs in S7-300 programmieren



## Syntaxfehler (20 September 2006)

Hallo,

wir haben eine neue Steuerung S7-300 bekommen. Jetzt wollte ich unteranderem noch ein paar OBs programmieren. 
Kann mir jemand sagen, wie ich die Obs aufrufen muss? Einfach "Neuer Organisationsbaustein" und "OB2" auf "OB82" ändern und dann hat er gleich die Funktion des Diagnosealarms wie im Buch beschrieben?

Folgende OBs wollte ich auch programmieren... 

OB80 Zeitfehler (z.b. Zykluszeit überschritten)
OB82 Diagnosealarm (z.b. Kurzschluss in einer Eingangsbaugruppe)
OB83 Ziehen/Stecken-Alarm (z.b. Ziehen einer Eingabebaugruppe)
OB84 CPU-Hardwarefehler (Fehler an Schnittstelle zum MPI-Netz)
OB86 Baugruppenträgerausfall

Hat jemand schlechte Erfahrung gemacht mit diesen OBs, wenn sie mal einsetzen?

Gruß Syny


----------



## XL (20 September 2006)

*Erfahrung mit OB's*

Hallo Syny!
Mit den OB's haben wir in unserer Firma positive Erfahrungen gemacht, weil sie unter anderem verhindern können, dass die CPU in Stop geht.
Wenn Du einen OB80 anlegst hat er im TEMP-Bereich seiner Schnittstellendefinition ein paar Variablen drin. Diese Lokalen Variablen solltest Du einmalig innerhalb des OB80 auf einen Datenbaustein schreiben.
Der OB wird vom Betriebssystem der CPU aufgerufen, nicht vom SPS-Programm (geht teilweise mit SFC's, ebenso die Unterdrückung des OB-Aufrufs; soll aber hier nicht das Thema...)!

OB 80
Netzwerk 1
      U     M8.0
      SPB   M001
      L     LW     0
      T     DB80.DBW    0
      L     LW     2
      T     DB80.DBW    2
      L     LW     4
      T     DB80.DBW    4
      L     #OB80_ERROR_INFO
      T     DB80.OB80_ERROR_INFO
      L     LW     8
      T     DB80.DBW    8
      L     LW    10
      T     DB80.DBW   10
      L     LW    12
      T     DB80.DBW   12
      L     LW    14
      T     DB80.DBW   14
      L     LW    16
      T     DB80.DBW   16
      L     LW    18
      T     DB80.DBW   18
M001: NOP   0
      SET   
      S     M8.0 

Der Merker M8.0 wird zur Generierung einer Alarmmeldung am    OP/TP genutzt und an anderer Stelle zurück gesetzt. 

Die Daten in dem DB kannst Du dann an einem OP/TP in eine Fehlermeldung mit einbetten, oder anderweitig versenden (CP Ethernet) . Über die Fehlernummern kannst Du hinweise darauf bekommen, wo der Programmierfehler liegt, bzw. warum der OB aufgerufen wurde. Wenn Du aus versehen eine Endlosschleife programmierst (unvorhergesehener Wert) und keinen OB80 hast, suchst Du Dich zu Tode, warum die CPU in STOP gegangen ist. Mit OB80 und auswerten der Statusinformationen geht das schon leichter. 
So wie oben am Beispiel des OB80 machst Du das dann mit den anderen OB's auch. Für jeden OB einen DB ist nicht Pflicht, vereinfacht aber die wiederverwendbarkeit. Nicht jede CPU unterstützt alle OB's, merkst Du spätestens beim Transfer juckt dann aber nicht. Ein Fehler der nicht auftreten kann ist schon eine Fehlerquelle weniger ;-) 
Gruß Axel


----------



## Syntaxfehler (20 September 2006)

Hey Axel,

danke schon mal für die Info... das probiere ich gleich morgen mal aus. 

Nur 1 Frage bleibt mir offen. Ein Ingenieur von Siemens war bei uns mal gewesen und hat eine Anlage programmiert. Und auf deren Steuerung hat er diese OBs unteranderen auch programmiert. Nur steht in allen diesen OBs nichts drinnen, daher dachte ich, das es ein Siemens geschützer Baustein ist, den man irgendwie aufrufen muss und diesen Ablauf schon enthält!

Leider ist er nur einmalig da gewesen und kann daher nicht mehr ihn fragen... da bleibt jetzt nur Ihr Alle ))

Ich will die Fehler erstmal nur aus dem Puffer/interner Schreiber auslesen, falls mal so ein Baustein aktiviert wird. Was muß ich daher im DB schreiben? Klingt doof die Frage, aber lieber doof gefragt als ne Dumme Antwort *lach* 

Gruß Syny


----------



## volker (20 September 2006)

grundsätzlich gilt.

tritt fehler auf, wird vom system der entsprechende ob aufgerufen. ist dieser ob nicht vorhanden geht die cpu auf stop
ist der entsprechende ob vorhanden aber dort ist nichts drin passiert gar nichts. der fehler wird also ignoriert. 
die auswertung des fehlers obligt dem programmierer.

für die ob82/86 empfiehlt sich der fc125/fb125 (aus dem dp_diag)


----------



## MSB (20 September 2006)

Die OB's werden in dem Sinn nicht programmiert,
die OB's werden vom Betriebssystem aufgrund diverser Ereignisse aufgerufen.

Der Grundweg ist der, es wird ein OB vom Betriebssystem angefordert,
ist dieser OB vorhanden läuft die CPU weiter, wenn nicht, dann geht sie auf Stop.
Wenn ein leerer OB ist, dann passiert bei dessen Aufruf halt nichts, außer das die CPU weiterläuft.

Es gibt allerdings auch noch andere OB's, die in gewissen Zeitabständen aufgerufen werden,
zu bestimmten Uhrzeiten ...

Hierzu einfach mal die Standard-Library öffnen, die OB's mit F1 anschauen.

Wichtig: nicht jede CPU kann jeden OB ...

Mfg
Manuel


----------



## Raydien (21 September 2006)

hmm bei dem Thema OBs hätt ich auch noch ne Frage.

Wenn ich mehre DP-Stationen an einer S7 habe und 1 DP fällt weg wird der OB86 ja aufgerufen worin im einem Word die Adresse steht die weggefallen ist.

Frage ist nu: 
Was passiert wenn eine 2te Station ausfällt. Überschreibt er mir das Word mit der neuen Adresse?
Was passiert wenn 2 Stationen gleichzeitig aus sind, weil einer quasi das Kabel durchgeschnitten hat? 

Ich hätts gern ausprobiert doch dummerweise habe ich grade ne S7 und mehere DP Stationen nicht zu Hand.

gruß

Ray


----------



## volker (21 September 2006)

der ob wird jedes mal angesprungen, wenn das system einen fehler bei der kommu mit dem slave hat. also steht auch jedes mal der entsprechende wert in dem wort. bei 2 stationen also quasi im wechsel.

wie oben erwähnt nimmst du dafür am besten den FB/FC125. der trägt alle fehlerhaften slave in einen db ein.

siehe dazu auch dp_diag_db.xls auf meiner hp


----------

