Step 7 Automatischer Versatz von 5 Teilen

tommylik

Level-2
Beiträge
130
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo an alle,

Wir haben eine Förderstrecke die Türen zu einem Nacharbeitsplatz transportiert.
Normalerweise abwechselnd "Tür vorne" dann "Tür hinten". Es können aber auch mal
2 oder 3 gleiche Türen hintereinander kommen weil Türen eingeschleust wurden.
Über ein EB (Char) bekomme ich die Kennung welche Tür einläuft. 'V' oder 'H'.
Diese EB nutze ich zum zählen (Addierer) der Türen. Mit einem Vergleicher überwache ich den Iststand.
Bei jeder 10. Tür vorne und bei jeder 10. Tür hinten blinkt eine Lampe für den Mitarbeiter.

Das funktioniert soweit ganz gut. War mit 5 Netzwerke in KOP erledigt.
Nun mein Problem wo Ihr vielleicht eine Idee für mich habt.
Die Nacharbeiter haben mich gefragt ob ich einen Versatz von 5 einbauen könnte,
weil zur Zeit sind beide Türen nach einander zu bearbeiten.

Prüfserie.JPG

Ich müßte z.B. mit der "Tür vorne" beim Schichtwechsel das zählen mit 5 vorbelegen und dann auf 10 um switchen. Aber wie?
Und mein ganz großes Problem ist, was mache ich wenn mal eingeschleust wurde und es kommen z.B. 2 "Tür vorne" hintereinander.
Dann habe ich automatisch einen Versatz. Wie kann man es hinbekommen das der Versatz immer 5 ist.

Vielen Dank im vorraus.

Mfg Tommylik
 
Ich versteh die Aufgabe nicht ganz. Gibt es zwei Lampen? Soll sobald 10 bzw 5 Türen in der NA sind die Lampe leuchten?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Dein "kleines Problem" ist ja bei Schichtwechsel mit 5 beginnen und danach mit 10. Das ist noch einfach. Button Schichtwechsel oder so wirst ja haben. Wird der gedrückt, dann einfach die 5 als Zählwert vorbelegen z.B. bei TV und bei TH mit 0. Beim nächsten Mal arbeitet Dein Zählwert ja so oder so mit 10 weiter, ist ja voreingestellt. Also bleibt der Versatz.


Dein "großes" Problem ist ja das zusätzliche Einschleusen.
Also, wenn der Versatz drin ist darf er nicht geändert werden, es sei denn die eingeschleuste Tür soll nicht in die NA sondern Ausschuss oder separate Ablage zur späteren Bearbeitung.

Um Deinen Versatz von 5 immer beizubehalten darf einfach niemals eingeschleust werden ohne das V und H zusammen eingeschleust werden. Sonst verändert der Versatz sich.
Oder aber Du erstellst eine Regel am Ausgabeplatz (wo Du zählst), das wenn 2 Türen nacheinander gleich sind, diese beiseite gestellt werden müssen und sobald dann das Gegenstück mal doppelt vorkommt müssen die diese beiseite gestellte nutzen sowie das Gegenstück um ein Paar zu haben und dann entweder einen Button drücken für "habe am NA-Platz V eingeschleust" bzw. das gleiche für H oder aber darauf vertrauen das die das doppelte Gegenstück dann mit dem beiseite gestellten zusammen nacheinander bearbeiten und dann den beiseite gestellten zählen.

Wird auf jeden Fall schwierig, da ein "immerwährender" Versatz von 5 nicht möglich ist, wenn die Dinge unterschiedlich kommen und die Mitarbeiter in der NA ziemlich stark aufpassen müssen was die da tun. Ich tippe darauf das geht ca. 2-3 Mal 10 Stück gut, danach sind die in ihrem Rhythmus und "vergessen" es oder aber merken wie umständlich das nun ist.

Vielleicht aber irre ich mich und jemand hat die Idee hierfür, lasse mich gerne überraschen.

edit: Blödes ÄÖÜ :D
 
Hallo TP-Inc,

Vielen Dank für deine Antwort.

Gibt es zwei Lampen? Soll sobald 10 bzw 5 Türen in der NA sind die Lampe leuchten?

Es gibt nur eine Lampe.

Zur Zeit blinkt diese Lampe was sie auch soll.

Was verstehst du denn nicht?

Eine Förderstrecke mit Gehängen. In den Gehängen sind Türen. Hintereinander kommem sie in die Nacharbeit eingefahren.
TV | TH | TV | TH | TV | TH | TV | TH |TV | TH | TV | TH usw... An einer gewissen Stelle zähle ich diese Türen.
Und wenn 9 Türen vorne und 9 Türen hinten an dieser Stelle vorbeigefahren sind,
dann blinkt einmal bei der 19. und dann nochmal bei der 20. Tür die Lampe und der Nacharbeiter macht seine
spezielle Arbeit mit diesen beiden Türen. Beim ausfahren dieser gewissen Stelle wird der Zähler auf Null gestellt
und es beginnt wieder von vorne. Bis hier ist alles in Ordnung und es war auch anfangs so gewollt.

Was meine Kollegen mich gefragt haben ist ob ich einen Versatz einbauen könnte.
Anstatt alle 20 Türen 2 Türen zu prüfen besser alle 10 Türen eine Tür prüfen.

Prüfserie2.JPG


Ich hoffe es ist dir jetzt klarer.

Vielen Dank nochmal für deine Antwort.

Mfg Tommylik
 
Hallo Tommy,

Wie wichtig ist es das immer jede 10. andere Seite geprüft wird? Durch das Einschleusen von nur einer Seite kann der Versatz nicht gehalten werden oder man nimmt in Kauf das man eventuell 1-X überspringt, wobei dann ungezählte gleiche Seiten nicht gezählt werden um den Versatz zu halten. Wo liegt da also die Toleranz bzw. was soll dann gemacht werden?

Ein ähnliches Programm habe ich bereits mal gemacht, allerdings mit einer Überprüfung auf 27 Bauteile für eine Komissionierung. Dort mussten immer 27 verschiedene Teile in 40 verschiedene Boxen geschickt werden, da eine Ausgabebahn immer zeitgleich nur ein Teil haben durfte und die Teile ungleich gekommen sind. Sollten zuletzt doppelte Teile kommen konnte die Anlage diese umleiten und selbst erneut einschleusen. Könnte das aber runterbrechen auf nur zwei Teile, ist allerdings in SCL(S7-1200) in einem FB.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo escride1,

Vielen Dank für deine Antwort und Hilfe.
Wichtig wäre das ein Versatz vorhanden ist. Weil 2 Türen hintereinander prüfen sehr aufwendig ist da die Taktzeit sehr gering ist.
Ich habe deine Idee mit den 5 zum Schichtwechsel und dann wieder 10 im Simulator mal ausprobiert. Sehr gut.
Ich muß einfach mal eine Schicht lang beobachten ob das reicht. Eingeschleust wird pro Schicht öfters. Teile werden in der NA nicht rausgenommen.
Wenn du magst kannst du deinen FB ja mal auf 2 Teile umändern. Vielleicht kann ich ihn nutzen.

Also vielen Dank noch mal für deine Hilfe.

Mfg Tommylik
 
So, habe es mal eben angepasst.
Versuch den mal einfach einzufügen und trigger den Zähleingang mit der Clock 0,5Hz. Kannst Dir dann in Ruhe im DB ja anschauen der erstellt wird.

Eigentlich zählt er mit einem Zähler 10 Türen ab. Dann wird er die erste anzeigen. Sobald die nächste Tür vorfährt wird die Lampe ausgehen. Nach 10 Türen wird geprüft ob es die gleiche wie beim letzten Mal ist. Ist es so, dann zählt er den Zähler "übersprungene Türen" auf. Sollte "max Anzahl Türen" überspringen aber auf 0 stehen, so würde er diese Türe dennoch anzeigen, wodurch es passieren kann das dann zweimal hintereinander im Abstand von 10 die gleichen kommen. Darf der Versatz geändert werden, also einfach "max Anzahl Türen überspringen" auf z.B. 5 stellen, wodurch dann die 11. bis 15. angezeigt wird, aber eben unterschiedliche. Dadurch würde der Versatz also immer mindestens 10, maximal 15 betragen.

Code:
FUNCTION_BLOCK "Zählung"
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1
   VAR_INPUT 
      Neustart : Bool;   // TRUE setzt Zählung auf 0 (CPU-Start z.B. oder Schichtwechsel)
      Zähleingang : Bool;   // Eingang des INIs der die Aufhänger sieht an der Station
      "aktuelle Tür" : String[2];   // Bezeichnung der aktuellen Tür an der Station
      "jede xTe Tür ausschleusen" : Int := 10;   // Alle X Türen sollen angezeigt werden
      "max Anzahl Türen überspringen" : Int := 0;   // 0=nicht, ansonsten Anzahl
   END_VAR


   VAR_OUTPUT 
      Output_LED : Bool;   // Lampenausgang
   END_VAR


   VAR 
      "letzte Tür" : String[2];   // Hilfsmerker für Erkennung unterschiedlicher Türen
      "übersprungene Türen" : Int := 0;   // Zähler
      Zähler : Int := 0;   // Zähler
      Zählerreset : Bool;   // intern Zähler rücksetzen
      FL_1 : Bool;   // Flankenmerker
      FL_2 : Bool;   // Flankenmerker
      HM_1 : Bool;   // Hilfsmerker um Output_LED nicht lesen zu müssen (IEC-konform)
   END_VAR




BEGIN
	IF #Neustart AND NOT #FL_2 THEN // Bei pos. Flanke Neustart einmalig rücksetzen
	    #Zähler := 0;
	    #Output_LED := FALSE;
	    #"letzte Tür" := 'ZW';
	    #"übersprungene Türen" := 0;
	    #Zählerreset := FALSE;
	    #HM_1 := FALSE;
	END_IF;
	#FL_2 := #Neustart; // benötigt für Flankenerkennung
	IF #Zähleingang AND NOT #FL_1 THEN // bei pos. Flanke zählen
	    IF #Zählerreset THEN // Soll der Zähler zurückgesetzt werden?
	        #Zähler := 1;  // Ja, Zähler rücksetzen
	        #Output_LED := FALSE;
	        #HM_1 := FALSE;
	        #Zählerreset := FALSE;
	    ELSE
	        #Zähler := #Zähler + 1;    // Nein, Zählung erhöhen
	    END_IF;
	END_IF;
	#FL_1 := #Zähleingang; // benötigt für Flankenerkennung
	IF #Zähler>=#"jede xTe Tür ausschleusen" THEN  // Ist der Zähler bei X angekommen?
	    IF #"aktuelle Tür" <> #"letzte Tür" THEN    // die Tür ist eine andere als wie beim letzten Male?
	        #Output_LED := TRUE;   // Ja, Lampe einschalten
	        #"letzte Tür" := #"aktuelle Tür";  // Letzte Tür auf diese Tür setzen
	        #Zählerreset := TRUE; // Zähler bei der nächsten Tür zurücksetzen
	        #"übersprungene Türen" := 0;
	        #HM_1 := TRUE;
	    ELSE    // Falls letzte Tür und diese Tür aber die gleichen sind
	        IF NOT #HM_1 THEN
	            #Zähler := #"jede xTe Tür ausschleusen" - 1;  // Zähler um einen Wert zurücksetzen, also auf X-1 damit bei der nächsten vorbeikommenden Tür nochmals geprüft wird ob es diesmal eine andere ist
	            #"übersprungene Türen" := #"übersprungene Türen" + 1;
	        END_IF;
	    END_IF;
	// zusätzliche Prüfung um nicht zu viele zu überspringen erstellen
	    IF #"übersprungene Türen" > #"max Anzahl Türen überspringen" THEN // Prüfung ob wir schon X übersprungen haben, Zwang erstellen um die jetzige zu nehmen. Da es 'Z' nicht gibt wird die Prüfung immer ungleich sein.
	        #Zähler := #"jede xTe Tür ausschleusen"; // Auf X, weil wir eben schon auf X-1 gesetzt haben
	        #"letzte Tür" := 'ZW'; // Ungleichheit erzwingen
	    END_IF;
	
	END_IF;
	
END_FUNCTION_BLOCK
 
Hallo escride1,

Vielen Dank für deine Mühe und Hilfe.

Als erstes deine Idee zum Schichtwechsel ist gut. Vielleicht brauche ich nichts mehr machen.

Ich bin noch nicht dazu gekommen den Baustein zu testen. Ich schaue ihn mir gerade an.

Du hast ihn in SCL für eine (S7-1200) geschrieben gleich mal eine Frage, bekomme ich bei einer S7-1500 Probleme?
Bei einigen Variablen hast du Anführungszeichen gesetzt die muss ich dann für mich noch anpassen oder ist das so gewollt?
Dann hast du eine String Variable mit 2 Zeichen benutzt mit 'ZW' als Vorgabe, ich habe nur ein Zeichen 'V' oder 'H'.

Ich bin ein wenig verwirrt da die FBs in SCL in der S7-1500 anders aus sehen.

Vielen Dank für deine Hilfe.

Mfg Tommylik
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi,

SCL in der 1200 und 1500 sind eigentlich gleich. Es gibt einige Dinge die die 1500er mehr kann, teilweise andere Bausteine nutzt, wird aber mit dem Baustein hier keine Probleme bereiten.

Eine Variable in welcher man Leerzeichen nutzt wird in Anführungszeichen gesetzt damit erkennbar ist das es diese eine Var sein soll und zusammenhängend ist.

String mit 2 Zeichen habe ich genommen weil Du TV / TH geschrieben hast. Falls Du nur V oder H hast kannst Du ja auch Char nutzen. Dann wird aus ZW halt Z

Anders aussehen tun die FBs nicht, das ist eine generierte Quelle des vollständigen FBs. Da steht mehr drin als man so im Baustein sieht, kann also nicht einfach komplett in den SCL-Code kopiert werden.

Der eigentliche SCL-Code sieht so aus, hier nun in Form mit Char.
Code:
IF #Neustart AND NOT #FL_2 THEN // Bei pos. Flanke Neustart einmalig rücksetzen
    #Zähler := 0;
    #Output_LED := FALSE;
    #"letzte Tür" := 'Z';
    #"übersprungene Türen" := 0;
    #Zählerreset := FALSE;
    #HM_1 := FALSE;
END_IF;
#FL_2 := #Neustart; // benötigt für Flankenerkennung
IF #Zähleingang AND NOT #FL_1 THEN // bei pos. Flanke zählen
    IF #Zählerreset THEN // Soll der Zähler zurückgesetzt werden?
        #Zähler := 1;  // Ja, Zähler rücksetzen
        #Output_LED := FALSE;
        #HM_1 := FALSE;
        #Zählerreset := FALSE;
    ELSE
        #Zähler := #Zähler + 1;    // Nein, Zählung erhöhen
    END_IF;
END_IF;
#FL_1 := #Zähleingang; // benötigt für Flankenerkennung
IF #Zähler >= #"jede xTe Tür ausschleusen" THEN  // Ist der Zähler bei X angekommen?
    IF #"aktuelle Tür" <> #"letzte Tür" THEN    // die Tür ist eine andere als wie beim letzten Male?
        #Output_LED := TRUE;   // Ja, Lampe einschalten
        #"letzte Tür" := #"aktuelle Tür";  // Letzte Tür auf diese Tür setzen
        #Zählerreset := TRUE; // Zähler bei der nächsten Tür zurücksetzen
        #"übersprungene Türen" := 0;
        #HM_1 := TRUE;
    ELSE    // Falls letzte Tür und diese Tür aber die gleichen sind
        IF NOT #HM_1 THEN
            #Zähler := #"jede xTe Tür ausschleusen" - 1;  // Zähler um einen Wert zurücksetzen, also auf X-1 damit bei der nächsten vorbeikommenden Tür nochmals geprüft wird ob es diesmal eine andere ist
            #"übersprungene Türen" := #"übersprungene Türen" + 1;
        END_IF;
    END_IF;
    // zusätzliche Prüfung um nicht zu viele zu überspringen erstellen
    IF #"übersprungene Türen" > #"max Anzahl Türen überspringen" THEN // Prüfung ob wir schon X übersprungen haben, Zwang erstellen um die jetzige zu nehmen. Da es 'Z' nicht gibt wird die Prüfung immer ungleich sein.
        #Zähler := #"jede xTe Tür ausschleusen"; // Auf X, weil wir eben schon auf X-1 gesetzt haben
        #"letzte Tür" := 'Z'; // Ungleichheit erzwingen
    END_IF;
    
END_IF;

Wenn Du den Teil so kopierst und in einen neuen Baustein einfügst musst Du die Variablen im Kopf selbst definieren.
Dann wäre das so:

Input:
Neustart Bool
Zähleingang Bool
aktuelle Tür Char
jede xTe Tür ausschleusen Int
max Anzahl Türen überspringen Int

Output:
Output_LED Bool

Static:
letzte Tür Char
übersprungene Türen Int
Zähler Int
Zählerreset Bool
FL_1 Bool
FL_2 Bool
HM_1 Bool
 
Hallo escride1,

Vielen Dank für deine Erklärung.

Das mit den Anführungszeichen da habe ich mich ja gut blamiert.
Ist doch bei anderen Programmiersprachen auch so.

Eine Frage hätte ich da noch.
In der Classic Welt konnte man so schön auf den Quell-Ordner gehen
Rechte Maustaste - Neues Objekt einfügen- aus externer Quelle- übersetzen - fertig.

Im TIA Portal habe ich nichts gefunden oder bin ich blind?

Vielen Dank nochmal für deine tolle Hilfe.

Mfg Tommylik
 
Ich stell manchmal auch dumme, offensichtliche Fragen wo dann nur n komischer Gesichtsausdruck kommt :D

Ja, im TIA-Portal würden Quellen über Openness importiert so wie ich es bisher verstanden habe. Das schicke simple Importieren ist wohl irgendwie verloren gegangen. Heute soll man das ganze wohl über Openness, Bibliothek oder Referenzprojekt machen, wobei ich den Umweg Openness nicht gerade einfach finde.

Ich habe den Baustein eben in eine Bibliothek eingefügt (TIA V15.1). Die kannst Dir ja runterladen, entpacken, dann rechts über Globale Bibliotheken öffnen und unter Kopiervorlagen den Baustein fertig in Dein Projekt ziehen. Auf ein älteres TIA kann ich grad nicht zugreifen.
 

Anhänge

Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Das schicke simple Importieren ist wohl irgendwie verloren gegangen.

Nein. Ist es nicht. UIm Projektbaum unter Externe Quelle. Was nicht mehr geht ist KOP/FUP import
Export einfach rechtsklick auf den baustein und quelle generieren (auch kein kop/fup)
 

Similar threads

Zurück
Oben