TIA FIFO aus der Siemens Libary

Schwarz0815

Level-1
Beiträge
5
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Tag zusammen.

Ich beschäftige mich erstmals mit einem FIFO Baustein und bräuchte Unterstützung.
Zur Aufgabenstellung:
Materialtransport für 6 Verbraucher, bis ein Verbraucher bedient ist dauert es ca. 1 Minute.
Jetzt könnten diese 6 Verbraucher zu unterschiedlichen Zeiten Material benötigen. Deshalb FIFO.

Bis zu diesem Projekt habe ich lediglich Ablaufsteuerungen im FUP realisiert. Mit SCL habe ich keine Erfahrung.
Ich hoffe hier den einen oder anderen Anstoß zu erhalten.

Das ganze passiert mit einer 1200 im Tia Portal V 15.1
Und der Funktion LGF FIFO aus der Siemens LGF V 4.0.3

FB FIFO.jpgDB FIFO.jpg



Beste Grüße
Schwarz0815
 
Ich kann Dir nicht im Detail helfen aber es sollte Funktionieren.
Ich hatte dieselbe Aufgabe mit 8 "Klienten" und EINEM Materialtransport und wenig Ahnung von SCL.
Der Einbau in mein FUP Projekt ging einfach. In der Simulation gut zu testen.
Dieses Problem hatte ich weil ich den "Materialtransport" nach 5min ohne Auftrag abschalte und die "leerlaufmeldung" nicht finden konnte :
FIFO Baustein aus der LGF Bibliothek. Wie "Puffer leer" auswerten?

Bei der Visualisierung der Warteliste habe ich einen Schönheitsfehler aber das ist ja bei Dir nicht gegeben.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo wave.

ich habe sozusagen 6 Klienten und 1 Materialtransport.
Mit dem FIFO bin ich nicht weitergekommen und versuche zur Zeit im FUP lediglich eine Verriegelung zu progamieren das nur ein Klient gleichzeitig bedient wird.
Also 1 stellt eine Anforderung und wird bedient.
Wenn 1 eine Anforderung gestellt hat und während dieser Abarbeitung ein 2 eine stellt, muss er warten.

Soweit klappt es auch....

Aber wen während der Abarbeitung von Anforderung 1 zwei weitere Anforderungen kommen bricht meine Simulation total zusammen.

Wie hast du es gelöst?
Beste Grüße
Schwarz0815
 
ich habe sozusagen 6 Klienten und 1 Materialtransport.
Das ist aber sozusagen leider nur eine sehr vage Beschreibung, nein Andeutung dessen, was Dein Programm tun soll.
Von 6 verschiedenen Quellen kommen irgendwelche Anforderungen und diese sollen nacheinander in der Reihenfolge ihres Eintreffens abgearbeitet werden?
Welche Informationen sollen denn ins FIFO? Z.B. Nr der Quelle, Uhrzeit der Anforderung, Art des Auftrags, . . . ?
Kann eine Quelle mehrere Aufträge ins FIFO eintragen, oder muss sie mit dem Eintrag des nächsten Auftrags warten, bis ihr vorheriger Eintrag aus dem FIFO verschwunden ist?
Etwas konkretere Angaben wären hilfreich, damit wir nicht erst mühsam klären müssen, welche Aufgabe eigentlich gelöst werden soll.

Gruss, Heinileini
 
Hallo Heinileini.

Von 6 verschiedenen Quellen kommen irgendwelche Anforderungen und diese sollen nacheinander in der Reihenfolge ihres Eintreffens abgearbeitet werden?

Genau richtig.

Es ist eine Saugförderanlage.
Von einem großen Behälter wird Granulat zu 6 Stellen gefördert an denen es weiterverarbeitet wird.
Es gibt aber nur eine Saugvorrichtung.
Ein Sensor erkennt wenn Material benötigt wird und es wird eine eingestellte Zeit lang gefördert.

Die genaue Reihenfolge der Aufträge ist nicht sehr wichtig. Wichtiger ist das nur eine Stelle gleichzeitig bedient wird.


mfG
Schwarz0815
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin,

ich würde das ganze ohne den FIFO von Siemens lösen....
Code:
(* Flankenauswertung der Eingänge / Neue Anforderung => ablegen in Ringspeicher*)
FOR #loop_1 := 1 TO 6 DO
    #R_TRIG_anfor[#loop_1](CLK := #anfor[#loop_1]); (* Flankenauswertung Anforderung des Eingangs Array 1-6*)
    
    IF #R_TRIG_anfor[#loop_1].Q THEN
        #ring_speicher_voll := TRUE;                (* INIT Speicher voll => Eigentlich nicht möglich *)
        FOR #loop_2 := 1 TO 6 DO                    
            IF #ring_speicher[#loop_2] = 0 THEN     (* Ermitteln des letzten freien Speichrplatzes *)
                #ring_speicher[#loop_2] := #loop_1; (* Eintrag der Anfordeungs NR. im Ringspeicher *)
                #ring_speicher_voll := FALSE;       (* Rücksetzen Speicher Voll => Freier Speicherplatz wurde gefunden *
            END_IF;
           
           IF NOT #ring_speicher_voll THEN EXIT; // EDIT Speicherplatz suche muss abgebrochen werden wenn Speicherplatz gefunden

        END_FOR;
    END_IF;
END_FOR;
(* Auswertung aktueller Auftrag / Auftrag erledigt*)
#ring_speicher[7] := 0;
FOR #loop_1 := 1 TO 6 DO
    #F_TRIG_erledigt[#loop_1](CLK := #anfor[#loop_1]); (* Flankenauswertung Erledigt des Eingangs Array 1-6*)
    
    IF #F_TRIG_erledigt[#loop_1].Q THEN
        FOR #loop_2 := 1 TO 6 DO                        
            IF #ring_speicher[#loop_2] = #loop_1 THEN   (* Ermitteln des Speicherplatzes der erledigten Anforderung=> eigentlich immer Speicherplatz 1*)
                FOR #loop_3 := #loop_2 TO 6 DO          (* Restlichen Ringspeicher aufrücken *)
                    #ring_speicher[#loop_3] := #ring_speicher[#loop_3 + 1];
                END_FOR;
            END_IF;
        END_FOR;
    END_IF;
END_FOR;
(* Ausgabe Aktueller Auftrag *)
#akt_auftrag := #ring_speicher[1];          (* Ausgabe aktueller Auftrag für Absaugung *)

ist nicht getestet also ohne Garantie.
Was meint ihr?
Gruß

Maggi

EDIT:
Ein Fehler war noch da, die For Schleife bei der Speicherplatzsuche muss abgebrochen werden wenn ein Speicherplatz gefunden wurde, habe ich oben ergänzt....
 
Zuletzt bearbeitet:
Ich habe das 3 jahre alte projekt mit dem Siemens FIFO nochmal angeschaut. Da ist doch ziemlich viel "Beiprogramm" damit e s funktioniert....
Ich bin sicher das der FIFO dein problem lösen kann . Meine Lösung hier zu beschreiben sprengt den Rahmen etwas.
Keine Ahnung ob Maggi`s Code besser ist.
 
Zur Zeit versuche ich es mit zahlreichen Verknüpfungen und Zählern im FUP.
Es ist nicht das ware. Das muss ich zugeben. Die ersten gebrauchbaren Funktionen habe ich zwar schon.
Es ist aber keine strukturierte Abarbeitung von Aufträgen.

Ich ärger mich etwas über meine Ausbildung im Bereich SPS.
Es war ein SPS Kurs an einer Handwerkskammer wo uns beigebracht worden ist an einer S7 300 einen Ablauf zu realisieren. ´´nach Grafcet´´im FUP!!

Wenn ich mir Datenbausteine und Maggis geschriebene Programmierung ansehe, sind es viele neue Bereiche für mich.
 
Moin Moin,

also wenn es nur an der Programmiersprache SCL scheitert, geht das ganze auch in AWL, FUP wird eher schwierig.
Aber die Sprache ist aus meiner Sicht gar nicht das entscheidende, sondern der Lösungsansatz bzw. die generelle Vorgehensweise.

Was gemacht werden muss, ist ja nur:
1. Neue Anforderung => Flankenauswertung Positiv => Merken welcher Eingang => Speichern in Ringspeicher
2. Anforderung geht (Auftrag erledigt) => Flankenauswertung Negativ => Anforderung aus Ringspeicher löschen => Restlichen Speicher aufrücken.

Falls du weitere Unterstützung brauchst melde dich einfach....
 
Zurück
Oben