Multiinstanz hat keine Lust mehr

Chräshe

Level-2
Beiträge
873
Reaktionspunkte
274
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo allerseits,

hab mal wieder ein paar Unstimmigkeiten mit meiner S7.

Aktuell streikt ein getesteter Baustein, der bereits funktionierte wie er sollte. An dem Baustein selbst wurde nichts verändert, an dem Programm drum herum notwendiger Weise schon.

Der FB wird je einmal in verschiedenen anderen FB’s als Multiinstanz aufgerufen. Der zyklische Aufruf scheint gesichert – zumindest sieht es im Status so aus.

Hier mal die AWL-Quelle:
Code:
FUNCTION_BLOCK "A_Stufung_02"
TITLE =
//Stufenweise Zuordnung:
//Für den Eingangswert "rIN" können mehrere Stufen in der "Stufung" angegeben 
//werden. Bei erreichen wird die nächste Stufe weiter geschalten und deren 
//"Ausgabe" in "rOUT" ausgegeben.
//
//Eine Hysterese ist nicht erforderlich, weil die Stufen ihren Zustand speichern. 
//Sind sie einmal aktiviert, können sie nur mit "Reset" zurückgenommen werden.
AUTHOR : Chräshe
VERSION : 0.1


VAR_INPUT
  Start : BOOL ;    
  Reset : BOOL ;    
  rIN : REAL ;    
END_VAR
VAR_OUTPUT
  rOUT : REAL ;    
END_VAR
VAR_IN_OUT
  Para : STRUCT     
   Stufung : ARRAY  [0 .. 11 ] OF REAL ;    
   Ausgabe : ARRAY  [0 .. 11 ] OF REAL ;    
  END_STRUCT ;    
END_VAR
VAR
  Stufe : ARRAY  [0 .. 11 ] OF BOOL ;    
END_VAR
BEGIN
NETWORK
TITLE =
//
//
      U     #Reset; 
      R     #Stufe[0]; 
      R     #Stufe[1]; 
      R     #Stufe[2]; 
      R     #Stufe[3]; 
      R     #Stufe[4]; 
      R     #Stufe[5]; 
      R     #Stufe[6]; 
      R     #Stufe[7]; 
      R     #Stufe[8]; 
      R     #Stufe[9]; 
      R     #Stufe[10]; 
      R     #Stufe[11]; 

NETWORK
TITLE =

      U     #Start; 
      U(    ; 
      L     #rIN; 
      L     #Para.Stufung[0]; 
      >=R   ; 
      )     ; 
      S     #Stufe[0]; 
// -----------------------------------------
      U     #Stufe[0]; 
      U(    ; 
      L     #rIN; 
      L     #Para.Stufung[1]; 
      >=R   ; 
      )     ; 
      S     #Stufe[1]; 
// -----------------------------------------
      U     #Stufe[1]; 
      U(    ; 
      L     #rIN; 
      L     #Para.Stufung[2]; 
      >=R   ; 
      )     ; 
      S     #Stufe[2]; 
// -----------------------------------------
      U     #Stufe[2]; 
      U(    ; 
      L     #rIN; 
      L     #Para.Stufung[3]; 
      >=R   ; 
      )     ; 
      S     #Stufe[3]; 
// -----------------------------------------
      U     #Stufe[3]; 
      U(    ; 
      L     #rIN; 
      L     #Para.Stufung[4]; 
      >=R   ; 
      )     ; 
      S     #Stufe[4]; 
// -----------------------------------------
      U     #Stufe[4]; 
      U(    ; 
      L     #rIN; 
      L     #Para.Stufung[5]; 
      >=R   ; 
      )     ; 
      S     #Stufe[5]; 
// -----------------------------------------
      U     #Stufe[5]; 
      U(    ; 
      L     #rIN; 
      L     #Para.Stufung[6]; 
      >=R   ; 
      )     ; 
      S     #Stufe[6]; 
// -----------------------------------------
      U     #Stufe[6]; 
      U(    ; 
      L     #rIN; 
      L     #Para.Stufung[7]; 
      >=R   ; 
      )     ; 
      S     #Stufe[7]; 
// -----------------------------------------
      U     #Stufe[7]; 
      U(    ; 
      L     #rIN; 
      L     #Para.Stufung[8]; 
      >=R   ; 
      )     ; 
      S     #Stufe[8]; 
// -----------------------------------------
      U     #Stufe[8]; 
      U(    ; 
      L     #rIN; 
      L     #Para.Stufung[9]; 
      >=R   ; 
      )     ; 
      S     #Stufe[9]; 
// -----------------------------------------
      U     #Stufe[9]; 
      U(    ; 
      L     #rIN; 
      L     #Para.Stufung[10]; 
      >=R   ; 
      )     ; 
      S     #Stufe[10]; 
// -----------------------------------------
      U     #Stufe[10]; 
      U(    ; 
      L     #rIN; 
      L     #Para.Stufung[11]; 
      >=R   ; 
      )     ; 
      S     #Stufe[11]; 

NETWORK
TITLE =
//
//

      U     #Stufe[11]; 
      L     #Para.Ausgabe[11]; 
      SPB   END; 
      U     #Stufe[10]; 
      L     #Para.Ausgabe[10]; 
      SPB   END; 
      U     #Stufe[9]; 
      L     #Para.Ausgabe[9]; 
      SPB   END; 
      U     #Stufe[8]; 
      L     #Para.Ausgabe[8]; 
      SPB   END; 
      U     #Stufe[7]; 
      L     #Para.Ausgabe[7]; 
      SPB   END; 
      U     #Stufe[6]; 
      L     #Para.Ausgabe[6]; 
      SPB   END; 
      U     #Stufe[5]; 
      L     #Para.Ausgabe[5]; 
      SPB   END; 
      U     #Stufe[4]; 
      L     #Para.Ausgabe[4]; 
      SPB   END; 
      U     #Stufe[3]; 
      L     #Para.Ausgabe[3]; 
      SPB   END; 
      U     #Stufe[2]; 
      L     #Para.Ausgabe[2]; 
      SPB   END; 
      U     #Stufe[1]; 
      L     #Para.Ausgabe[1]; 
      SPB   END; 
      U     #Stufe[0]; 
      L     #Para.Ausgabe[0]; 
      SPB   END; 
      L     0.000000e+000; 
END:  NOP   0; 
      T     #rOUT; 

END_FUNCTION_BLOCK

Da in dem Baustein nicht viel Spektakuläres passiert, sollte es doch nicht notwendig sein das
Adressregister zu sichern?

Die „Baustein-Konsistenz-Prüfung“ ergab einige Abweichungen, worauf ich „Alles neu übersetzen“ lies.

Bereits in anderen Projekten hatte ich solche Erscheinungen. Aus Zeitgründen bin ich bisher immer hingegangen und hab die „Problemfälle“ wieder in FB’s mit konventionellen DB’s umgewandelt. Längerfristig ist das aber keine befriedigende Lösung!

Kennte jemand diese Erscheinungen oder ähnlich geartete Fälle?
Muss das Adressregister doch gesichert werden?
Fällt jemand etwas am Baustein auf?
Was würdet ihr prüfen?

Gruß
Chräshe
------
Hardware:
IM151-8 PN/DP CPU / TP 277 6"

Softwarestand:
STEP 7 - 2010 Professional V5.5 V5.5.0.0_25.6.0.1 V5.5.0.0
SIMATIC WinCC flexible 2008 SP2 K1.3.2.0_1.58.0.1 K1.3.2.0
 
Hallo Chräshe,

was macht den der Baustein jetzt nicht mehr, wenn er in einer Multiinstanz aufgerufen wird? Also wenn ich mir das so mal durchschau finde ich eigentlich nix, was nicht gehen soll. Ist doch alles ganz normal Programmiert. Außerdem auch nicht mit indirekter Adressierung und Pointer. Zumindest nichts selbstgebasteltes. Alles mit Siemens Boardmittel.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Adressregister muß im Deinen Bautein nicht gesichert werden, weil du ja nicht darauf zugreifst.

Hast du den Daran gedacht alles betroffene FB's und alle IDB's in die Steuerung zu Laden?

Hat die Bausteinkonsitänzprüfung keine Diskrepanz mehr aufgezeigt?

Hast du daran gedacht das vor der Konsitänzprüfung, der Operandenvorang auf symbolisch
gestellt wurde. Blöderweise ist er ja Defaulteinstellung Absolut.
 
was macht den der Baustein jetzt nicht mehr, wenn er in einer Multiinstanz aufgerufen wird?
Der Baustein soll bei ansteigendem Eingang, bei den entsprechenden Stufen den zugeordneten Ausgabewert ausgeben. Der erste Wert wird ausgegeben, dann passiert nichts mehr. Als würde die Kiste einfrieren. Der Rest vom Programm läuft scheinbar Fehlerfrei weiter...

Adressregister muß im Deinen Bautein nicht gesichert werden, weil du ja nicht darauf zugreifst.
Hast du den Daran gedacht alles betroffene FB's und alle IDB's in die Steuerung zu Laden?
Hat die Bausteinkonsitänzprüfung keine Diskrepanz mehr aufgezeigt?
Hast du daran gedacht das vor der Konsitänzprüfung, der Operandenvorang auf symbolisch
gestellt wurde. Blöderweise ist er ja Defaulteinstellung Absolut.

Der Operanden- Vorrang steht schon die ganze Zeit auf symbolisch. Es ist alles fehlerfrei übersetzt und die Baustein- Konsistenzprüfung ist im Moment auch zufrieden (bis ich das nächste mal zwinker oder weg schaue :sb7:). Komplett alles, mit Ausnahme dem DB für die ganzen Einstellungen, ist frisch in die SPS übertragen. Auch das HMI hat seine Aktualisierung durch und ist übertragen. Laut Variablentabelle liegen die korrekten Werte an den beiden Bausteinen an.

Mir fällt wirklich nichts mehr ein...

Könnte ein SCL Baustein mit Index das Adressregister zerlegen (sofern es nicht gesichert wird), und den Aufruf einer folgenden Multiinstanz stören?

Habe ich mit einem statischen hoch sporadischen Fehler zu tun?!? :rolleyes:

Gruß
Chräshe
 
Hallo,
im SCL-Code selber mußt du dich um so etwas selbst nicht kümmern. SCL macht das selbst wenn es mit dem AR herumspielt. Das ein laufendender SCL-Baustein aber den gezeigten Baustein beeinflußt kann ich mir nicht so recht vorstellen.
Was heißt den genau "der Baustein scheint einzufrieren ..." ?

Gruß
Larry
 
Sind in Para.Stufung[0] ... [11] noch die korrekten Werte eingetragen? Gleiche Frage zu Para.Ausgabe...
Kannst du den Baustein denn nicht beobachten?
Hast du 2 Multiinstanzen deklariert und getrennt aufgerufen oder rufst du einen deklarierte Multiinstanzbaustein zwei Mal auf (was schlecht wäre).
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

war heute gut eingespannt und konnte nur nebenher der Sache nachgehen. Inzwischen besteht das Problem nicht mehr. Die Fehlersuche war etwas komplexer, weil es nicht „Den Fehler“ sondern leider ein paar davon gegeben hatte. :icon_redface:

Unter anderem ist der Reset länger angestanden als der Start – man darf erwarten, dass das nicht funktioniert… :rolleyes:

Gruß
Chräshe
 
Zurück
Oben