OP
weißnix_
Guest
-> Hier kostenlos registrieren
Ich versuche meine Version nochmal zu entwickeln 
Benötigt:
- Incrementalgeber am Band
- Lichtschranke an Auswerferposition
- Kamera mit Trigger und IO / NIO -Signal
Eure Schieberegisterlösung in Ehren: Ihr müsst aber vorher genau wissen, wieviele Teile zwischen Kamera un Auswerfer liegen. Eine Bandgeschwindigkeitsänderung bringt das schon aus dem Tritt.
Ein IO-Signal wird in eine Speicherstelle geschrieben mit fester Addition eines Offsets zu Ausblasstelle. Geschrieben wird dabei also ein DWORD.
Das nächste Signal wird in Speicherstelle + 1 geschrieben. Nehmen wir mal ein Array mit reichlich Plätzen (mehr als Teile im Maxfall auf dem Band liegen).
An der Auswerferstelle triggert jedes Teil eine Prüfung des obersten Wertes im Array. Ist ein Positionswert oben auf dem Array, welcher mit einer gewissen Toleranzspanne dem Positionswert des gerade vorbeifahrenden entspricht: Passieren lassen
Ist kein Positionswert vorhanden: auswerfen
Jetzt das Tabellenhandling: Jedes IO-Teil triggert jetzt ein Memcpy, bei dem das ganze Array um eine Speicherstelle nach oben geschoben wird. Zusätzlich eine Prüfung, ob oberster Arraywert älter ist als der aktuelle Encoderwert+ Toleranzspanne. In dem Falle auch Memcpy.
Vorteil: Relativ einfache Struktur. Dynamisch, sofern die Arraygröße nicht zu knapp gewählt ist. Ein Kameraausfall oder so lässt das IO-Signal ausfallen. Damit werden alle Teile am Auswerfer ausgeworfen, weil das IO-Signal fehlt. Verschobene Teile werden ebenfalls ausgeworfen. Durch die Prüfung auf Plausibilität des obersten Arraywertes kommt es durch verscobene oder heruntergefallene IO-Teile nicht zu einem Versatz im Register.
Jetzt gibt es nur noch ein Problem: Der DWORD-Überlauf bei der Offset-Addition. Da musst Du Dir keine Sorgen drum machen, wenn Du die Addition als DWORD durchführst.

Benötigt:
- Incrementalgeber am Band
- Lichtschranke an Auswerferposition
- Kamera mit Trigger und IO / NIO -Signal
Eure Schieberegisterlösung in Ehren: Ihr müsst aber vorher genau wissen, wieviele Teile zwischen Kamera un Auswerfer liegen. Eine Bandgeschwindigkeitsänderung bringt das schon aus dem Tritt.
Ein IO-Signal wird in eine Speicherstelle geschrieben mit fester Addition eines Offsets zu Ausblasstelle. Geschrieben wird dabei also ein DWORD.
Das nächste Signal wird in Speicherstelle + 1 geschrieben. Nehmen wir mal ein Array mit reichlich Plätzen (mehr als Teile im Maxfall auf dem Band liegen).
An der Auswerferstelle triggert jedes Teil eine Prüfung des obersten Wertes im Array. Ist ein Positionswert oben auf dem Array, welcher mit einer gewissen Toleranzspanne dem Positionswert des gerade vorbeifahrenden entspricht: Passieren lassen
Ist kein Positionswert vorhanden: auswerfen
Jetzt das Tabellenhandling: Jedes IO-Teil triggert jetzt ein Memcpy, bei dem das ganze Array um eine Speicherstelle nach oben geschoben wird. Zusätzlich eine Prüfung, ob oberster Arraywert älter ist als der aktuelle Encoderwert+ Toleranzspanne. In dem Falle auch Memcpy.
Vorteil: Relativ einfache Struktur. Dynamisch, sofern die Arraygröße nicht zu knapp gewählt ist. Ein Kameraausfall oder so lässt das IO-Signal ausfallen. Damit werden alle Teile am Auswerfer ausgeworfen, weil das IO-Signal fehlt. Verschobene Teile werden ebenfalls ausgeworfen. Durch die Prüfung auf Plausibilität des obersten Arraywertes kommt es durch verscobene oder heruntergefallene IO-Teile nicht zu einem Versatz im Register.
Jetzt gibt es nur noch ein Problem: Der DWORD-Überlauf bei der Offset-Addition. Da musst Du Dir keine Sorgen drum machen, wenn Du die Addition als DWORD durchführst.