OPs und Störmeldungen

Aksels

Level-2
Beiträge
257
Reaktionspunkte
9
Zuviel Werbung?
-> Hier kostenlos registrieren
Liebe Mitleser,

ich habe hier schon etliche Threads gelesen über das Thema OPs und Störmeldungen.
Ich möchte einen FB entwerfen, der mir das erleichtert.
Der Baustein soll 8 Fehlermeldungen bearbeiten können, wenn ich doch mal mehr habe nehme ich einen Zweiten Baustein davon.
Ich benutze WinCC Flex 2007
Er soll über folgende Ein und Ausgänge verfügen:

  • 8 x IN Bool : Fehler
  • 8 x Out Bool : Meldelampe (Firmenspezifisch: schnell blinkend für Fehler Unquittiert, langsam blinkend für Fehler quittiert aber noch anstehend)
  • 1 x IN Bool : Quittieren (vom Knebelschalter)
  • 1 x IN Bool : Anwesend
  • 1 x IN Bool : Lampentest
  • 1 x IN_OUT Word : Hier wird die Variable angegeben, die nacher in WinCC Flex übernommen wird. Gerade Bits: Fehler, Ungerade Quittierung. Es soll Hibyte und Lobyte im Baustein getauscht werden)
  • 1 x IN Word : Quittiervariable Lesen in WinCC Flex. Hier kommen die Quittierungen vom OP zurück. Es werden nur 8 Bits verwendet, aber ich bekommen WinCC Flex nicht dazu ein Byte zu akzeptieren.
  • 1 x Out INT : Anzahl Anliegender Störungen
  • 1 x IN INT : Anzahl Anliegender Störungen von einem anderen Störbaustein Startwert 0. Hiermit sind so Dinge wie Sammelstörungsauswertung oder wenn mehr als 3 Fehler dann NotfallSMS raussenden möglich.
  • 1 x IN Bool : Takt Langsamblinken
  • 1 x In Bool : Takt Schnellblinken

Hier der Code, den ich bisher geschrieben habe. Ich weiß, daß man das viel kürzer machen kann, aber ich arbeite gern mit FUP, solange es geht, und ich möchte meine Baustein auch mal einem Lehrling geben können, ohne Ihm AWL beibringen zu müssen, damit er den Inhalt versteht.


Code:
FUNCTION_BLOCK "FB_Fehler"
TITLE =
VERSION : 0.1


VAR_INPUT
  I_F0 : BOOL ;    
  I_F1 : BOOL ;    
  I_F2 : BOOL ;    
  I_F3 : BOOL ;    
  I_F4 : BOOL ;    
  I_F5 : BOOL ;    
  I_F6 : BOOL ;    
  I_F7 : BOOL ;    
  I_Quitt : BOOL ;    
  I_Anwesend : BOOL ;    
  I_Lampentest : BOOL ;    
  I_BL_La : BOOL ;    
  I_BL_Schn : BOOL ;    
END_VAR
VAR_OUTPUT
  O_ML0 : BOOL ;    
  O_ML1 : BOOL ;    
  O_ML2 : BOOL ;    
  O_ML3 : BOOL ;    
  O_ML4 : BOOL ;    
  O_ML5 : BOOL ;    
  O_ML6 : BOOL ;    
  O_ML7 : BOOL ;    
END_VAR
VAR_IN_OUT
  IO_Err_Quitt_8x : WORD ;    
END_VAR
VAR
  S_F_UQ_0 : BOOL ;    
  S_F_UQ_1 : BOOL ;    
  S_F_UQ_2 : BOOL ;    
  S_F_UQ_3 : BOOL ;    
  S_F_UQ_4 : BOOL ;    
  S_F_UQ_5 : BOOL ;    
  S_F_UQ_6 : BOOL ;    
  S_F_UQ_7 : BOOL ;    
  S_Fl_0 : BOOL ;    
  S_Fl_1 : BOOL ;    
  S_Fl_2 : BOOL ;    
  S_Fl_3 : BOOL ;    
  S_Fl_4 : BOOL ;    
  S_Fl_7 : BOOL ;    
  S_Fl_6 : BOOL ;    
  S_Fl_5 : BOOL ;    
END_VAR
BEGIN
NETWORK
TITLE =

      U     #I_F0; 
      FP    #S_Fl_0; 
      S     #S_F_UQ_0; 
NETWORK
TITLE =

      U     #I_F1; 
      FP    #S_Fl_1; 
      S     #S_F_UQ_1; 
NETWORK
TITLE =

      U     #I_F2; 
      FP    #S_Fl_2; 
      S     #S_F_UQ_2; 
NETWORK
TITLE =

      U     #I_F3; 
      FP    #S_Fl_3; 
      S     #S_F_UQ_3; 
NETWORK
TITLE =

      U     #I_F4; 
      FP    #S_Fl_4; 
      S     #S_F_UQ_4; 
NETWORK
TITLE =

      U     #I_F5; 
      FP    #S_Fl_5; 
      S     #S_F_UQ_5; 
NETWORK
TITLE =

      U     #I_F6; 
      FP    #S_Fl_6; 
      S     #S_F_UQ_6; 
NETWORK
TITLE =

      U     #I_F7; 
      FP    #S_Fl_7; 
      S     #S_F_UQ_7; 
NETWORK
TITLE =

      U     #I_Quitt; 
      =     L      0.0; 
      O     L      0.0; 
      O     DIX    5.1; 
      R     #S_F_UQ_0; 
      O     L      0.0; 
      O     DIX    5.3; 
      R     #S_F_UQ_1; 
      O     L      0.0; 
      O     DIX    5.5; 
      R     #S_F_UQ_2; 
      O     L      0.0; 
      O     DIX    5.7; 
      R     #S_F_UQ_3; 
      O     L      0.0; 
      O     DIX    4.1; 
      R     #S_F_UQ_4; 
      O     L      0.0; 
      O     DIX    4.3; 
      R     #S_F_UQ_5; 
      O     L      0.0; 
      O     DIX    4.5; 
      R     #S_F_UQ_6; 
      O     L      0.0; 
      O     DIX    4.7; 
      R     #S_F_UQ_7; 
NETWORK
TITLE =

      U(    ; 
      U     #I_BL_Schn; 
      U     #S_F_UQ_0; 
      O     ; 
      U     #I_BL_La; 
      U     #I_F0; 
      UN    #S_F_UQ_0; 
      O     #I_Lampentest; 
      )     ; 
      U     #I_Anwesend; 
      =     #O_ML0; 
NETWORK
TITLE =

      U(    ; 
      U     #I_BL_Schn; 
      U     #S_F_UQ_1; 
      O     ; 
      U     #I_BL_La; 
      U     #I_F1; 
      UN    #S_F_UQ_1; 
      O     #I_Lampentest; 
      )     ; 
      U     #I_Anwesend; 
      =     #O_ML1; 
NETWORK
TITLE =

      U(    ; 
      U     #I_BL_Schn; 
      U     #S_F_UQ_2; 
      O     ; 
      U     #I_BL_La; 
      U     #I_F2; 
      UN    #S_F_UQ_2; 
      O     #I_Lampentest; 
      )     ; 
      U     #I_Anwesend; 
      =     #O_ML2; 
NETWORK
TITLE =

      U(    ; 
      U     #I_BL_Schn; 
      U     #S_F_UQ_3; 
      O     ; 
      U     #I_BL_La; 
      U     #I_F3; 
      UN    #S_F_UQ_3; 
      O     #I_Lampentest; 
      )     ; 
      U     #I_Anwesend; 
      =     #O_ML3; 
NETWORK
TITLE =

      U(    ; 
      U     #I_BL_Schn; 
      U     #S_F_UQ_4; 
      O     ; 
      U     #I_BL_La; 
      U     #I_F4; 
      UN    #S_F_UQ_4; 
      O     #I_Lampentest; 
      )     ; 
      U     #I_Anwesend; 
      =     #O_ML4; 
NETWORK
TITLE =

      U(    ; 
      U     #I_BL_Schn; 
      U     #S_F_UQ_5; 
      O     ; 
      U     #I_BL_La; 
      U     #I_F5; 
      UN    #S_F_UQ_5; 
      O     #I_Lampentest; 
      )     ; 
      U     #I_Anwesend; 
      =     #O_ML5; 
NETWORK
TITLE =

      U(    ; 
      U     #I_BL_Schn; 
      U     #S_F_UQ_6; 
      O     ; 
      U     #I_BL_La; 
      U     #I_F6; 
      UN    #S_F_UQ_6; 
      O     #I_Lampentest; 
      )     ; 
      U     #I_Anwesend; 
      =     #O_ML6; 
NETWORK
TITLE =

      U(    ; 
      U     #I_BL_Schn; 
      U     #S_F_UQ_7; 
      O     ; 
      U     #I_BL_La; 
      U     #I_F7; 
      UN    #S_F_UQ_7; 
      O     #I_Lampentest; 
      )     ; 
      U     #I_Anwesend; 
      =     #O_ML7; 
END_FUNCTION_BLOCK
Das ganze ist offensichtlich noch nicht fertig. Doch ich bin über das Problem mit der direkten Adressierung DIX gestolpert.
Ich bekomme die FehlerQuittierVariable ja als Word. Das soll auch so bleiben, denn der User soll von der OP-Problematik ja entlastet werden. Im Baustein will ich diese Variable aber Bitweise bearbeiten, deswegen die DIX Befehle.
Muss ich, wenn ich das Ding später mehrfach aufrufen will wirklich durch die Harte Schule mit:
Code:
LAR1  AR2; 
      L     P##Feh; 
      +AR1  ; 
L1:   U     DIX [AR1,P#0.0];
Oder kann man das irgendwie unkomplizierter lösen?


Gruß,
Aksels
 
Ich hab´s grob überflogen. Die "Harte Schule", die du meinst brauchst du erst wenn du den Baustein als Mulit-Instanz aufrufen möchtest.

Solange du jedem Aufruf einen eigenen Instanz-DB sponserst kannst du dir das sparen.

Allerdings würde ich dir dringend dazu raten, alles symbolisch zu programmieren und entsprechend Variablen zu deklarieren.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Weitere Fragen..

Hallo Aventinus,

was ist der Unterschied zwischen einem Multiinstanzaufruf und mehreren Aufrufen, bei denen ich jedem Aufruf einen Datenbaustein mitgebe? Ich nahm seither immer an, das wäre dann ein Multiinstanzaufruf?
Oder ist mit Multiinstanz der mehrfache Aufruf innerhalb des Static-Bereichs eines anderen Bausteins gemeint?
Die Word Variable habe ich doch symbolisch programmiert, oder verstehe ich da auch etwas noch nicht. Doch wie kann ich nun auf die einzelnen Bits der Word-Variable symbolisch zugreifen (ohne DIX)?

Gruß,
Aksels
 
Wenn du in einem FB einen oder mehrere andere FB´s aufrufst,spricht man von einer Multiinstanz.Du hast dann nur einen IDB für alle FB´s.
Dabei muß beachtet werden, dass man den Offset vom AR2 bei den aufgerufenen FB´s hinzuzählt,sonst funktioniert das ganze nicht.
 
Zuletzt bearbeitet:
Fertiger Baustein

Hallo Leute.
Endlich komme ich wieder zum SPS-Programmieren. Habe meinen Fehlerbaustein endlich testen können.
Ihr habt mir immer wieder sehr viel geholfen.
Hier ein kleiner Beitrag zurück:

Es handelt sich um einen Störmeldebaustein mit Unterstützung für OPs.
Er ist Multiinstanzfähig. Ich baue mir also einen FehlerFb, der mehrere solcher in STAT deklarierten Bausteine beinhaltet. Nur ein Instanz-DB ist nacher nötig.
Der Baustein ist komplett in FUP.
Wie wäre mir warm das Herz aufgegangen, hätte ich solch einen Baustein zu WinccFlex Anfangszeiten gehabt. Ich habe Tage gebraucht um dieses OP-Fehlergedöns zu verstehen und nur Stunden um es wieder zu vergessen. ;)
Der Baustein bekommt Fehler und Betriebsmeldungen als Bits. Er merkt sich den Fehler als Unquittiert. Die zugehörige Meldelampe leuchtet bei Betrieb und Blinkt bei einem Fehler. Sie blinkt schnell bei unquittiertem Fehler und langsam bei quittiertem aber anstehenden Fehler.

Man kann die Anzahl unquittierter Fehler am Baustein als Ausgang O_Anz_Feh_UQ lesen und in den nächsten Baustein als Eingang I_AnzFUQ_Vorh geben. Somit kann am letzen Baustein eine Sammelstörung für alle ausgewertet werden.
Blink_Langsam und Blink_Schnell nehme ich für mich aus dem Taktmerkerbyte der CPU.

Bei den Eingängen gibt es ein QuittWort. Hier werden nur die ersten 8 Bits verwendet. Dieses Wort kann vom OP benutzt werden um am OP zu quittieren. Jede Meldung wird individuell quittiert. Im WinccFlex nennt sich das "Quittiervariable lesen" (wohl weil diese Variable von der SPS gelesen und ausgewertet wird. Das Bit wird vom OP gesetzt und in meinem Baustein nach Auswertung resettet (auch der Weg zu dieser Erkenntnis war mit viel Frust gepflastert).

Bei den Ausgängen gibt es ein Err_Quitt_8x. Dieses Wort enthält die Fehler und Quittierungen für ein OP. Und zwar schon HighByte und LowByte vertauscht. Das bedeutet: Der Fehler, der an Fehlereingang 0 anliegt kann im OP als Bausteinwort.Bit0 projektiert werden (das mit dem Fehler 0 an Bit 8 habe ich sonst immer vergessen). Das zugehörige Quittierbit steht demnach an Pos 1 (für WinCCFlex "Quittiervariable schreiben" (wohl weil die SPS dieses Bit schreibt). Beim Quittieren mittels Knebeltaster werden alle Störungen auch im OP quittiert.

Der Ausgang "Sammersltörung Meldelampe" O_SaSt_ML leuchtet nur, blinkt nicht. Kann also auch zm Auswerten herangezogen werden, ob Fehler noch anstehen. Allerdings nur für diesen Baustein. Nächste Version wird auch die anstehenden Fehler als Int ausgeben.....

O_SaSt_UQ_Kein beachtet die Unquittierten der Vorherigen Bausteine über I_AnzFUQ_Vorh. Kann somit z.B. für ein Wählgerät verwendet werden.

Die nächste Version wird dann noch ein Wort für die Betriebsmeldungen haben.

Bestimmt kann man den Baustein kürzer schreiben. Aber ich war so froh daß er funktioniert..... :D

Seltsamerweise geht das Ganze trotz Mutliinstanz auch ohne AR2 zu beachten.......ich habs wohl immer noch nicht ganz gefressen.
Vielleicht wär jemand so nett das zu verifizieren.

Benutzt ihn so viel Ihr wollt. Jegliche Gewährleistung ausgeschlossen. :p

Gruß,
Aksels

Antwort zu lang. Code im nächsten Beitrag
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Code

Bausteincode

Code:
FUNCTION_BLOCK "FB_Fehler"
TITLE = Fehlerbaustein_OP
VERSION : 1.0


VAR_INPUT
  I_F0 : BOOL ;    
  I_F1 : BOOL ;    
  I_F2 : BOOL ;    
  I_F3 : BOOL ;    
  I_F4 : BOOL ;    
  I_F5 : BOOL ;    
  I_F6 : BOOL ;    
  I_F7 : BOOL ;    
  I_B_0 : BOOL ;    
  I_B_1 : BOOL ;    
  I_B_2 : BOOL ;    
  I_B_3 : BOOL ;    
  I_B_4 : BOOL ;    
  I_B_5 : BOOL ;    
  I_B_6 : BOOL ;    
  I_B_7 : BOOL ;    
  I_Quitt : BOOL ;    
  I_Anwesend : BOOL ;    
  I_Lampentest : BOOL ;    
  I_BL_La : BOOL ;    
  I_BL_Schn : BOOL ;    
  I_AnzFUQ_Vorh : INT ;    
END_VAR
VAR_OUTPUT
  O_ML0 : BOOL ;    
  O_ML1 : BOOL ;    
  O_ML2 : BOOL ;    
  O_ML3 : BOOL ;    
  O_ML4 : BOOL ;    
  O_ML5 : BOOL ;    
  O_ML6 : BOOL ;    
  O_ML7 : BOOL ;    
  O_Err_Quitt_8x : WORD ;    
  O_Anz_Feh_UQ : INT ;    
  O_SaSt_ML : BOOL ;    
  O_SaStUQ_Kein : BOOL ;    
END_VAR
VAR_IN_OUT
  IO_Quitt_Word : WORD ;    
END_VAR
VAR
  S_F_UQ_0 : BOOL ;    
  S_F_UQ_1 : BOOL ;    
  S_F_UQ_2 : BOOL ;    
  S_F_UQ_3 : BOOL ;    
  S_F_UQ_4 : BOOL ;    
  S_F_UQ_5 : BOOL ;    
  S_F_UQ_6 : BOOL ;    
  S_F_UQ_7 : BOOL ;    
  S_Fl_0 : BOOL ;    
  S_Fl_1 : BOOL ;    
  S_Fl_2 : BOOL ;    
  S_Fl_3 : BOOL ;    
  S_Fl_4 : BOOL ;    
  S_Fl_7 : BOOL ;    
  S_Fl_6 : BOOL ;    
  S_Fl_5 : BOOL ;    
  ST_TOF_01 : "TOF";    
END_VAR
VAR_TEMP
  Zwsp1 : WORD ;    
  Zwsp2 : WORD ;    
  T_01 : BOOL ;    
  T_ISum : INT ;    
END_VAR
BEGIN
NETWORK
TITLE =Arbeitsbereich leeren

      L     0; 
      T     #Zwsp1; 
      NOP   0; 
NETWORK
TITLE =Quittieren-Arbeitsbereich befüttern

      L     #IO_Quitt_Word; 
      T     #Zwsp2; 
      NOP   0; 
NETWORK
TITLE =Fehler auswerten und als Unquittiert merken.

      U     #I_F0; 
      =     L      8.0; 
      U     L      8.0; 
      FP    #S_Fl_0; 
      S     #S_F_UQ_0; 
      U     L      8.0; 
      BLD   102; 
      =     L      1.0; 
NETWORK
TITLE =

      U     #I_F1; 
      =     L      8.0; 
      U     L      8.0; 
      FP    #S_Fl_1; 
      S     #S_F_UQ_1; 
      U     L      8.0; 
      BLD   102; 
      =     L      1.2; 
NETWORK
TITLE =

      U     #I_F2; 
      =     L      8.0; 
      U     L      8.0; 
      FP    #S_Fl_2; 
      S     #S_F_UQ_2; 
      U     L      8.0; 
      BLD   102; 
      =     L      1.4; 
NETWORK
TITLE =

      U     #I_F3; 
      =     L      8.0; 
      U     L      8.0; 
      FP    #S_Fl_3; 
      S     #S_F_UQ_3; 
      U     L      8.0; 
      BLD   102; 
      =     L      1.6; 
NETWORK
TITLE =

      U     #I_F4; 
      =     L      8.0; 
      U     L      8.0; 
      FP    #S_Fl_4; 
      S     #S_F_UQ_4; 
      U     L      8.0; 
      BLD   102; 
      =     L      0.0; 
NETWORK
TITLE =

      U     #I_F5; 
      =     L      8.0; 
      U     L      8.0; 
      FP    #S_Fl_5; 
      S     #S_F_UQ_5; 
      U     L      8.0; 
      BLD   102; 
      =     L      0.2; 
NETWORK
TITLE =

      U     #I_F6; 
      =     L      8.0; 
      U     L      8.0; 
      FP    #S_Fl_6; 
      S     #S_F_UQ_6; 
      U     L      8.0; 
      BLD   102; 
      =     L      0.4; 
NETWORK
TITLE =

      U     #I_F7; 
      =     L      8.0; 
      U     L      8.0; 
      FP    #S_Fl_7; 
      S     #S_F_UQ_7; 
      U     L      8.0; 
      BLD   102; 
      =     L      0.6; 
NETWORK
TITLE =Quittierung

      U     #I_Quitt; 
      =     L      8.0; 
      O     L      8.0; 
      O     L      2.0; 
      R     #S_F_UQ_0; 
      R     L      2.0; 
      O     L      8.0; 
      O     L      2.1; 
      R     #S_F_UQ_1; 
      R     L      2.1; 
      O     L      8.0; 
      O     L      2.2; 
      R     #S_F_UQ_2; 
      R     L      2.2; 
      O     L      8.0; 
      O     L      2.3; 
      R     #S_F_UQ_3; 
      R     L      2.3; 
      O     L      8.0; 
      O     L      2.4; 
      R     #S_F_UQ_4; 
      R     L      2.4; 
      O     L      8.0; 
      O     L      2.5; 
      R     #S_F_UQ_5; 
      R     L      2.5; 
      O     L      8.0; 
      O     L      2.6; 
      R     #S_F_UQ_6; 
      R     L      2.6; 
      O     L      8.0; 
      O     L      2.7; 
      R     #S_F_UQ_7; 
      R     L      2.7; 
      U     L      8.0; 
      =     L      8.1; 
      BLD   103; 
      CALL #ST_TOF_01 (
           IN                       := L      8.1,
           PT                       := T#500MS,
           Q                        := #T_01);

      NOP   0; 
NETWORK
TITLE =Quittierung an Display weitergeben

      U     #T_01; 
      SPBNB _001; 
      L     #Zwsp1; 
      L     W#16#AAAA; 
      OW    ; 
      T     #Zwsp1; 
_001: NOP   0; 
NETWORK
TITLE =Quittierung an Display weitergeben

      UN    #T_01; 
      SPBNB _002; 
      L     #Zwsp1; 
      L     W#16#5555; 
      UW    ; 
      T     #Zwsp1; 
_002: NOP   0; 
NETWORK
TITLE =Meldelampe leuchtet bei Betrieb, blinkt bei Fehler
//Schnellblinkend bei unquittiertem Fehler
//Langsamblinkend bei anstehendem quittiertem Fehler
      U(    ; 
      U     #I_BL_Schn; 
      U     #S_F_UQ_0; 
      O     ; 
      U     #I_BL_La; 
      U     #I_F0; 
      UN    #S_F_UQ_0; 
      O     #I_Lampentest; 
      O     ; 
      U     #I_B_0; 
      UN    #S_F_UQ_0; 
      UN    #I_F0; 
      )     ; 
      U     #I_Anwesend; 
      =     #O_ML0; 
NETWORK
TITLE =

      U(    ; 
      U     #I_BL_Schn; 
      U     #S_F_UQ_1; 
      O     ; 
      U     #I_BL_La; 
      U     #I_F1; 
      UN    #S_F_UQ_1; 
      O     #I_Lampentest; 
      O     ; 
      U     #I_B_1; 
      UN    #S_F_UQ_1; 
      UN    #I_F1; 
      )     ; 
      U     #I_Anwesend; 
      =     #O_ML1; 
NETWORK
TITLE =

      U(    ; 
      U     #I_BL_Schn; 
      U     #S_F_UQ_2; 
      O     ; 
      U     #I_BL_La; 
      U     #I_F2; 
      UN    #S_F_UQ_2; 
      O     #I_Lampentest; 
      O     ; 
      U     #I_B_2; 
      UN    #S_F_UQ_2; 
      UN    #I_F2; 
      )     ; 
      U     #I_Anwesend; 
      =     #O_ML2; 
NETWORK
TITLE =

      U(    ; 
      U     #I_BL_Schn; 
      U     #S_F_UQ_3; 
      O     ; 
      U     #I_BL_La; 
      U     #I_F3; 
      UN    #S_F_UQ_3; 
      O     #I_Lampentest; 
      O     ; 
      U     #I_B_3; 
      UN    #S_F_UQ_3; 
      UN    #I_F3; 
      )     ; 
      U     #I_Anwesend; 
      =     #O_ML3; 
NETWORK
TITLE =

      U(    ; 
      U     #I_BL_Schn; 
      U     #S_F_UQ_4; 
      O     ; 
      U     #I_BL_La; 
      U     #I_F4; 
      UN    #S_F_UQ_4; 
      O     #I_Lampentest; 
      O     ; 
      U     #I_B_4; 
      UN    #S_F_UQ_4; 
      UN    #I_F4; 
      )     ; 
      U     #I_Anwesend; 
      =     #O_ML4; 
NETWORK
TITLE =

      U(    ; 
      U     #I_BL_Schn; 
      U     #S_F_UQ_5; 
      O     ; 
      U     #I_BL_La; 
      U     #I_F5; 
      UN    #S_F_UQ_5; 
      O     #I_Lampentest; 
      O     ; 
      U     #I_B_5; 
      UN    #S_F_UQ_5; 
      UN    #I_F5; 
      )     ; 
      U     #I_Anwesend; 
      =     #O_ML5; 
NETWORK
TITLE =

      U(    ; 
      U     #I_BL_Schn; 
      U     #S_F_UQ_6; 
      O     ; 
      U     #I_BL_La; 
      U     #I_F6; 
      UN    #S_F_UQ_6; 
      O     #I_Lampentest; 
      O     ; 
      U     #I_B_6; 
      UN    #S_F_UQ_6; 
      UN    #I_F6; 
      )     ; 
      U     #I_Anwesend; 
      =     #O_ML6; 
NETWORK
TITLE =

      U(    ; 
      U     #I_BL_Schn; 
      U     #S_F_UQ_7; 
      O     ; 
      U     #I_BL_La; 
      U     #I_F7; 
      UN    #S_F_UQ_7; 
      O     #I_Lampentest; 
      O     ; 
      U     #I_B_7; 
      UN    #S_F_UQ_7; 
      UN    #I_F7; 
      )     ; 
      U     #I_Anwesend; 
      =     #O_ML7; 
NETWORK
TITLE =Geändertes OP-Quittierungswort ausgeben.

      L     #Zwsp2; 
      T     #IO_Quitt_Word; 
      NOP   0; 
NETWORK
TITLE =Status- und Quittierungswort ausgeben.

      L     #Zwsp1; 
      T     #O_Err_Quitt_8x; 
      NOP   0; 
NETWORK
TITLE =Fehlersumme resetten.

      L     0; 
      T     #T_ISum; 
      NOP   0; 
NETWORK
TITLE =Fehler aufaddieren.

      U     #S_F_UQ_0; 
      SPBNB _003; 
      L     #T_ISum; 
      L     1; 
      +I    ; 
      T     #T_ISum; 
_003: NOP   0; 
NETWORK
TITLE =Fehler aufaddieren.

      U     #S_F_UQ_1; 
      SPBNB _004; 
      L     #T_ISum; 
      L     1; 
      +I    ; 
      T     #T_ISum; 
_004: NOP   0; 
NETWORK
TITLE =Fehler aufaddieren.

      U     #S_F_UQ_2; 
      SPBNB _005; 
      L     #T_ISum; 
      L     1; 
      +I    ; 
      T     #T_ISum; 
_005: NOP   0; 
NETWORK
TITLE =Fehler aufaddieren.

      U     #S_F_UQ_3; 
      SPBNB _006; 
      L     #T_ISum; 
      L     1; 
      +I    ; 
      T     #T_ISum; 
_006: NOP   0; 
NETWORK
TITLE =Fehler aufaddieren.

      U     #S_F_UQ_4; 
      SPBNB _007; 
      L     #T_ISum; 
      L     1; 
      +I    ; 
      T     #T_ISum; 
_007: NOP   0; 
NETWORK
TITLE =Fehler aufaddieren.

      U     #S_F_UQ_5; 
      SPBNB _008; 
      L     #T_ISum; 
      L     1; 
      +I    ; 
      T     #T_ISum; 
_008: NOP   0; 
NETWORK
TITLE =Fehler aufaddieren.

      U     #S_F_UQ_6; 
      SPBNB _009; 
      L     #T_ISum; 
      L     1; 
      +I    ; 
      T     #T_ISum; 
_009: NOP   0; 
NETWORK
TITLE =Fehler aufaddieren.

      U     #S_F_UQ_7; 
      SPBNB _00a; 
      L     #T_ISum; 
      L     1; 
      +I    ; 
      T     #T_ISum; 
_00a: NOP   0; 
NETWORK
TITLE =Fehler aufaddieren.

      L     #T_ISum; 
      L     #I_AnzFUQ_Vorh; 
      +I    ; 
      T     #T_ISum; 
      NOP   0; 
NETWORK
TITLE =Ausgang Unquittierte Störung vorhanden ausgeben.

      L     #T_ISum; 
      L     0; 
      ==I   ; 
      =     #O_SaStUQ_Kein; 
NETWORK
TITLE =Anzahl unwuittierte Störungen ausgeben.

      L     #T_ISum; 
      T     #O_Anz_Feh_UQ; 
      NOP   0; 
NETWORK
TITLE =Störung anstehend vorhanden ausgeben.

      O     #I_F0; 
      O     #I_F1; 
      O     #I_F2; 
      O     #I_F3; 
      O     #I_F4; 
      O     #I_F5; 
      O     #I_F6; 
      O     #I_F7; 
      =     #O_SaSt_ML; 
END_FUNCTION_BLOCK
 
Seltsamerweise geht das Ganze trotz Mutliinstanz auch ohne AR2 zu beachten.......ich habs wohl immer noch nicht ganz gefressen.
Vielleicht wär jemand so nett das zu verifizieren.

Hallo,
das liegt daran, weil du nicht mit indirekter Adressierung (also pointern) arbeitest. Du benutzt ja alle deine baustein-internen Operanden direkt.

Gruß
Larry
 
Zurück
Oben