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

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 16

Thema: SCL: Datentypspezifikation nicht korrekt

  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, ich mal wieder

    jetzt wollte ich auch noch einen Funktionsbaustein in dem Funktionsbaustein aufrufen (gestern wars bloß der SFB4 ) und habe folgenden Code geschrieben:

    Code:
    FUNCTION_BLOCK FB2
    
    BEGIN
    
      ;
    
    END_FUNCTION_BLOCK
    
    
    FUNCTION_BLOCK FB1
    
    VAR
    Test : FB2;
    END_VAR
    
    BEGIN
    
    Test();
    
    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
    Beim Compilieren meckert der Compiler bei dieser Zeile:

    Code:
    Test : FB2;
    mit "Datentyspezifikation nicht korrekt". Was mache ich falsch?

    Ich wollte halt gern in dem FB1 (mit zugehörigem DB1) andere FB´s aufrufen, die dann auf den Multiinstanz-DB1 zugreifen können, um somit DB´s zu sparen.
    Wenn ich in diesem Code als statische Variable einen SFB definiere, dann klappt die Compilierung! Komisch?

    viele Grüße und vielen Dank schon mal, auch für dieses gute Forum

    Lars
    Zitieren Zitieren SCL: Datentypspezifikation nicht korrekt  

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

    Standard

    das gibts doch nicht, mit folgendem Code funktionierts:

    Code:
    FUNCTION_BLOCK FB2
    
    VAR    
    Timer1 : SFB4;
    END_VAR
    
    BEGIN
    
    Timer1(IN := E0.0,PT := DINT_TO_TIME("break0" * 1000));
    A0.0 := Timer1.Q;
    
    END_FUNCTION_BLOCK
    
    
    FUNCTION_BLOCK FB1
    
    VAR
    Test : FB2;
    END_VAR
    
    BEGIN
    
    Test();
    
    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
    Sprich, wenn ich im FB2 was programmiere und dort statische Variablen angebe (bzw. wenn ich ihn nicht leer lasse!), dann scheint der den zu erkennen und als Typ für meine statische Variable "Test" in FB1 zuzulassen.

    Oh Mann, wenn das noch so weitergeht, dann falln mir noch meine Haare aus und das mit 27 Jahren... LOL

    naja, wie dem auch sei, die besten Lösungen sinn ja die, auf die man selber kommt oder?

    Gruß Lars
    Zitieren Zitieren jetzt isses korrekt???!!!  

  3. #3
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.715
    Danke
    398
    Erhielt 2.398 Danke für 1.998 Beiträge

    Standard

    Zitat Zitat von lindnerlars Beitrag anzeigen
    wenn ich im FB2 was programmiere und dort statische Variablen angebe (bzw. wenn ich ihn nicht leer lasse!), dann scheint der den zu erkennen und als Typ für meine statische Variable "Test" in FB1 zuzulassen.
    Hallo Lars,
    ich denke nicht, dass er dann erst erkannt wird, sondern wahrscheinlich wird er dann erst erzeugt (generiert). Es ist möglich, dass in deinem ersten Posting der FB2 überhaupt nicht erzeugt wurde ...

    Gruß
    LL

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

    Standard

    Ok, jetzt kommt die nächste Sache...
    (sorry, aber das Thema Statische Variablen und Multiinstanz-DB is für mich neu und klingt alles nach Bahnhof )

    Ich habe FB2 und FB3, die ich beide als Instanzen in FB1 aufrufe und deshalb beide den Multiinstanz-DB1 benutzen. In FB3 starte ich einen Timer (SFB4), den ich in FB2 abfragen will. Dazu folgender Code:

    Code:
    FUNCTION_BLOCK FB3
    
    VAR 
    Timer1 : SFB4;
    END_VAR
    
    BEGIN
    
    Timer1(IN := E0.0,PT := DINT_TO_TIME("break0" * 1000));
    
    END_FUNCTION_BLOCK
    
    
    FUNCTION_BLOCK FB2
    
    BEGIN
    
    A0.0 := FB3.Timer1.Q;
    
    END_FUNCTION_BLOCK
    Das klappt aber nicht bei der Compilierung, da die Instanzdaten von FB3 nicht im FB2 bekannt sind! Muss ich dann den Timer wieder zurück geben an FB1 und diesen an FB2 übergeben?
    Oder wie kann ich in FB2 auf den Timer von FB3 zugreifen?

    viele Grüße vom Newbie
    Lars
    Zitieren Zitieren SCL: Zugriff auf statische Variablen in einem anderen FB  

  5. #5
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.715
    Danke
    398
    Erhielt 2.398 Danke für 1.998 Beiträge

    Standard

    ... nur der FB1 kennt in dem Fall beide Instanzen. Die FB's 2 und 3 sehen sich gegenseitig eigentlich gar nicht ...

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

    Standard

    Ok, und wie kann ich nun im FB2 auf den Timer im FB3 zugreifen? Geht das überhaupt?
    Zitieren Zitieren SCL: Zugriff auf statische Variablen in einem anderen FB  

  7. #7
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.715
    Danke
    398
    Erhielt 2.398 Danke für 1.998 Beiträge

    Standard

    Zitat Zitat von lindnerlars Beitrag anzeigen
    Ok, und wie kann ich nun im FB2 auf den Timer im FB3 zugreifen? Geht das überhaupt?
    Nur wenn du ihn über die Schnittstellen der beiden Bausteine laufen läßt.
    Aber jetzt mal "Spaß beiseite" ... Was ist der Sinn der Übung ? Du hast geschrieben, dass du dich mit Multi-Instanzen beschäftigen willst - OK. Dein aktuelles Beispiel hat aber mit der Sache nichts zu tun, denn der Trick der Instanzen ist ja, dass sie ihre eigenen Variablen haben ohne dabei die Variablen des Anderen zu beeinflussen.

    Gruß
    LL

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

    Standard

    grob gesagt gehts um mein Diplom und die dazugehörige Steuerung, die ich entwerfen soll:

    1. Ich rufe immer 3 FB´s von einem Über-FB (FB1) auf, diese sollen nicht noch eigene DB´s haben, um nicht "Datenmüll" zu produzieren, da ich auch alles in den Multiinstanz-DB von FB1 schreiben kann. Deshalb erstelle ich einen FB1 mit seinem DB1 und nutze diesen als Multiinstanz-DB zum Aufruf der Unter-FB.

    2. Starte ich einen Timer in einem Unter-FB (FB3), dessen Status ich aber in einem anderen Unter-FB (FB2) abfragen will...

    Nicht mehr und nicht weniger
    Zitieren Zitieren Sinn der Übung  

  9. #9
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.715
    Danke
    398
    Erhielt 2.398 Danke für 1.998 Beiträge

    Standard

    Zitat Zitat von lindnerlars Beitrag anzeigen
    grob gesagt gehts um mein Diplom und die dazugehörige Steuerung, die ich entwerfen soll
    Ohne dich kritisieren zu wollen ...
    Dann mach dir den Sinn von Instanzen zunächst klar ... Wie ich schon sagte :
    denn der Trick der Instanzen ist ja, dass sie ihre eigenen Variablen haben ohne dabei die Variablen des Anderen zu beeinflussen.
    du findest sicherlich einen Weg, das zu realisieren ... entspricht aber sicher NICHT dem Sinn von Instanzen ...
    Und ich denke mal ... wenn es deine Diplom-Arbeit werden soll ...

  10. #10
    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
    Zitat Zitat von Larry Laffer Beitrag anzeigen
    denn der Trick der Instanzen ist ja, dass sie ihre eigenen Variablen haben ohne dabei die Variablen des Anderen zu beeinflussen.
    Soll das heißen, dass es keinen Sinn macht, einen IEC-Timer (SFB4) in einem FB aufzurufen und den Status in einem anderen FB abzufragen? Bzw. dies nicht die allgemeine Vorgehensweise ist und der Timer immer dort abgefragt werden soll, wo er auch behandelt wird???

    PS: Das ganze Zeugs mit den Instanzen ist erst dadurch gekommen, dass ich statt S_ODT nun den SFB4 nehmen wollte und der brauch ja gezwungenermaßen einen DB. Ich aber nicht unnötig viele DB´s erzeugen wollte....

Ähnliche Themen

  1. Parameterzuweisung in SCL nicht korrekt
    Von Bensen83 im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 04.10.2011, 17:02
  2. warum läuft dieser einfach FUP nicht ganz korrekt
    Von forellengarten im Forum CODESYS und IEC61131
    Antworten: 14
    Letzter Beitrag: 24.08.2010, 11:56
  3. Parameter übergabe nicht Korrekt
    Von Björn im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 04.03.2010, 10:35
  4. SCL Fehlermeldung: "Baustein nicht korrekt"
    Von dinner4one im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 04.06.2008, 13:23
  5. S5Timer wird nicht korrekt bearbeitet
    Von raffi67 im Forum Simatic
    Antworten: 9
    Letzter Beitrag: 13.12.2006, 19:27

Lesezeichen

Berechtigungen

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