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

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 12

Thema: Schieberegister per SCL?

  1. #1
    Registriert seit
    05.09.2008
    Ort
    Bern
    Beiträge
    80
    Danke
    13
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    Folgende Situation ist gegeben:

    • Transportband
    • Kamera(für inspektion von Objekten)
    • Drehgeber
    • Pusher( für schlecht erkannte Objekte)
    • Trigger LS vor der Kamera
    • falls benötigt auch Trigger LS vor dem Pusher und nach dem Pusher


    Nun bin ich am überlegen wie ich ein saubere Ausschleusung der Objekte hinbekomme. Problem ist das sich mehrere Objekte auf der Prüfstrecke ( Sensor vor Kamera und Sensor nach Pusher) befinden können.
    Wie überwache ich am besten das ganze, so das Schlecht erkannte Objekte auch aussortiert werden?
    Das Transportband kann mit unterschiedlichen Geschwindigkeiten gefahren werden. Mit nur einem Objekt auf der Stecke wäre ja kein Problem. Wie aber überwache ich mehrere Objekte, zb. wenn ein Objekt vom Band fällt oder jemand ausversehen in die Trigger LS fasst bzw. wie resete ich das ganze dann wieder.
    Lösungen im AWL habe ich schon gesehen, wie lässt sich sowas mit SCL lösen?
    Da es unterschiedliche Grosse Objekte gibt passen mal mehr oder weniger Objekte auf die Prüfstrecke. Rezepte gibt es nicht.

    Bin für jeden Tipp dankbar.
    Zitieren Zitieren Schieberegister per SCL?  

  2. #2
    Registriert seit
    12.04.2005
    Ort
    Black Forest
    Beiträge
    1.334
    Danke
    27
    Erhielt 129 Danke für 116 Beiträge

    Standard

    Zitat Zitat von SEAL Beitrag anzeigen
    Lösungen im AWL habe ich schon gesehen, wie lässt sich sowas mit SCL lösen?
    1. Stellt sich die Frage, muss es unbedingt SCL sein wenn es mit AWL ne Lösung geben würde?

    2. Man(n) kann auch einen AWL Code (bzw. die enthaltene Funktion) in SCL übertragen und dort nachbilden!
    Du musst halt Sinnvoll den AWL Code in SCL nachprogrammieren ...

  3. Folgender Benutzer sagt Danke zu Boxy für den nützlichen Beitrag:

    SEAL (03.04.2013)

  4. #3
    SEAL ist offline Benutzer
    Themenstarter
    Registriert seit
    05.09.2008
    Ort
    Bern
    Beiträge
    80
    Danke
    13
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo Boxy,

    Ich würde mich auch erstmal mit einer AWL Lösung zufrieden geben. Mir geht es aber auch darum das ich zwar grundlegend weiss wie ein schiebe Register funktioniert aber ich nicht so recht verstanden habe wie ich es auswerte.
    Ich stelle mir das so vor: wenn z.b 8 Objekte auf die Strecke passen und das 1te den trigger durchläuft setzte ich beispielsweise im MB 100 das erste Bit auf 1 und so fortlaufend. Dann kopiere ich das MB 100 immer auf das MB 200 also bei jeder triggerung, und wenn die letzte lichtschranke ein Signal bekommt vergleiche ich beide MBs und wenn diese nicht gleich sind gibt's einen Fehler?
    habe ich das mit den schieberegister so richtig verstanden?
    Da in Scl manche Lösungen übersichtlicher sind und ich neugierig bin wie sowas im scl gelöst wird.Vielleicht gibt es auch ne lösung ohne schieberegisterl.

  5. #4
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.218
    Danke
    533
    Erhielt 2.696 Danke für 1.948 Beiträge

    Standard

    Also wenn du das in SCL machen willst, dann nimmst du einen DB (es geht auch eine statische Variable bei einem FB, wenn du das Schieberegister nur intern nutzen willst), legst dort eine Variable "Schieberegister Array[1..10] of Int;" an und nutzt dann für den Zugriff eine Indexvariable auf das Array.

    Nun kannst du jederzeit über eine Schleife die Daten im Array schieben, indem du z.Bsp. schreibst

    Code:
    Output_Element := Schieberegister[10];
    FOR I := 1 to 9 do
       Schieberegister[11-I] := Schieberegister[10-I];
    END_FOR;
    Schieberegister[1] := Input_Element;
    Output_Element = Schieberegister[10]
    Schieberegister[10] = Schieberegister[9]
    Schieberegister[9] = Schieberegister[8]
    Schieberegister[8] = Schieberegister[7]
    Schieberegister[7] = Schieberegister[6]
    Schieberegister[6] = Schieberegister[5]
    Schieberegister[5] = Schieberegister[4]
    Schieberegister[4] = Schieberegister[3]
    Schieberegister[3] = Schieberegister[2]
    Schieberegister[2] = Schieberegister[1]
    Schieberegister[1] = Input_Element

    Wenn ich deine Beschreibung so lese, dann denke ich aber, du wirst nicht alle Fehlerfälle ausschließen können. Das herunterfallen von Objekten bekommst du so gar nicht mit, bzw. deine Zählung stimmt nicht mehr, faßt einer in die Triggerlichtschranke, ist die Zählung ebenfalls nicht mehr korrekt.
    Eine Möglichkeit wäre evtl. eine Wegmessung und das Berechnen und Abspeichern der Auswerfposition für NIO-Elemente, aber dafür fehlt hier die Hardware.
    Bleibt also nur, abzusichern, dass nichts herunterfallen kann und niemand in die Triggerlichtschranke faßt.
    Geändert von Ralle (29.03.2013 um 09:40 Uhr)
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  6. Folgender Benutzer sagt Danke zu Ralle für den nützlichen Beitrag:

    SEAL (03.04.2013)

  7. #5
    Registriert seit
    27.06.2009
    Ort
    am Nordharz
    Beiträge
    3.713
    Danke
    443
    Erhielt 914 Danke für 739 Beiträge

    Standard

    Es gibt ja 2 Möglichkeiten, das Schieberegister als FIFO zu gestalten:

    1. Die Werte verschieben:
    Mal angenommen, Dein Register ist 10 Plätze groß. Wenn jetzt ein neues Teil reinkommt, kommt der Wert auf Platz 1. Kommt das nächste Teil, wird der Wert von Teil 1 auf Platz 2 geschoben und der neue Wert wieder auf die 1. Nachdem der Wert bis Platz 10 durchgeschoben wurde, fällt er raus.
    Bei dieser Version arbeitet man dann meist mit Pointern auf feste Plätze, z.B. ankommende Teile 1. Platz und weggehende Teile letzter Platz.

    2. Den Pointer verschieben:
    Hier bleiben die Werte immer auf einem festen Platz stehen und der Zeiger, an welche Stelle geschrieben (bzw. gelesen) wird, wird verändert.
    Also wieder 1. Teil 1. Platz. Kommt das 2. Teil, kommt dessen Wert diesmal auf den 2. Platz und der 1. Wert bleibt, wo er ist. Sind die 10 Plätze voll, wird wieder von vorn begonnen und der 1. Wert überschrieben.
    An diesem FIFO kann man mit mehreren Pointern, die auf bewegliche Plätze zeigen, arbeiten. Eventuell muss das Register etwas größer gestaltet werden, um den Versatz zwischen reinkommen und weiter verarbeiten auszugleichen.


    Jetzt mußt Du schauen, welche Variante auf Deine Situation besser paßt. Ich vermute mal, die 2. Version, da einkommende Teile zwar hintereinander weg ins Register eingetragen werden, aber bei der Weiterverarbeitung der zugehörige Pointer eventuell durch heruntergefallene oder ausgeschleuste Teile um 2 oder mehrere Stellen verschoben werden muss.


    Um den Index-Zeiger in SCL zu erhöhen oder zu erniedrigen, brauchst Du sicher keine Hilfe, oder?

  8. Folgender Benutzer sagt Danke zu hucki für den nützlichen Beitrag:

    SEAL (03.04.2013)

  9. #6
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.708
    Danke
    398
    Erhielt 2.397 Danke für 1.997 Beiträge

    Standard

    Hallo,
    ich würde hier im Grundsatz so vorgehen :
    Es gibt ja eine maximale Anzahl von Teilen, die gleichzeitig auf deinem Förderband sein können.
    Für diese Anzahl (+ einen Aufschlag) würde ich einen Positionen-Speicher (Array of DINT) und einen Bewertungs-Speicher (Array of Bool z.B.) und einen Belegt-Speicher (Array of Bool) definieren.
    Legst du ein neues Teil auf das Band und es läuft über den Eingangs-Ini dann suchst du dir einen freien Eintrag in dem Positionen-Array und trägst die aktuelle Geber-Position als Offset-Position da ein und löscht den Bewertungs-Speicher und setzt den Belegt-Speicher.

    Deine Bearbeitungs-Stationen befinden sich ja an fixe Positionen, relativ zum Eingangs-Ini. Diese Positionen müssen irgendwo hinterlegt sein.

    Du scannst nun zyklisch deinen Positionen-Speicher, ob die aktuelle Geber-Position - der Positionen im Positionen-Speicher im Fenster-Bereich deiner Bearbeitungs-Station liegen. Ist das so dann lösst du eine entsprechende Aktion aus. Bekommst du anschließend eine Bewertung dann ordnest du die entsprechend zu.

    Überschreitet die aktuelle Geber-Position - der Positionen im Positionen-Speicher den max-Bereich der Förderstrecke dann gibst du sie wieder frei.

    Selbstverständlich ist dies in der Realisierung nicht unbedingt trivial - aber so m.E. ganz gut machbar.
    Ich würde das auch in SCL lösen.

    Gruß
    Larry

  10. Folgender Benutzer sagt Danke zu Larry Laffer für den nützlichen Beitrag:

    SEAL (03.04.2013)

  11. #7
    Registriert seit
    11.07.2004
    Beiträge
    1.597
    Danke
    10
    Erhielt 213 Danke für 183 Beiträge

    Standard

    FIFO hat den Nachteil mit der Problematik von heruntergenommenen Teilen und Fehlbetätigung von Sensor. Abhängig von der maximalen Geschwindigkeit könntest Du auch eine oder mehrere Nocken auf die Drehgeberposition programmieren. Mit dieser Nocke dann ein richtiges Schieberegister (8, 16 oder 32 Bit) schieben. Für jedes Ereignis wird ein Bit zugeordnet (Sensor hat erkannt, Kamera hat schlecht befunden...). Für den Zylinder wird dann eine bestimmter Index im Register abgefragt , ggf. auch mehrere Stellen im Schieberegister.
    Die Version von Larry funktioniert sofern ich es richtig verstanden habe nur dann wenn der Geber nicht mehrere Umdrehungen wärend des ganzen Durchlaufs macht, zumindest bei einem Singleturn-Geber.

  12. Folgender Benutzer sagt Danke zu Oberchefe für den nützlichen Beitrag:

    SEAL (03.04.2013)

  13. #8
    Registriert seit
    12.04.2005
    Ort
    Black Forest
    Beiträge
    1.334
    Danke
    27
    Erhielt 129 Danke für 116 Beiträge

    Standard

    Ach so, jetzt habe ich es verstanden.

    Würde es dann auch in der Art wie Larry es beschrieben hat machen!
    Außer du kannst sicherstellen, da da nix während des Transportes (ausserhalb der Regel) hinzugelegt oder entfernt wird.

    Wenn es machbar ist, würde ich mir den GEdanken darüber machen ob ich nicht jedes Objekt selbst verwalten würde ...
    Also nicht wie z.B. bei einem Rundtisch bei dem ja alle Plätze immer gemeinsam sich drehen.
    Evtl auch schauen ob Du während des Transportes immer auf Plausibilität kontrollieren kannst um somit manuelle änderungen entgegen zu wirken.

  14. Folgender Benutzer sagt Danke zu Boxy für den nützlichen Beitrag:

    SEAL (03.04.2013)

  15. #9
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.708
    Danke
    398
    Erhielt 2.397 Danke für 1.997 Beiträge

    Standard

    Zitat Zitat von Oberchefe Beitrag anzeigen
    Die Version von Larry funktioniert sofern ich es richtig verstanden habe nur dann wenn der Geber nicht mehrere Umdrehungen wärend des ganzen Durchlaufs macht, zumindest bei einem Singleturn-Geber.
    Stimmt genau ... das muß man dabei beachten ... sehe ich aber nicht als das Problem an ... (Spielregeln gibt es immer)
    Für die Bestimmung der realtiven Position kann man dann aber gut mit einem Modulo arbeiten ...

    Nachsatz:
    Die abgegebene Antwort basiert natürlich auf der Verwendung eines Absolutwertgebers.
    Mit einem Inkrementalgeber und einer Zählerkarte würde es das dargestellte Problem warscheinlich gar nicht geben (Auflösung und Länge - wie oben)

    Gruß
    Larry
    Geändert von Larry Laffer (29.03.2013 um 16:15 Uhr)

  16. Folgender Benutzer sagt Danke zu Larry Laffer für den nützlichen Beitrag:

    SEAL (03.04.2013)

  17. #10
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.218
    Danke
    533
    Erhielt 2.696 Danke für 1.948 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Irgendwie hatte ich den Geber überlesen, dann würde ich natürlich auch über die Geberposition gehen. Aber das ist nicht ganz trivial, genau wie Larry schon schreibt. Schöne Aufgabe, würde ich aber sagen, da kann man auch richtig etwas lernen dabei.
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  18. Folgender Benutzer sagt Danke zu Ralle für den nützlichen Beitrag:

    SEAL (03.04.2013)

Ähnliche Themen

  1. Schieberegister im FC
    Von Stefan1982 im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 02.11.2010, 16:58
  2. Schieberegister
    Von Schenker im Forum Simatic
    Antworten: 9
    Letzter Beitrag: 08.10.2007, 11:09
  3. Schieberegister
    Von Mütze im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 22.10.2006, 06:01
  4. Schieberegister
    Von andreHST im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 29.09.2005, 10:57
  5. Schieberegister
    Von Anonymous im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 27.05.2005, 09:11

Lesezeichen

Berechtigungen

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