TIA S7: SCL: Einzelne Instanz eines Multiinstanz-FB's Online beobachten?

Automatinator

Level-1
Beiträge
115
Reaktionspunkte
2
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen

Im Simatic Manager S7 kann ich ja in der SCL-Quelle online die Variablen in Echzeit anschauen (in den jeweilingen Zeilen) und dabei kann ich bei FB's die gewünschte Instanz auswählen.

Konnte aber noch nicht herausfinden wie ich das im TIA-Portal hinkriege. Er zeigt mir Werte an, aber ich frage mich natürlich von welcher Instanz...?

Und funktioniert das "direkte" Quellen-Debugging überhaupt richtig? Die haben da ja anscheinen Probleme mit den online-aktual Werten...

Danke schon im Vorraus :)
 
Zuletzt bearbeitet:
Wenn man die Instanz im Aufruf mit "Öffnen und Beobachten" aufmacht, sieht man den Status der Instanz eben nur für diesen Aufruf, das funktioniert nach meiner Erfahrung sehr gut. Auch im SCL sieht es gut aus, nur bei Schleifen ist es dann aus, da die Funkion Haltepunkte noch nicht gegeben ist.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn man Haltepunkte nutzen möchte ist es wie in vielen Sprachen das man nicht sieht von welcher Instanz der Aufruf kommt.
Ich gebe wenn es wichtig ist, dass ich die Instanz kenne, eine ID mit in den FB. Ist nicht die schönste Lösung aber geht.

Seit v12 gehen Haltpunkte bei mir ohne große Probleme.
Gruß
 
Wenn man die Instanz im Aufruf mit "Öffnen und Beobachten" aufmacht, sieht man den Status der Instanz eben nur für diesen Aufruf, das funktioniert nach meiner Erfahrung sehr gut. Auch im SCL sieht es gut aus, nur bei Schleifen ist es dann aus, da die Funkion Haltepunkte noch nicht gegeben ist.

Was meinst du mit Instanz? Weil meine Instanz ist ein DB, und diesen kann ich nur in der DB-Ansicht öffnen (und beobachten). Ich würde aber gerne den DB, also die FB-Instanz als SCL-Programm öffnen und zeilenweise Debuggen. Und das Problem mit den Schleifen kenne ich schon aus dem Simatic Manager.
Oder kannst du mir erklären wie ich die Instanz als SCL-Programm öffne?
 
Wenn man Haltepunkte nutzen möchte ist es wie in vielen Sprachen das man nicht sieht von welcher Instanz der Aufruf kommt.
Ich gebe wenn es wichtig ist, dass ich die Instanz kenne, eine ID mit in den FB. Ist nicht die schönste Lösung aber geht.

Seit v12 gehen Haltpunkte bei mir ohne große Probleme.
Gruß

Ja Haltepunkte gehen nicht in S7, aber im Simatic Manger konnte ich die einzelnen Instanzen auswählen im FB-Programm und beobachten (also nicht im DB sonder FB-Quellcode!)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ja Haltepunkte gehen nicht in S7, aber im Simatic Manger konnte ich die einzelnen Instanzen auswählen im FB-Programm und beobachten (also nicht im DB sonder FB-Quellcode!)

In Step7 konnte man noch nie einzelne Instanzen einer Multiinstanz im SCL Quellcode online beobachten. Wenn du das kannst (und uns beschreiben kannst wie) dann würden dir hier einige im Forum die Füsse küssen (mich eingeschlossen).

mfG René
 
In Step7 konnte man noch nie einzelne Instanzen einer Multiinstanz im SCL Quellcode online beobachten. Wenn du das kannst (und uns beschreiben kannst wie) dann würden dir hier einige im Forum die Füsse küssen (mich eingeschlossen).

mfG René

Ja dann freu ich mich ja schon :)
Ich weiss nicht ob man dafür das S7 Professional benötigt oder nicht, aber ich arbeitete mit der Pro Version...
Leider habe ich kein Simatic Manager installiert, aber soweit ich mich errinnern kann:
1) Öffnet man die Multiinstanz-FB SCL-Quelle
2) Geht online
3) Und dann oben im Leisten-Menu auf [Test] oder [Extras] -> Dann müsste da irgendwo "Bausteinaufruf..." oder so ähnlich stehen, anwählen.
4) Im neu erschienen Fenster den gewünschten Instanz-DB auswählen und man muss im gleichen Fenster unten irgendwo noch die Haken richtig setzen (weiss nicht mehr wie die genau heissen)

und voila, alle online Werte in der linken Beobachteransicht sind die der ausgewählten Instanz.

Evtl kann einer Printscreens posten? Dann könnte ich auch genau sagen was anklicken und anhaken und was nicht... :)
 
4) Im neu erschienen Fenster den gewünschten Instanz-DB auswählen und man muss im gleichen Fenster unten irgendwo noch die Haken richtig setzen (weiss nicht mehr wie die genau heissen)

Evtl kann einer Printscreens posten? Dann könnte ich auch genau sagen was anklicken und anhaken und was nicht... :)

Eine genaue Beschreibung wo was anklicken würde auch schon reichen. Printscreens wären natürlich noch besser. Aber ich kann bei mir Step7 Pro 5.5 sp4 nirgends in einer multiinstanz die zu beobachtende Instanz auswählen und wenn man Baustein beobachte wählt dort wo er aufgerufen wird, kriegt man nur das Kompilat online.

Wenn das ginge wär das ja wirklich super. Dann gäbs bald kein Grund mehr für TIA. Ausser vielleicht Intellisense.

mfG René
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Eine genaue Beschreibung wo was anklicken würde auch schon reichen. Printscreens wären natürlich noch besser. Aber ich kann bei mir Step7 Pro 5.5 sp4 nirgends in einer multiinstanz die zu beobachtende Instanz auswählen und wenn man Baustein beobachte wählt dort wo er aufgerufen wird, kriegt man nur das Kompilat online.
Wenn das ginge wär das ja wirklich super. Dann gäbs bald kein Grund mehr für TIA. Ausser vielleicht Intellisense.

Wie schon gesagt, ich kann ohne Printscreens keine genauere Beschreibung, als meine Errinnerung her gibt, abgeben... da ich kein Simatic Manager installiert habe.
Jemand müsste nur ein SCL-Projekt haben, PLCSIM starten und dass machen was ich oben Beschrieben habe und bei Abweichungen oder Unklarheiten ein Printscreen posten... :cool:
 
Hier z.B. mal ein Printscreen


Wo kann ich jetzt hier den Aufrufpfad auswählen?

Ja genau, jetzt gibst du unten bei "Instanz-DB Nummer" die zu beobachtende Instanz-DB-Nr ein. Aufrufpfad aktivieren brauchst du nicht und offene Bausteine musst du auch nicht aktivieren.
Und dann auf [OK] und voila... alle online Werte in der linken Beobachteransicht sind die, der ausgewählten Instanz.

Falls das nicht Funktionieren sollte, gibst du die gleiche Instanz-DB-Nr. mal dort ein wo steht "Globale DB-Nr", das hat dann irgendetwas mit der Projektstruktur zu tun... und bei mir hat das, dann immer Funktioniert...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ja Haltepunkte gehen nicht in S7, aber im Simatic Manger konnte ich die einzelnen Instanzen auswählen im FB-Programm und beobachten (also nicht im DB sonder FB-Quellcode!)

Ich habe mal ein Bild angehängt.
Ich hoffe das ist was du suchst.


InstanzeBeobachten.jpg

So werden dann nur die Werte angezeigt zu dem dazugehörigen DB.
 
Zuletzt bearbeitet:
Falls das nicht Funktionieren sollte, gibst du die gleiche Instanz-DB-Nr. mal dort ein wo steht "Globale DB-Nr", das hat dann irgendetwas mit der Projektstruktur zu tun... und bei mir hat das, dann immer Funktioniert...

Nunja der Instanzdb beeinhaltet ja nicht nur eine Instanz sondern hier an die 200. Das ist ja der Sinn von Multiinstanzen.

mfG René
 
In TIA gibt es die "Funktion" Aufrufhierarchie. Damit kannst du wenn du online bist, genau den Aufruf eines FBs anschauen welcher dich gerade interessiert. Hierzu rechts die Taskkart Testen öffnen und dann findest du das Ganze unter dem Punkt Aufrufhierarchie.
Ist das die Funktion welche du gesucht hast?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
In TIA gibt es die "Funktion" Aufrufhierarchie. Damit kannst du wenn du online bist, genau den Aufruf eines FBs anschauen welcher dich gerade interessiert. Hierzu rechts die Taskkart Testen öffnen und dann findest du das Ganze unter dem Punkt Aufrufhierarchie.

In Tia kommt man auch direkt mit einem Rechtsklick auf den Aufruf in die Onlineumgebung des Aufrufpfades. IMHO geht das in Step7 und SCL-Multiinstanz in keiner Form.

mfG René
 
Nunja der Instanzdb beeinhaltet ja nicht nur eine Instanz sondern hier an die 200. Das ist ja der Sinn von Multiinstanzen.

Momental wir reden hier wohl nicht vom gleichen :S

Also ich hab einen Multiinstanz-FB: FB1 "fb_Motor" (der logischerweise keinen eigenen DB hat)
und dann lege ich in den Symboltabelle einen Instanz-DB: DB10 "dbPumpe" vom Typ FB1 an. Und das kann ich dann auch 200 mal machen.
Und dann trage ich wie oben beschrieben den zu beobachteten Instanz-DB-Nr ein...

Oder evtl. erklärst du mir mal deine Version von S7 FB-Instanzierungen, weil ich rede von Multiinstanz-FB's und Einzel-Instanz-DB's.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Du rufst in einem FB deinen MotorFB auf. Und zwar nicht als Einzelinstanz

Code:
Call MotorFB, DB1
Call MotorFB, DB2

Das ist keine Multiinstanzierung

Multiinstanzierung ist es wenn du den MotorFB im Stat des Aufrufenden Bausteins deklarierst.

gekürztes Beispiel. Dem FB Reflex_FB gebe ich hier natürlich nicht jedem einen eigenen DB.
Die kommen alle in den DB den ich dem FB Brandreflexe zuweise.

Code:
FUNCTION_BLOCK "Brandreflexe"
TITLE =
VERSION : 0.1




VAR
  WD0403 : "Reflex_FB";	
  WD0402 : "Reflex_FB";	
  WD0401 : "Reflex_FB";	
  WD0503 : "Reflex_FB";	
  Gegenverkehr : "Reflex_GV_FB";	
END_VAR
VAR_TEMP
  testbetrieb : BOOL ;	
END_VAR
BEGIN
NETWORK
TITLE =Reflex Gegenverkehr




      CALL #Gegenverkehr (
           LS_PAR_GV                := "AS Röhre Süd"._DBX_1180_0);


      U(    ; 
      L     "AS Röhre Süd"._DBW_24_0; 
      L     1; 
      ==I   ; 
      )     ; 
      =     #testbetrieb; 


NETWORK
TITLE =


      CALL #WD0401 (
           HW_Reflex                := "Sued_RU_KLP_LST->AS".BA[1],
           HW_Reflex_Voralarm       := "Sued_RU_KLP_LST->AS".BrandVoralarm,
           LS_Reset                 := "AS Röhre Süd"._DBX_36_1,
           LS_PAR_Kl1               := "LRU_S_SENS"._DBX_230_0,
           LS_PAR_Kl2               := "AS Röhre Süd"._DBW_70_0,
           LS_PAR_Kl1_VA            := "LRU_S_SENS"._DBX_249_0,
           MW_RDA                   := "Sued_RU_SENS_LST->AS".RDA.RD_04_01,
           TestBetrieb              := #testbetrieb,
           OUT_MW_RDA_Rech          := "DB_Rauch_Messung"._Sensor_04_01,
           OUT_MW_RDA_Stoe          := "DB_Rauch_Störung"._Sensor_04_01,
           AS_Reflex                := "Brandarrays".BrandKlp_N[1]);


      CALL #WD0402 (
           HW_Reflex                := "Sued_RU_KLP_LST->AS".BA[2],
           HW_Reflex_Voralarm       := FALSE,
           LS_Reset                 := "AS Röhre Süd"._DBX_36_1,
           LS_PAR_Kl1               := "LRU_S_SENS"._DBX_231_0,
           LS_PAR_Kl2               := "AS Röhre Süd"._DBW_80_0,
           MW_RDA                   := "Sued_RU_SENS_LST->AS".RDA.RD_04_02,
           TestBetrieb              := #testbetrieb,
           OUT_MW_RDA_Rech          := "DB_Rauch_Messung"._Sensor_04_02,
           OUT_MW_RDA_Stoe          := "DB_Rauch_Störung"._Sensor_04_02,
           AS_Reflex                := "Brandarrays".BrandKlp_N[2]);


      CALL #WD0403 (
           HW_Reflex                := "Sued_RU_KLP_LST->AS".BA[3],
           HW_Reflex_Voralarm       := FALSE,
           LS_Reset                 := "AS Röhre Süd"._DBX_36_1,
           LS_PAR_Kl1               := "LRU_S_SENS"._DBX_232_0,
           LS_PAR_Kl2               := "AS Röhre Süd"._DBW_90_0,
           MW_RDA                   := "Sued_RU_SENS_LST->AS".RDA.RD_04_03,
           TestBetrieb              := #testbetrieb,
           OUT_MW_RDA_Rech          := "DB_Rauch_Messung"._Sensor_04_03,
           OUT_MW_RDA_Stoe          := "DB_Rauch_Störung"._Sensor_04_03,
           AS_Reflex                := "Brandarrays".BrandKlp_N[3]);


END_FUNCTION_BLOCK
 
Du rufst in einem FB deinen MotorFB auf. Und zwar nicht als Einzelinstanz
Das ist keine Multiinstanzierung
Multiinstanzierung ist es wenn du den MotorFB im Stat des Aufrufenden Bausteins deklarierst.
gekürztes Beispiel. Dem FB Reflex_FB gebe ich hier natürlich nicht jedem einen eigenen DB.
Die kommen alle in den DB den ich dem FB Brandreflexe zuweise.

Achso. Aber ich hab nie was von Multiinstanzierung gesagt..., nur Instanzen von multiinstanzfähigen FB's... bei dir sind die FB-Daten im DB verschachtelt. Und soviel mir ist, kann S7 nicht mehr eingrenzen als ein direkte DB Adressierung.

Wir hatten auch mal ein Türen- und Tor-Leitsystem programmiert und ich hab mir dann die Mühe gemacht (was sich auch immer bis jetzt ausbezahlt hat) und für jede Türe/Tor ein DB Angelegt.. (ca. 50) Anlegen muss man sie ja so oder so irgendwo, entweder Statisch in einem FB oder halt Symboltabelle. Je nach CPU kann man ja nicht beliebt viele DB's erzeugen. Dann wirds bei 200 DB's für nur einen FB evtl. haarig...

Was war dein Grund das du keine einzelne DB's erzeugt hast?
 
Je nach CPU kann man ja nicht beliebt viele DB's erzeugen. Dann wirds bei 200 DB's für nur einen FB evtl. haarig...

Was war dein Grund das du keine einzelne DB's erzeugt hast?
Vermutlich wollte er für eine kleine Anlage mit 3 Linien mit je 20 Antrieben und 45 Timern nicht 195 DB verschwenden sondern nur 1 DB. Oft hat man auch größere Anlagen, da würden CPUs schon alleine wegen der Anzahl nötiger DBs nicht reichen.
Außerdem sind FB mit Multiinstanzen viel leichter wiederverwendbar, wenn man sich nicht merken muß, welche 80 DB da noch dazugehören.

PS: außerdem müßte man jede im Mutter-FB verwendete Sub-Instanz (z.B. Timer) auf die Schnittstelle des Mutter-FB herausführen, wenn man den Mutter-FB mehrfach im Programm verwenden will.

Harald
 
Zuletzt bearbeitet:
Zurück
Oben