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

Ergebnis 1 bis 9 von 9

Thema: FIFO Funktion

  1. #1
    Registriert seit
    26.07.2011
    Beiträge
    7
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo!
    Muss eine FIFO Funktion mit einer 1214C realisieren. Kann leider im TIA Portal keinen Baustein dafür finden. Eventuell hat einer von euch nen Tip!
    Es soll mit SCL funktionieren, habe aber damit keine Erfahrung. Aufgabe: Paletten sollen nach Anforderung von 4 verschiedenen Plätzen abgeholt werden.
    Die Reihenfolge der Abholung soll nach der Reihenfolge der Anforderung erfolgen.

    Vielen Dank im Vorraus!

    Gruss Thomas
    Zitieren Zitieren FIFO Funktion  

  2. #2
    Registriert seit
    10.10.2012
    Ort
    LA
    Beiträge
    22
    Danke
    3
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo,
    benutze doch einfach mal die Suchfunktion hier im Forum.

    http://www.sps-forum.de/simatic/5656...d-library.html
    No risk? ---> No FUN!!!

  3. #3
    gustavbond ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    26.07.2011
    Beiträge
    7
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo!
    Habe ich gemacht. Aber in Tia v12 ist diese Tabellenfunktion nicht zu finden.
    Gruss Thomas

  4. #4
    Registriert seit
    10.10.2012
    Ort
    LA
    Beiträge
    22
    Danke
    3
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Also bei mir ist die genau da zu finden! Hab es extra gerade nochmal nachgeschaut.
    No risk? ---> No FUN!!!

  5. #5
    gustavbond ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    26.07.2011
    Beiträge
    7
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Welche CPU hast du ausgewählt?
    Bei der 1214C ist bei den erweiterten Anweisungen die Tabellen Funktion nicht vorhanden. Benutze TIA V12

  6. #6
    gustavbond ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    26.07.2011
    Beiträge
    7
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Wenn ich ne 315-2-DP auswähle dann ist die Tabellenfunktion vorhanden. Aber nicht bei den CPUs der 1200er Serie.

    Gruss Thomas

  7. #7
    Registriert seit
    10.10.2012
    Ort
    LA
    Beiträge
    22
    Danke
    3
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Da geb ich dir recht, hab nochmal nachgeschaut und der Baustein ist für die 300er und 400er!
    No risk? ---> No FUN!!!

  8. #8
    gustavbond ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    26.07.2011
    Beiträge
    7
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hast du eventuell noch ne Idee für die CPU 1214C?

  9. #9
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.314
    Danke
    932
    Erhielt 3.329 Danke für 2.688 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von gustavbond Beitrag anzeigen
    Muss eine FIFO Funktion mit einer 1214C realisieren. [...]
    Es soll mit SCL funktionieren, habe aber damit keine Erfahrung. Aufgabe: Paletten sollen nach Anforderung von 4 verschiedenen Plätzen abgeholt werden.
    Die Reihenfolge der Abholung soll nach der Reihenfolge der Anforderung erfolgen.
    Du könntest die Forumsuche benutzen mit den Suchbegriffen "FIFO SCL" und würdest u.a. zwei fertige aber spezielle FIFO-Bausteine in SCL finden:
    FIFO Puffer in SCL
    SCL FIFO mit zwei Ausgabewerten

    Allerdings ist ein FIFO mit Puffer-Array und Füllstandsverwaltung für Dein kleines Problem wohl etwas oversized.

    Bei Dir können maximal 4 Transportanforderungen vorliegen, von jedem der 4 Plätze maximal eine --> der FIFO braucht nur 4 Speicherplätze zu haben. Er kann nicht überlaufen --> Überlauf braucht also nicht überwacht zu werden.
    Im Grunde reicht ein WORD als Puffer, um 4 Dezimalzahlen in beliebiger Reihenfolge hineinzuschreiben und zeitlich geordnet wieder herauszuholen.

    Hier mal eine Anregung für diesen FIFO in Form eines WORD-Schieberegisters. Die sollte notfalls auch in FUP/KOP realisierbar sein.
    Code:
    FUNCTION_BLOCK FB104
    VAR
        wQueue : WORD := 0 ;  // der FIFO-Pufferspeicher
        xTransport_aktiv : BOOL := FALSE ;
        xPlatz1_registered : BOOL ;
        xPlatz2_registered : BOOL ;
        xPlatz3_registered : BOOL ;
        xPlatz4_registered : BOOL ;
    END_VAR
    VAR_TEMP
        wNextP : WORD ;  // Nr. nächster Transport, aus dem Pufferspeicher geholt
    END_VAR
    
        // wQueue: FIFO als Schieberegister, WORD für 4 Plätze ("Array OF Nibble")
    
        //*** in FIFO einspeichern ***
        IF xPlatz1_belegt AND NOT xPlatz1_registered THEN  // Anforderung von Platz 1?
            wQueue := SHL(IN := wQueue, N := 4) OR 1 ;     // zu FIFO hinzufügen
            xPlatz1_registered := TRUE ;                   // Anforderung wurde registriert!
        END_IF ;
    
        IF xPlatz2_belegt AND NOT xPlatz2_registered THEN  // Anforderung von Platz 2?
            wQueue := SHL(IN := wQueue, N := 4) OR 2 ;     // zu FIFO hinzufügen
            xPlatz2_registered := TRUE ;                   // Anforderung wurde registriert!
        END_IF ;
    
        IF xPlatz3_belegt AND NOT xPlatz3_registered THEN  // Anforderung von Platz 3?
            wQueue := SHL(IN := wQueue, N := 4) OR 3 ;     // zu FIFO hinzufügen
            xPlatz3_registered := TRUE ;                   // Anforderung wurde registriert!
        END_IF ;
    
        IF xPlatz4_belegt AND NOT xPlatz4_registered THEN  // Anforderung von Platz 4?
            wQueue := SHL(IN := wQueue, N := 4) OR 4 ;     // zu FIFO hinzufügen
            xPlatz4_registered := TRUE ;                   // Anforderung wurde registriert!
        END_IF ;
    
        //*** aus FIFO herausholen ***
        IF NOT xTransport_aktiv THEN
            IF wQueue <> 0 THEN  // FIFO enthält Einträge
                IF (wQueue AND W#16#F000) <> 0 THEN        // Eintrag an FIFO-Pos.4?
                    wNextP := SHR(IN := wQueue, N := 12) ; // dann Eintrag kopieren
                    wQueue := wQueue AND W#16#0FFF ;       // und aus FIFO löschen
    
                ELSIF (wQueue AND W#16#0F00) <> 0 THEN     // Eintrag an FIFO-Pos.3?
                    wNextP := SHR(IN := wQueue, N := 8) ;  // dann Eintrag kopieren
                    wQueue := wQueue AND W#16#00FF ;       // und aus FIFO löschen
    
                ELSIF (wQueue AND W#16#00F0) <> 0 THEN     // Eintrag an FIFO-Pos.2?
                    wNextP := SHR(IN := wQueue, N := 4) ;  // dann Eintrag kopieren
                    wQueue := wQueue AND W#16#000F ;       // und aus FIFO löschen
    
                ELSE
                    wNextP := wQueue ;                     // Eintrag von FIFO-Pos.1 kopieren
                    wQueue := 0 ;                          // und FIFO löschen
                END_IF ;
            ELSE  // wQueue = 0 : FIFO ist leer
                wNextP := 0 ;
            END_IF ;
    
            // zu gespeicherter Anforderung gehörenden Transport starten
            CASE WORD_TO_INT(wNextP) OF
                1 : IF xPlatz1_belegt THEN
                        xTransport_aktiv := TRUE ;
                        //Starte_Transport_von_P1 ...
                    ELSE
                        xPlatz1_registered := FALSE ;      // Palette verschwunden!
                    END_IF ;
    
                2 : IF xPlatz2_belegt THEN
                        xTransport_aktiv := TRUE ;
                        //Starte_Transport_von_P2 ...
                    ELSE
                        xPlatz2_registered := FALSE ;      // Palette verschwunden!
                    END_IF ;
    
                3 : IF xPlatz3_belegt THEN
                        xTransport_aktiv := TRUE ;
                        //Starte_Transport_von_P3 ...
                    ELSE
                        xPlatz3_registered := FALSE ;      // Palette verschwunden!
                    END_IF ;
    
                4 : IF xPlatz4_belegt THEN
                        xTransport_aktiv := TRUE ;
                        //Starte_Transport_von_P4 ...
                    ELSE
                        xPlatz4_registered := FALSE ;      // Palette verschwunden!
                    END_IF ;
    
            END_CASE;
    
        END_IF ;
    
        //wenn ein Transport beendet wird oder schon wenn die Palette den Warteplatz verlassen hat,
        //dann die zugehörige "xPlatzx_registered" auf FALSE rücksetzen
        //kann man vorsichtshalber auch für alle "xPlatzx_registered" machen, wenn der FIFO leer ist
    
    END_FUNCTION_BLOCK
    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

Ähnliche Themen

  1. FIFO mit S7 ????
    Von moclam im Forum Simatic
    Antworten: 14
    Letzter Beitrag: 24.10.2013, 10:43
  2. Antworten: 9
    Letzter Beitrag: 04.01.2012, 07:45
  3. Fifo Bit
    Von Jordy im Forum Simatic
    Antworten: 28
    Letzter Beitrag: 28.06.2008, 22:11
  4. Fifo S7
    Von stevexxx im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 18.03.2008, 14:45
  5. Fifo
    Von sweber im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 14.06.2007, 15:06

Lesezeichen

Berechtigungen

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