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

Seite 1 von 5 123 ... LetzteLetzte
Ergebnis 1 bis 10 von 48

Thema: SCL Aufruf des SFC22

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

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo zusammen,

    ich habe das Problem das ich den SFC22 nicht faufgerufen bekomme Fehlermeldung ist als Screenshot angehangen und den Code habe ich hier. Die Zeile in der, der Fehler auftrit habe ich Rot makiert.

    Code:
    FUNCTION_BLOCK FB30VAR_INPUT
        GD:INT; //Größe pro Datensatz in Bayte.
        AD:INT; //Anzahl der Datensätze
        S:BOOL; //POS. Flanke zum Schiben.
        DB_Nr:INT; //Nummer des DBs der erschtellt werden soll.
        DB_er:BOOL; //DB erstellen POS. Flanke
        DATA:ANY; //Pointer auf die Daten
            END_VAR
    
    VAR_TEMP
        // temporäre Variablen
    END_VAR
    VAR
        G:WORD; //Gesamtgröße
        DB_erstellt:BOOL; //DB ist bereits erstellt.
        Schieben:BOOL; //Schieben läuft.
        ND:INT; //Nächster Datesatz. Zum Schieben.
        NZ:INT; //Nächstes Ziel beim Schieben.
        DB_LOW:WORD;
        DB_UP:WORD;
        DUMY_Nr:WORD; //Nummer Des Erstellten DBs.
        END_VAR
        IF DB_er THEN
            
            G:=INT_TO_WORD(GD*AD-1);
            DB_LOW:=INT_TO_WORD(DB_Nr);
            DB_UP:=INT_TO_WORD(DB_Nr+1);
            
            CREAT_DB(LOW_LIMIT := DB_LOW  // IN: WORD
                     ,UP_LIMIT := DB_UP // IN: WORD
                     ,COUNT := G // IN: WORD
                     ,DB_NUMBER := DUMY_Nr // OUT: WORD
                     ); // INT
            
            
            ;//DB Erstellen
            
        ELSE
            
        IF DB_erstellt THEN
            
            ;//Schieben!
            
        ELSE
            
            ;//ENDE!
            
        END_IF;
        END_IF;
        
        
        ;
    END_FUNCTION_BLOCK
    Vielen Dank für Eure Hilfe

    BlueDogi
    Angehängte Grafiken Angehängte Grafiken
    Zitieren Zitieren SCL Aufruf des SFC22  

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

    Standard

    Der SFC hat einen ReturnValue vom Typ Int.

    Code:
    MyRetVal := CREAT_DB(LOW_LIMIT := DB_LOW  // IN: WORD
                        ,UP_LIMIT := DB_UP // IN: WORD
                        ,COUNT := G // IN: WORD
                        ,DB_NUMBER := DUMY_Nr // OUT: WORD
                        );
    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

  3. Folgender Benutzer sagt Danke zu Ralle für den nützlichen Beitrag:

    BlueDogi (08.07.2014)

  4. #3
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.163
    Danke
    921
    Erhielt 3.286 Danke für 2.655 Beiträge

    Standard

    Ich würde mal sagen: die SFC hat einen Rückgabewert vom Typ INT, den man auch verwenden muß.
    Code:
    temp_INT := CREAT_DB(LOW_LIMIT := DB_LOW  // IN: WORD
                        ,UP_LIMIT := DB_UP // IN: WORD
                        ,COUNT := G // IN: WORD
                        ,DB_NUMBER := DUMY_Nr // OUT: WORD
                        ); // INT
    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  5. #4
    Registriert seit
    29.10.2010
    Beiträge
    549
    Danke
    57
    Erhielt 39 Danke für 37 Beiträge

    Standard

    Hi,

    ist in der zeile darunter das Semikolon nicht auch zuviel?
    Alles geht, außer nem Känguru das hüpft.

    Tschö dentech

  6. #5
    Registriert seit
    29.03.2004
    Beiträge
    5.731
    Danke
    143
    Erhielt 1.685 Danke für 1.225 Beiträge

    Standard

    Das ist erlaubt, quasi ein Anweisungsteil ohne Anweisung.

  7. #6
    Registriert seit
    17.10.2013
    Beiträge
    48
    Danke
    10
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Danke für die schnelle Hilfe...

  8. #7
    Registriert seit
    17.10.2013
    Beiträge
    48
    Danke
    10
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Ich habe da noch eine Frage und zwar kann wie kann ich einen ANY Pointer in SCL schreiben.
    Der auf ein DB zeigt. Bekannt ist die DB_Nr. sowie die das Bytes wo begonnen werden soll und die Länge in Byte. alle werte liegen in Variabelen.
    Normal wird ja so geschriebn: P#DB3.DBX0.0 BYTE2 Ich möchte jetzt das jeweils DB3; DBX0.0; und BAYTE2 variabel sind.

    Ich möchte sie an einem BLOCK MOVE verwenden Rot makiert.

    Code:
     FUNCTION_BLOCK FB30
    VAR_INPUT
        GD:INT; //Größe pro Datensatz in Bayte.
        AD:INT; //Anzahl der Datensätze
        S:BOOL; //POS. Flanke zum Schiben.
        DB_Nr:INT; //Nummer des DBs der erschtellt werden soll.
        DB_er:BOOL; //DB erstellen POS. Flanke
        DATA:ANY; //Pointer auf die Daten
            END_VAR
    
    VAR_TEMP
        // temporäre Variablen
    END_VAR
    VAR
        G:WORD; //Gesamtgröße
        DB_erstellt:BOOL; //DB ist bereits erstellt.
        Schieben:BOOL; //Schieben läuft.
        ND:INT; //Nächster Datesatz. Zum Schieben.
        NZ:INT; //Nächstes Ziel beim Schieben.
        DB_LOW:WORD;
        DB_UP:WORD;
        DUMY_Nr:WORD; //Nummer Des Erstellten DBs.
        SFC22_INT:INT;
        BLKMOV_INT:INT;
    END_VAR
        IF DB_er THEN
            
            //Erstellen des Datenbausteines mit Hilfe des SFC22.
             
             G:=INT_TO_WORD(GD*AD-1);
             DB_LOW:=INT_TO_WORD(DB_Nr);
             DB_UP:=INT_TO_WORD(DB_Nr+1);
            
             SFC22_INT:=CREAT_DB(LOW_LIMIT := DB_LOW  // IN: WORD
                     ,UP_LIMIT := DB_UP // IN: WORD
                     ,COUNT := G // IN: WORD
                     ,DB_NUMBER := DUMY_Nr // OUT: WORD
                     ); // INT
            
        ELSE
            
            IF WORD_TO_INT(DUMY_Nr) > 0 THEN 
            DB_erstellt:=TRUE;
            END_IF;
        
            
        IF DB_erstellt & S THEN
            
            // Errechnen des Ersten zu schiebenden Datensatzes und des Ersten Ziels.
            ND:=WORD_TO_INT(G)-(2*GD-1);
            NZ:=WORD_TO_INT(G)-(GD-1);
        
        WHILE ND >= 0 DO
            
            BLKMOV_INT:= BLKMOV(SRCBLK :=  // IN: ANY
                   ,DSTBLK :=  // OUT: ANY
                 ); // INT
            
            ;
        END_WHILE;
    
            
            
        ELSE
            
            ;//ENDE!
            
        END_IF;
        END_IF;
        
        
        ;
    END_FUNCTION_BLOCK
    Gibt es überhaupt eine möglichkeit dafür?

  9. #8
    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 BlueDogi Beitrag anzeigen
    Gibt es überhaupt eine möglichkeit dafür?
    in der Regel gilt: Was denkbar ist, ist machbar...

    http://support.automation.siemens.co...ew/de/21946854
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  10. #9
    Registriert seit
    17.10.2013
    Beiträge
    48
    Danke
    10
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Danke ich hab das so weit verstanden aber warum wird für DBX0.0 in dem Pointer dw#16#84000000 angegeben. Das wird mit dem Datentyp zusammen Hängen aber kann man das auch leserlich dastellen?

  11. #10
    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


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von BlueDogi Beitrag anzeigen
    Danke ich hab das so weit verstanden aber warum wird für DBX0.0 in dem Pointer dw#16#84000000 angegeben. Das wird mit dem Datentyp zusammen Hängen aber kann man das auch leserlich dastellen?
    guckst Du hier: http://www.sps-forum.de/faq/12923-an...atentypen.html

    UND: was ist an einer Hexadezimalzahl denn unleserlich?
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

Ähnliche Themen

  1. Antworten: 3
    Letzter Beitrag: 17.04.2014, 20:38
  2. Antworten: 1
    Letzter Beitrag: 11.04.2013, 15:39
  3. Antworten: 17
    Letzter Beitrag: 08.03.2011, 10:00
  4. SCL: FB Aufruf unter SCL mit Variablen DB
    Von ThorstenK im Forum Programmierstrategien
    Antworten: 32
    Letzter Beitrag: 10.02.2011, 19:15
  5. Mehrfacher, gleichzeitiger Aufruf des SFC84
    Von Deichkind im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 31.05.2010, 14:11

Stichworte

Lesezeichen

Berechtigungen

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