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

Ergebnis 1 bis 6 von 6

Thema: DB in FB erzeugen [SCL]

  1. #1
    Registriert seit
    24.04.2007
    Beiträge
    10
    Danke
    1
    Erhielt 1 Danke für 1 Beitrag

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,
    ich habe ein kleines Problem mit dem Erzeugen eines DB´s in einem FB.
    Folgendes habe ich vor:
    Ich habe einen FB geschrieben der eine Kommunikation über RS232 herstellt. Sende und Empfangsdaten (durch FB2, FB3) laufen dabei über einen DB in dem drei Strings deklariert sind. Diesen DB habe ich bisher selbst erstellt und deklariert. Im FB-Code arbeite ich dann mit der DB-Nummer.
    Funktioniert auch soweit ganz gut.
    Mein Ziel ist es jetzt das ich im FB automatisch einen DB erzeuge und mit den drei Strings bestücke bzw. deklariere.

    Quasi so:

    DATA_BLOCK HAAKE_DB

    STRUCT
    SE : STRING[20];
    SW : STRING[20];
    T1 : STRING[20];
    END_STRUCT;

    BEGIN
    SE := ' ';
    SW := ' ';
    T1 := ' ';

    END_DATA_BLOCK

    Wenn ich diesen "DATA_BLOCK" innerhalb meines FUNCTION_BLOCK einbaue,
    bekomme ich über 100 Warnungen in Form von "Ungültige Zeichen bis Zeile xxx" und der Compiler erzeugt mir meinen FB nicht. Der gewünschte DB wird aber richtig erzeugt und deklariert.

    Wenn ich diesen "DATA_BLOCK" außerhalb meines FUNCTION_BLOCK einbaue,
    habe ich ein Problem innerhalb des FUNCTION_BLOCK auf den DB zuzugreifen. Dann kann er mit folgendem Zugriff z.B. nichts anfangen, weil unbekannt.
    temp := HAAKE_DB.SE;

    Kann mir da vielleicht jemand weiterhelfen?
    Es sollte halt später so funktionieren das wenn jemand meinen FB im CFC-Plan einsetzt, automatisch ein DB namens HAAKE_DB unter einer freien DB-Nummer erzeugt wird.

    Meine bisherige Vorgehensweise ist da wahrscheinlich nicht die richtige,
    ich weiß aber nicht wie ich es sonst machen soll.

    Vielen Dank!

    Gruß Sven
    Geändert von dewenni (02.08.2007 um 14:01 Uhr)
    Zitieren Zitieren DB in FB erzeugen [SCL]  

  2. #2
    Registriert seit
    27.08.2003
    Ort
    Schweitenkirchen
    Beiträge
    472
    Danke
    101
    Erhielt 73 Danke für 59 Beiträge

    Standard

    Du musst deinen Data Block ausserhalb des Funktion Blocks schreiben.
    Allerdings würde ich in deinem FB nicht nach DB Nummern arbeiten sondern Symbolisch.
    Vor dem ersten generieren MUSS IMMER erst der FC,FB,DB in der Symbolik eingetragen werden.

    Code Beispiel:
    Code:
    FUNCTION_BLOCK FB_Test
    VAR_TEMP
      // temporäre Variablen
    END_VAR
    VAR
      // statische Variablen
    END_VAR
      // Anweisungsteil
      ;
    END_FUNCTION_BLOCK
    //Erst ab hier den Data Block beginnen lassen!!!
    DATA_BLOCK DB_Test
    //
    // Baustein-Kommentar ...
    //
      STRUCT
    Var1: INT;
      END_STRUCT
    BEGIN
    END_DATA_BLOCK

  3. #3
    dewenni ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    24.04.2007
    Beiträge
    10
    Danke
    1
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Erstmal vielen Dank für die Antwort.
    Ich habe das jetzt mal so gemacht. Die Fehler sind auch schon mal weniger geworden.

    Allerdings besteht noch das Problem das er teilweise mit dem symbolischen DB-Namen nichts anfangen kann.

    z.B. beim Aufruf von Sende und Empfangsbaustein (FB2, FB3)

    Code:
     
    FB2 ( EN      := true,
          EN_R    := true,
          R       := false,
          LADDR   := 300,
          DB_NO   := HAAKE_DB
          DBB_NO  := 0);
    Da kommt dann die Fehlermeldung: " Ungültiger Datentyp"
    Muss ich in diesem Fall die DB-Nummer von Haake_DB erst auslesen und dann an den FB2 übergeben?

  4. #4
    Registriert seit
    27.08.2003
    Ort
    Schweitenkirchen
    Beiträge
    472
    Danke
    101
    Erhielt 73 Danke für 59 Beiträge

    Standard

    Hi,
    du musst am FB noch den Instanz DB des FB2/3 mit angeben.

    Code:
    FB2.db2 ( EN      := true,
                           EN_R    := true,
                           R       := false,
                           LADDR   := 300,
                           DB_NO   := HAAKE_DB
                           DBB_NO  := 0);
    Oder als Multiinstanz aufruf, dann musst du ihn oben im Stat bereich deklarieren.
    Schätze mal so:

    FB_Send : FB2;

    Dann im Programm nur FB_Send und Rest wie oben
    Hab leider grad kein Step7 da und hab auch noch nie nen FB Aufruf in SCL gemacht

  5. #5
    dewenni ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    24.04.2007
    Beiträge
    10
    Danke
    1
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Ich mache das bereits mit der Deklaration
    Code:
    Send : FB2
    und dann später
    Code:
     
    Send ( EN      := true,
           EN_R    := true,
           R       := false,
           LADDR   := 300,
           DB_NO   := HAAKE_DB
           DBB_NO  := 0);
    Hatte es im vorherigen Post nicht korrekt angegeben.
    Das ändert aber nichts daran das im Auruf von dem FB die Variable HAAKE_DB nicht akzeptiert wird. Ist ja auch eigentlich logisch. Der FB erwartet als DB_NO nur eine INT-Zahl. Hinter HAAKE_DB steckt ja wahrscheinlich "FBXX".
    Ich müsste also denke ich mal die DB-Nummer von HAAKE_DB auslesen.
    Irgendwie ganz schön kompliziert

  6. #6
    Registriert seit
    25.06.2007
    Ort
    Dresden
    Beiträge
    3.930
    Danke
    465
    Erhielt 878 Danke für 634 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Wie erfolgt in S7-SCL die Anpassung von Instanz- und Multi-Instanz-DBs, wenn Schnittstellenänderungen in einem Funktionsbaustein erforderlich sind?

    http://support.automation.siemens.co...ew/de/15127942

    Gruß
    Zitieren Zitieren Interessanten Link gefunden  

Ähnliche Themen

  1. DB erzeugen sfc 22, 82, 85
    Von Beckx-net im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 14.04.2010, 18:02
  2. Flanke erzeugen
    Von slma im Forum Simatic
    Antworten: 9
    Letzter Beitrag: 16.07.2007, 13:25
  3. UDT erzeugen um...
    Von AndreK im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 08.01.2007, 11:10
  4. 10V mit SPS AO erzeugen ?
    Von kirk42 im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 31.07.2006, 18:05
  5. DB mit UDT erzeugen
    Von Anonymous im Forum Simatic
    Antworten: 15
    Letzter Beitrag: 22.11.2005, 22:52

Lesezeichen

Berechtigungen

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