Step 7 Schieberegister

TK100

Level-1
Beiträge
49
Reaktionspunkte
2
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

E0.0 Gabellichtschranke
E0.1 Maschinentakt
A0.0 Pneu Zylinder


Ich habe folgende Herausforderung:
Flaschen fahren über eine Schnecke zu einer Verschluss pick Einrichtung 1 Maschinentakt
entspricht einer Flasche sprich ein Deckel wird gepickt.
Entsteht nun eine Lücke (soll durch die Gabel erkannt werden) einer oder mehrerer Flaschen muss ein Zylinder A0.0 in X Takten (ca 5 Flaschen sind dann noch vor der Lücke) zu machen und die Verschlüsse festhalten.
Kommt nun wieder eine Flasche müssen wieder die X Takte später der Zylinder wieder aufmachen.

Ich wäre Dankbar für Ansätze am liebsten in FUP da ich Wahrscheinlich Tia Portal Basic verwenden werde und da kein AWL habe.
Sowas hat wohl schon mal jemand gemacht der es wohl mithilfe von Schieberegistern gelöst hat.
Leider hatte ich damit noch nie zu tun und es ist mir auch nicht klar wie ich die hier einsetzen könnte.
Ich habe schon einige Versuche mit Zählern unternommen, die jedoch noch zu keinem brauchbaren Ergebnis geführt haben.
Das Problem ist wenn ich während ich bis 5 Zähle nochmal eine Flasche kommt.
Vielleicht kann ja meine Anwendung jemand nachvollziehen und mir ein wenig helfen.
Vielen Dank im Voraus und Gruß TK
 
Da es nur "Flasche" oder "nicht Flasche" gibt, reicht ja Bitspeicherung.

Der Einfachheit halber mal ein Ansatz mit Merkern:

Schieberegister Bit im Byte.jpg


Prinzipiell würde ich ein Schieberegister aber eher mit SCL und einem entsprechenden Array aufbauen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hab' das mal spaßeshalber in TIA für S7-1214C als FB mit Array und in FUP (KOP) erstellt.
Sollte dann in etwa so aussehen (ungetestet):

Schieberegister FUP - Schnittstelle.jpg

Schieberegister FUP.jpg


PS: Welcher Depp hat sich denn ausgedacht, dass Arrays zwar mit INT deklariert und adressiert werden, aber zum Füllen und Verschieben in FUP/KOP dann INT nicht als Count zulässig ist?
 
Vor gaaaanz vielen Jahren hatte hier mal ein Kollege ien ähnliches Problem, da sollten NIO-Flaschen irgendwann später ausgeworfen werden.
Möglicherweise für deinen Fall zu viel, aber als Anregung: #10
 
Das ist schon richtig so. Die Indizes von Arrays können durchaus negativ sein, die Anzahl von Elementen in einem Array aber nicht.
Man kann am COUNT auch Werte angeben, die größer als der Quell- oder Zielbereich sind. Dann geben die Blocks am ENO eine 0 aus. Hätte doch z.B. für negative COUNTS genauso gemacht werden können (wenn ich es als Programmierer versäumt habe, darauf selbst zu achten).
8)
 
Also sorry aber ich komme im moment noch gar nicht damit klar.
Ich hab das mal in WinSps7 in AWL ausprobiert da komm ich einigermaßen klar.
Aber ich muss es in FUP im TIA Portal schaffen. So langsam mag ich das TIA schon gar nicht mehr so.
hier mal mein Ansatz in AWL.
10 Verschlußkontrolle
11 U "Flasche im Einlauf" E4.1
12 FP M 24.2
13 = M 24.0
14
15 U "Flasche im Einlauf" E4.1
16 FN M 24.3
17 = M 24.1
18
19 U "Maschinentakt 1" E6.0
20 FP M 26.1
21 = M 26.2
22
23 U M 24.0
24 S M 101.0
25 S M 101.1
26
27 U M 26.2
28 SPB m001
29
30 U M 101.2
31 = "MV Kurzhub Auf" A3.5
32
33 UN "MV Kurzhub Auf" A3.5
34 = "MV Kurzhub Zu" A3.6
35 BEA
36
37 m001 :L MW 100
38 SLW 1
39 T MW 100
40 BE
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,


ich bin aktuell von Omron zu Tia gewechselt und habe noch etwas Schwierigkeiten. Nun habe ich ein Projekt bei dem Pakete über Förderbänder laufen.
An einer bestimmten Postion wird ein Barcode auf dem Paket gescannt. Bei nicht erkennen oder lesen der Barcodes ( NoRead ) soll das Paket auf dem nächsten Förderband stehen bleiben und entnommen werden.
Über Start Taster läuft das Band weiter. Bis dahin ist es kein Problem.
Bis das Paket aber auf dem nächsten Förderband ist und gestoppt hat, kann das nachfolgen Paket auch schon wieder ein nicht gescanntes Paket sein ( NoRead ) welches dann später auch zum stoppen kommen soll, wenn das Paket davor entnommen wurde.
Also habe ich gleichzeitig mehrere NoReads. An diesem Punkt komme ich nun nicht weiter. Wie kann ich ein Signal gleichzeitig auf mehrere Pakete verarbeiten bzw. anstehen, merken lassen? Ich bin auf die Schieberegister gekommen. Leider habe ich damit keinerlei Erfahrung.
Wäre das ein Ansatz?


Ich wäre sehr Dankbar für Vorschläge
 
An einer bestimmten Postion wird ein Barcode auf dem Paket gescannt. Bei nicht erkennen oder lesen der Barcodes ( NoRead ) soll das Paket auf dem nächsten Förderband stehen bleiben und entnommen werden.
Über Start Taster läuft das Band weiter.
Auf Band 1 wird versucht, den Barcode des Pakets zu scannen und auf Band 2 soll jedes nicht erfolgreich gescante Paket irgendwann an einer Entnahmestelle ankommen und warten, bis es entnommen und Band 2 per TastenDruck zum Weiterlaufen freigegeben wird.
Welche Pakete kommen denn auf Band 2? Nur diejenigen, die nicht erfolgreich gescant wurden oder auch die erfolgreich gescanten?
- Falls nur die nicht erfolgreich gescanten, dann hast Du es an Band 2 relativ einfach und musst ggfs "nur" Band 1 zusätzlich stoppen (sofern nicht an der Übergabestelle von Band 1 auf Band 2 irgendeine Form von Pufferung für mehrere Pakete realisiert und sie noch aufnahmefähig ist). Da der Barcode ohnehin nicht erkannt wurde, hast Du nicht das Problem, dem Paket irgendwelche unbekannten Daten zuordnen zu müssen.
- Falls auf Band 2 auch die erfolgreich gescanten Pakete an der Entnahmestelle vorbei kommen, müsstest Du schon unterscheiden können, ob sich an der Entnahmestelle ein erfolgreich oder nicht erfolgreich gescantes vorbei kommt.
Ich unterstelle mal, dass die beiden Bänder (wenigstens zeitweise) unterschiedliche bzw. veränderliche Geschwindigkeiten haben können. Das wäre keine gute Voraussetzung, um die Verfolgung der Pakete über Zeiten zu versuchen. Besser wäre es, wenn man von beiden Bändern zu jeder Zeit je einen Positionswert zurückgemeldet bekommt und damit arbeiten kann.
 
Auf dem Band zwei kommen alle Pakete an, allerdings sollen nur bei einem NoRead die Bänder stoppen und das NoRead Paket entnommen werden. Band 1 und Band 2 laufen mit der gleichen Geschwindigkeit von 0,5m/s. Das erste NoRead Paket wird direkt nach einer Lichtschranke auf Band 1 erkannt. Durch eine weitere Lichtschranke auf Band 2 kann man dann sagen, das es entnommen werden soll. Aber bis das erste Paket entnommen wird, können zeitgleich schon weitere NoRead Pakete auf Band 1 sein. Wie kann ich diese dann später auch stoppen / erkennen? Ich habe nur ein NoRead Signal welches beim ersten Paket mit einem Merker oder ähnliches gesetzt ist. Das erste Signal ist noch nicht abgearbeitet und es stehen schon weitere an.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Du musst jedem Paket die Information mit auf die Reise geben, ob es OK ist oder aussortiert werden muss. Wenn es OK ist, trägst Du die eingelesene ID-Nr(n) ein. Wenn es nicht OK ist, könntest Du z.B. als ID-Nr eine 0 eintragen oder (zusätzlich) einen eigenen SpeicherPlatz mitführen für speziell diesen Zweck der Kennzeichnung.
Ich würde für Band 1 ein FIFO 1 und für Band 2 ein FIFO 2 verwenden.
Ein FIFO (First In First Out) ist eine Art von SchiebeRegister. Eigentlich eine Tabelle mit mehreren Zeilen und oft nur 1 Spalte, aber meistens sind mehrere Spalten sinnvoll - so auch hier:
z.B. eine Spalte für die eingescanten ID-Nrn, eine weitere Spalte, in der wir die vom Band zum Zeitpunkt des Eintrags gemeldete Position eintragen, ggfs eine weitere Spalte für "Scan (nicht) erfolgreich" und evtl. weitere Spalten für weitere Informationen, die eingescant werden oder für Merkmale, die gemessen werden (z.B. Maße oder Masse oder Farbe des Pakets).
Für jedes Paket, das die ScanPosition passiert, tragen wir eine Zeile in die Tabelle ein. Für jedes Paket, das das Band verlässt, "löschen" wir die entsprechende Zeile wieder bzw. wir geben sie für eine neue Benutzung wieder frei. Ein Zeiger (enthält den Index der entsprechenden Zeile) zeigt auf die erste freie Zeile und ein anderer auf die letzte belegte Zeile.

Woher erfahren wir nun, wann ein Paket auf Band 1 das Ende von Band 1 erreicht hat oder wann ein Paket auf Band 2 die EntnahmePosition?
Wir lesen ständig die aktuelle Position von Band 1 und Band 2 ein und vergleichen sie mit der Summe aus der im FIFO abgespeicherten Position plus dem Abstand zwischen
- (bei Band 1) der ScanStelle und der Übergabestelle von Band 1 an Band 2
- (bei Band 2) der ÜbergabeStelle von Band 1 an Band 2 und der EntnahmeStelle
und sehen dadurch, wann das Paket die entsprechende Stelle passiert.
So sind wir unabhängig davon, wie schnell die Bänder (wenn überhaupt) laufen. So muss z.B. nicht Band 1 synchron gestoppt werden, wenn Band 2 gestoppt wird.
Aber etwas wichtiges fehlt noch: Wenn Band 1 ein Paket an Band 2 übergibt, müssen auch seine Daten in FIFO 2 eingetragen und in FIFO 1 "gelöscht" werden.
Die in FIFO 1 eingetragene Position ist aber für FIFO 2 irrelevant. In FIFO 2 tragen wir die aktuelle Position von Band 2 zum ZeitPunkt der Übergabe ein.

Wieviele Zeilen müssen die FIFOs haben? Das hängt davon ab, wie viele Pakete sich maximal gleichzeitig auf dem jeweiligen Band (in dem uns interessierenden Bereich) befinden können. Lieber Reserve einplanen - die Pakete könnten auch mal kleiner werden (z.B. wenn die "MogelPackungen" abgeschafft werden ;)), so dass doch mehr davon auf einem Band Platz finden.

Tipp: Die ModuloFunktion im Hinterkopf behalten. Sie kann sowohl bei der BandPosition als auch beim als RingPuffer gestalteten FIFO hilfreich sein.
 
Zurück
Oben