Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Ergebnis 1 bis 4 von 4

Thema: SCL: Ungültig strukturierter Datenbausteinzugriff

  1. #1
    Registriert seit
    28.09.2007
    Ort
    Mexicali
    Beiträge
    39
    Danke
    4
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Leute,

    In meinem SCL-Code definiere ich FB1, der vom OB1 aufgerufen wird und wiederum FB2 aufruft. In den statischen Variablen von FB1 habe ich (jetzt nur zum Test) zwei Bool-Variablen definiert, die dann ja im DB1 liegen, da der DB1 der Instanz-Datenbaustein von FB1 ist. Im FB2 möchte ich auf die Daten im DB1 zugreifen. Folgender Code:

    Code:
    FUNCTION_BLOCK FB2
    
    IF (DB1.Test1) THEN
        DB1.Test2 := TRUE;
    END_IF;
    
    END_FUNCTION_BLOCK
    
    
    FUNCTION_BLOCK FB1
    
    VAR
        Test1 : BOOL := 0;
        Test2 : BOOL := 0;
    END_VAR
    
    FB2.DB2();
    
    END_FUNCTION_BLOCK
    
    
    ORGANIZATION_BLOCK OB1
    
    VAR_TEMP
      // reserviert
      info : ARRAY[0..19] OF BYTE;
      // temporäre Variablen
    
    END_VAR
    
    BEGIN
    
    FB1.DB1();
    
    END_ORGANIZATION_BLOCK
    Das Problem ist nun, dass, wenn ich vorher NICHT alle Bausteine manuell unter Bausteine im SIMATIC Manager angelegt habe, der Compiler obige Fehlermeldung ausgibt, da er beim ersten Zugriff auf den DB1 diesen noch nicht kennt. Folgende Zwickmühle:

    1. Im SCL-Handbuch steht, dass in einer SCL-Quelle alle aufgerufenen Bausteine VOR den aufrufenden Bausteinen stehen müssen!

    2. Ebenfalls steht dort drin, dass ein Instanz-DB automatisch erzeugt wird, sobald der FB im Anwenderprogramm aufgerufen wird.

    Ergo müsste der Compiler (bei nicht angelegten Bausteinen) im ersten Durchlauf den DB1 anlegen und im zweiten diesen dann kennen und ohne Probleme durchlaufen. MACHT ER ABER NICHT!!!

    Selbst wenn ich die Bausteine manuell anlege, muss ich erst zweimal kompilieren, bis der Durchlauf ohne Fehler beendet wird. Was mache ich falsch?

    vielen Dank Leute und viele Grüße

    Lars
    Zitieren Zitieren SCL: Ungültig strukturierter Datenbausteinzugriff  

  2. #2
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard

    Zitat Zitat von lindnerlars Beitrag anzeigen
    Was mache ich falsch?
    nix, so is der scl-compiler nun mal ...

    was anderes: wenn ich den erwische der in einer von mir betreuten anlage auf irgendwelche instanzdaten bausteinübergreifend zugreift, reiß ich dem die eier ab
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  3. #3
    Registriert seit
    28.09.2007
    Ort
    Mexicali
    Beiträge
    39
    Danke
    4
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Zitat Zitat von vierlagig Beitrag anzeigen
    nix, so is der scl-compiler nun mal ...
    EHRLICH JETZT? Na is ja super...da muss ich jetzt jedesmal mühselig alle FB´s und DB´s vorher anlegen, bevor ich den Compiler starte? Was isn das fürn Scheiss?

    Ja und, was sprichtn dagegen, auf Instanzdaten bausteinübergreifend zuzugreifen? Wenns nicht vorgesehen sein sollte, müsste der Zugriff doch nicht erlaubt sein oder? Ansonsten müsste ich ja jetzt immer alle Daten den FB´s übergeben, die ich dort benötige, da isses doch viel einfacher, ich hol mir die direkt dorther, wo sie stehen?

    Ok, du hast schon Recht, Stichpunkt Datenkapselung ist schon wichtig und da finde ich das bei objektorientierten Programmiersprachen schon gut gemacht, dass man die Daten, die nicht nach aussen sichtbar sein sollen, einfach durch "private" kapselt. Da ich meine Daten aber quasi "global" im FB1 und allen seinen Unter-FB´s benötige, lasse ich diese im DB1 stehen und hole sie mir dann immer, ich find dagegen spricht erst mal nix...
    Zitieren Zitieren aua...  

  4. #4
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.220
    Danke
    533
    Erhielt 2.696 Danke für 1.948 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von lindnerlars Beitrag anzeigen
    EHRLICH JETZT? Na is ja super...da muss ich jetzt jedesmal mühselig alle FB´s und DB´s vorher anlegen, bevor ich den Compiler starte? Was isn das fürn Scheiss?

    Ja und, was sprichtn dagegen, auf Instanzdaten bausteinübergreifend zuzugreifen? Wenns nicht vorgesehen sein sollte, müsste der Zugriff doch nicht erlaubt sein oder? Ansonsten müsste ich ja jetzt immer alle Daten den FB´s übergeben, die ich dort benötige, da isses doch viel einfacher, ich hol mir die direkt dorther, wo sie stehen?

    Ok, du hast schon Recht, Stichpunkt Datenkapselung ist schon wichtig und da finde ich das bei objektorientierten Programmiersprachen schon gut gemacht, dass man die Daten, die nicht nach aussen sichtbar sein sollen, einfach durch "private" kapselt. Da ich meine Daten aber quasi "global" im FB1 und allen seinen Unter-FB´s benötige, lasse ich diese im DB1 stehen und hole sie mir dann immer, ich find dagegen spricht erst mal nix...
    Dagegen spricht, daß man sich irgendwann nicht mehr in deinem Programm zurechtfinden wird. Ein Teil der Daten ist als interne Variable aufgerufen, ein Teil als direkter Zugriff auf deinen Instanz-DB. Ich halte das auch für Mist. Dann leg dir doch besser einen DB an, in dem du alle benötigten Variablen definierst (quasi globale Variablen) und übergebe diesen DB dann deinen FB oder beiße in den sauren Apfel und übergebe die Variablen über die Schnittstelle der FB.

    PS: Du kannst auch UDT und Struct übergeben, leider nur in der Schachtelungstiefe 1!

    Wir hatten die Diskussion schon x Mal im Forum, aber jeder hat seinen eigenen Blickwinkel. Zumindest 4L denkt da schon mal so wie ich.
    Geändert von Ralle (09.09.2008 um 19:40 Uhr)
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

Ähnliche Themen

  1. Antworten: 17
    Letzter Beitrag: 21.03.2012, 11:19
  2. Steuerungsauftrag ungültig
    Von giro im Forum HMI
    Antworten: 4
    Letzter Beitrag: 19.06.2011, 15:48
  3. $ 304 Auftrag ungültig
    Von stromengl im Forum HMI
    Antworten: 5
    Letzter Beitrag: 24.03.2010, 15:49
  4. Adresse ungültig in HW-Konfig ?!?
    Von Sinix im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 15.03.2010, 15:45
  5. Baugruppen Datenbasis ungültig?
    Von vollmi im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 28.09.2009, 13:32

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •