Problem mit Schieberegister

danielch

Level-1
Beiträge
17
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen

ich benötige eure Hilfe, ich bringe etwas einfach nicht hin.

Ich habe folgendes Problem.

Auf einem Förderband kommen Gläser durch eine Kontrolle, wo dann entschieden wird, ob sie abgeschoben werden müssen (ausschuss) oder ob sie gut sind.

Das Ganze wird so gemacht:

Eine Lichtschranke (E124.0) aktiviert die Kamera, welche dann entscheidet ob Ausschuss oder nicht. Ist das Teil Ausschuss bekommt die SPS einen kurzen Impuls (einstellbare Länge) (E124.1). Dann geht das Glas noch ca. 30cm weiter, wo dann ein Zylinder ist. Der hat auch eine Lichtschranke, damit das Glas rechtzeitig abgeschoben werden kann.

Wie kann ich das nun anstellen? Bis das Glas beim Zylinder ist, hat die Kamera sicherlich schon 2 weitere Gläser erfasst.

Ich habe es mit einem Schieberegister probiert, bin aber totaler Anfänger.
Also Programmieren kann ich eigentlich schon, aber nichts was mit int und dbs zu tun hat :-(

Könnt ihr mit bitte Helfen????

CPU (S7 300): CPU414C-2DP


Gruss Daniel
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren


könnte evtl. gehen. könnte ich trotzdem noch die lösung mit dem Schieberegister haben?

Das Problem der Anlage ist halt, dass bis das Glas abgeschoben ist, die Kamera schon ein neues Glas erfasst hat. Ist das beim anderen Beispiel auch so oder wofür sind denn dort die verschiedenen Schritte?

Gruss und DANKE!!!!
 
Mal ein paar grundsätzliche Überlegungen dazu:

Ich geh mal davon aus, daß maximal 8 Gläser zwischen Kontrollstation und
Auswurf passen (wenn mehr, muß man das erweitern).
Dafür würden dann 2 Merkerworte genutzt, in einem steht, ob ein Teil vorhanden
ist, in dem anderen, ob es ein IO-Teil ist.

Code:
Bit   Teil      Teil      
      vorhanden IO
      MW100     MW102

.0    1         1       Glas an Kontrollstation
.1    1         0       1. Glas nach Kontrollstation (Teil + NIO)
.2    1         1       2. Glas nach Kontrollstation (Teil + IO)
.3    1         1       3. Glas nach Kontrollstation (Teil + IO)
.4    1         1       4. Glas nach Kontrollstation (Teil + IO)
.5    0         0       5. Glas nach Kontrollstation (kein Teil)
.6    0         0       6. Glas nach Kontrollstation (kein Teil)
.7    0         0       7. Glas nach Kontrollstation (kein Teil)
Wenn die Kontrollstation ein Glas vermessen hat, nimmt sie die beiden Merkerworte
und schiebt deren Inhalt 1 nach links (rechts = M100.0 = Kontrollstation).
Dann trägt sie in M100.0 eine 1 und M102.0 ihr Ergebnis (1=IO, 0=NIO) ein.
Das macht sie ganz stur, evtl. kann man noch nachsehen, ob sie links eine 1
rausgeschoben hat. Wenn das der Fall war, dann ist ein Fehler aufgetreten,
da kein Glas bisher die Auswurfstation passiert hat und soviele Gläser nicht
zwischen die beiden Stationen passen.

Die Auswurfstation wartet aus eine Flanke ihrer Lichttschtranke. Mit der Flanke
macht sie folgendes:

MW100 nehmen, von links an (M100.7) nach rechts nachsehen, ob der Merker 1 ist.
Wenn ja, im selben Bit von MW102 nachsehen, ob IO (1) oder NIO. Bei NIO, Teil
rauswerfen. Diese beiden Bits im MW100 und MW102 auf Null setzen.

sollte die Auswurfstation von links nach rechts durchlaufen und im M100.0 eine
0 finden, ist das auch ein Fehler, da dann eigentlich kein Glas bei der
Auswurfstation hätte ankommen dürfen!

Das mal in aller Kürze und möglichts einfach zum Prinzip, daß ich verwenden würde.
Mit einem Datenbaustein und indirekter Adressierung würde ich das wohl machen.

PS: Eins muß dabei klar sein, kommt etwas durcheinander, weil jemand ein Glas
herausnimmt, eins runterfällt, oder die LS 2 Flanken bei einer Flasche
erzeugt, dann werden ab diesem Zeitpunkt die falschen Gläser rausgeworfen!!!
 
Zuletzt bearbeitet:
danke für die Antwort!!
Habe gerade herausgefunden, dass nur ein Glas in konflikt kommt, da wir den abstanz jetzt ganz klein haben. Also währen das schlechte zum Zylinder kommt, wird gleichzeitig ein anderes Kontrolliert.
Gibt es da eine einfachere Variante???

Gruss und danke
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Die Kontrollstation setzt M100.0 für Teil kontrolliert und M102.0 für Teil IO.
Diese Bits werden von der Auswurfstation mit der Flanke "Flasche da" abgefragt und dann sofort zurückgesetzt. Die Kontrollstation wartet mit dem setzen ihrer Bits immer, bis M100.0 = 0 und M102.0 = 0. Wenn der Abstand zwischen Kontroll- und Auswurfstation 1 Glasabstand oder kleiner ist, sollte das so gehen.

oder alternativ

Kontrollstation setzt M100.0 und M102.0, schiebt diese beiden Worte dann eins nach links.
Die Auswurfstation fragt bei einer Flanke "Flasche da" die Merker 100.1 und 102.1 ab.
Aber auch hier, nicht schieben, bevor M100.1 und M102.1 nicht wieder auf 0 sind.
 
Zuletzt bearbeitet:
Die Kontrollstation setzt M100.0 für Teil kontrolliert und M102.0 für Teil IO.
Diese Bits werden von der Auswurfstation mit der Flanke "Flasche da" abgefragt und dann sofort zurückgesetzt. Die Kontrollstation wartet mit dem setzen ihrer Bits immer, bis M100.0 = 0 und M102.0 = 0. Wenn der Abstand zwischen Kontroll- und Auswurfstation 1 Glasabstand oder kleiner ist, sollte das so gehen.

oder alternativ

Kontrollstation setzt M100.0 und M102.0, schiebt diese beiden Worte dann eins nach links.
Die Auswurfstation fragt bei einer Flanke "Flasche da" die Merker 100.1 und 102.1 ab.
Aber auch hier, nicht schieben, bevor M100.1 und M102.1 nicht wieder auf 0 sind.


Hallo

danke für die tolle antwort!
ja das würde so funktionieren.

habe das auch so gemacht und es funktioniert. es gibt jedoch ein Problem....

manchmal sind die gläser gestaut und kommen ohne abstand. Da geht das leider nicht.

kannst du mir evtl. noch eine lösung machen,wenn die Gläser keinen abstand haben?

Die Kontrollstatsion gibt ein Impuls, wenn das Glas ausschuss ist.

Die Gläser kommen so:

Manchmal mit ca. 1/2 Glas abstand. Also es reicht zuerst kontrollieren und dann auswerfen.

Wenn die Gläser aber gestaut sind, dann haben sie keinen abstand (Lichtschranke reagiert trotzdem). Dann kann es vorkommen, dass zuerst zwei kontrolliert werden und dann erst eines ausgeworfen wird, dann wieder eines in die kontrolle.. und und und. beim letzten werden dann zwei ausgeworfen.

ich habe es mit dem FC90 versucht. Da ist mein Problem, dass es bei Stau nicht funktioniert :-(

Wäre für eine Problemlösung sehr dankbar!!!

Gruss
 
Was meinst du mit

Lichtschranke reagiert trotzdem

Gibt es trotzdem bei jedem Glas an der Auswurfstation einen Impuls? Das wäre schön, denn dann könnte man die etwas kompliziertere Lösung mit den 2 Merkerworten einsetzen. Da könne sich bis zu 8 (im Beispiel) Gläser stauen und es würden die Richtigen ausgeworfen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Was meinst du mit



Gibt es trotzdem bei jedem Glas an der Auswurfstation einen Impuls? Das wäre schön, denn dann könnte man die etwas kompliziertere Lösung mit den 2 Merkerworten einsetzen. Da könne sich bis zu 8 (im Beispiel) Gläser stauen und es würden die Richtigen ausgeworfen.


ja es ist so, dass die lichtschranke trotzdem reagiert.es ist eine, die auf glas reagiert und der ca. 4mm breite Schlitz zwischen den Gläseren (wegen dem Deckel) reicht um zu erkennen wann ein neues Glas kommt. Auch die Kontrolle funktioniert.
Also bei Stau stehen die Gläser ja nicht still, sondern kommen einfach alle aneinander.

8 Gläser sind nie in der Kontrolle. Wie schon gesagt. Es kommt vor, dass ein Glas kontrolliert wird und bevor dieses abgeworfen werden kenn (oder bei i.O halt nicht) schon ein neues Glas in die Kontrolle kommt.

Also wenn die zahl dann egal ist würd ich auch mehr nehmen, denn dann könnte ich die Distanz Kontrolle - Abwurf grösser machen.

Aber eben, ich weiss nicht wie Programmieren :( Hab das mit den MW und DBs halt nicht so im Griff, der Rest ist kein Problem.... (also so einfache DBs wie für das Schieberegister gehen schon)

Gruss
 
Normalerweise lebe ich ja davon, solchen Code, für Leute wie euch zu schreiben :ROFLMAO:.

Ich hab das mal wirklich ganz einfach und ganz schnell zusammengeschrieben und auch am Simulator getestet. Es ist zu Fuß und nicht ganz schick mit indirekter Adressierung usw., nur mal für Alle, die das hinterher wieder besser können :cool:. Die Merker und Eingänge hab ich nicht mit Symbolik versehen, da die sich bei dir eh ändern werden, die Texte sollten alles erklären.

Code:
FUNCTION FC 20 : VOID
TITLE =Kamerakontrolle und Glasauswurf
AUTHOR : Ralle
FAMILY : System
NAME : KamGlas
VERSION : 1.0

BEGIN
NETWORK
TITLE =Kameraauswertung

      U     E      1.0; //Kamera meldet fertig
      FP    M     98.0; //Flankenmerker Kamera fertig
      SPBN  KFL1; 

      L     MW   100; 
      SLW   1; 
      T     MW   100; 

      L     MW   102; 
      SLW   1; 
      T     MW   102; 

      SET   ; 
      S     M    101.0; //ein Glas war da und ist kontrolliert worden --> Achtung, Byte 101 stehet rechts im Wort!!!

      U     E      1.1; //es war ein NIO-Teil
      S     M    103.0; //es war ein NIO-Glas --> Achtung, Byte 103 steht rechts im Wort!!!

//Kontrolle, zuviel Gläser in der Kette bis zum Auswurf
      U     M    100.7; //das wären 16 Gäser!
      S     M     98.1; //Fehlermerker gesetzt, später irgendwo auswerten, melden und zurücksetzen !!!!

KFL1: NOP   0; 
NETWORK
TITLE =Auswurf

      U     E      2.0; //LS Auswurf erkennt ein Glas
      FP    M     99.0; //Flankenmerker LS Auswurf
      SPBN  KFL2; 

//Ich mach das mal für 8 Gläser
      U     M    101.7; 
      SPB   M007; 

      U     M    101.6; 
      SPB   M006; 

      U     M    101.5; 
      SPB   M005; 

      U     M    101.4; 
      SPB   M004; 

      U     M    101.3; 
      SPB   M003; 

      U     M    101.2; 
      SPB   M002; 

      U     M    101.1; 
      SPB   M001; 

      U     M    101.0; 
      SPB   M000; 
      SPA   FEH2; 

//Glas Nr 8 wurde erkannt
M007: SET   ; 

      U     M    103.7; //NIO-Glas
      S     M     99.1; //Glas auswerfen, Merker nach dem Auswerfen wieder zurücksetzen!

      SET   ; 
      R     M    101.7; //Glas vorhanden und
      R     M    103.7; //Glas NIO auf Null
      SPA   KFL2; 

//Glas Nr 7 wurde erkannt
M006: SET   ; 

      U     M    103.6; //NIO-Glas
      S     M     99.1; //Glas auswerfen

      SET   ; 
      R     M    101.6; //Glas vorhanden und
      R     M    103.6; //Glas NIO auf Null
      SPA   KFL2; 

//Glas Nr 6 wurde erkannt
M005: SET   ; 

      U     M    103.5; //NIO-Glas
      S     M     99.1; //Glas auswerfen

      SET   ; 
      R     M    101.5; //Glas vorhanden und
      R     M    103.5; //Glas NIO auf Null
      SPA   KFL2; 

//Glas Nr 5 wurde erkannt
M004: SET   ; 

      U     M    103.4; //NIO-Glas
      S     M     99.1; //Glas auswerfen

      SET   ; 
      R     M    101.4; //Glas vorhanden und
      R     M    103.4; //Glas NIO auf Null
      SPA   KFL2; 

//Glas Nr 4 wurde erkannt
M003: SET   ; 

      U     M    103.3; //NIO-Glas
      S     M     99.1; //Glas auswerfen

      SET   ; 
      R     M    101.3; //Glas vorhanden und
      R     M    103.3; //Glas NIO auf Null
      SPA   KFL2; 

//Glas Nr 3 wurde erkannt
M002: SET   ; 

      U     M    103.2; //NIO-Glas
      S     M     99.1; //Glas auswerfen

      SET   ; 
      R     M    101.2; //Glas vorhanden und
      R     M    103.2; //Glas NIO auf Null
      SPA   KFL2; 

//Glas Nr 2 wurde erkannt
M001: SET   ; 

      U     M    103.1; //NIO-Glas
      S     M     99.1; //Glas auswerfen

      SET   ; 
      R     M    101.1; //Glas vorhanden und
      R     M    103.1; //Glas NIO auf Null
      SPA   KFL2; 

//Glas Nr 1 wurde erkannt
M000: SET   ; 

      U     M    103.0; //NIO-Glas
      S     M     99.1; //Glas auswerfen

      SET   ; 
      R     M    101.0; //Glas vorhanden und
      R     M    103.0; //Glas NIO auf Null
      SPA   KFL2; 

//Wenn eine LS-Flanke erkannt wurde, aber keine Daten (kein Merker
//im MW100 ist gesetzt) vorhanden sind, ist das ein Fehler
FEH2: SET   ; 
      S     M     99.2; //Datenfehler oder LS-Fehler am Auswerfer, später irgendwo auswerten, melden und zurücksetzen !!!!

KFL2: NOP   0; 
END_FUNCTION
Der Code ist eine AWL-Quelle. Du kannst ihne hier rauskopieren, unter Quellen im Programmordner eine neue Quelle einfügen und dann den Code drt reinkopieren. Nach dem Übersetzen hast du dann einen FC20. Sollte es diesen schon in deinem Programm geben, mußt du in der Quelle einen anderen eintragen, sonst wird dein bestehender FC beim Übersetzen überschrieben!

E 1.0 - Kamera meldet Fertig
E 1.1 - Kamera meldet NIO (normalerweise meldet man ja IO, dann im PRG einfach rumdrehen!)
M98.1 - Fehler, Kamera hat zu viele Teile geprüft, Auswurf hat nichts erkannt?

E 2.0 - LS Auswurf erkennt Glas
M 99.1 - Glas auswerfen
M 99.2 - Fehler, LS hat Glas erkannt, es sind aber keine Daten vorhanden (Damit könnte man das "Glas" aus zwangsweise auswerfen)

Die Merker habe ich nur gesetzt, zurücksetzen mußt du sie im Programm dann selbst. M98.1 kommt erst mit Glas 16, das kann man verändern.
 
Zurück
Oben