Schiebefunktion

Trappatobi

Level-1
Beiträge
3
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo!
Ich habe eine Frage zu einem SPS-Programm. Folgender Hintergrund: Prüfkörper werden mit Kamera auf Fehler überprüft und in 3 Kategorien eingestuft. (i.O., n.i.O., n.e.)
Die Aussortierung nach der Bilderstellung erfolgt taktweise in der folgenden Reihenfolge
( --> 4 Stationen:
1. Kamera,
2. Aussortierung i.O.,
3. Aussortierung n.i.O.,
4. Aussortierung n.e.)
Die Stationen werden mittels eines Rundschalttisches taktweise erreicht.

Die Ausgänge der Bildverarbeitung schalten folgendermaßen:

_____i.O._ n.i.O._ n.e.__ leer
A0.0 |_ 1 _|_ 0 _|_ 1 _|_ 0 _|
A0.1 |_ 0 _|_ 1 _|_ 1 _|_ 0 _|

Der Schieberegister soll folgendermaßen aussehen:
An den 3 Stationen soll verglichen werden, ob die "reingeschobenen" Zustände (10 oder 01 oder 11 oder 00) mit denen übereinstimmen, die an den jeweiligen Stationen eine Aussortierung vorsieht.

________ ?__?__?_
________(1) (0) (1)
________(0) (1) (1)
A0.0 --> | X | X | X | (Schieberichtung: nach
A0.1 --> | X | X | X | rechts)


Ich benötige hierzu einen Schieber, der jeden Takt die neu erhaltenen Ausgänge um 1 Feld weiter nach rechts schiebt und eine Vergleichsoperation, die an den 3 Stationen vergleicht und bestimmte Ausgänge daraufhin aktiviert oder nicht.
Ich hab im Internet schon einige hilfreiche Sachen gesehen, aber keine speziellen, für diesen Fall.
Ich arbeite mit Step 7 an einer CPU S7/200-211

Vielen Dank für Tipps im Voraus!
Trappatobi
 
Hallo :)
sooooo wird es nicht sein ! Schreibe DEIN Programm und stelle es hier zur Diskussion - dann und nur dann kannst du hier Hilfe erwarten. Sonst kannst du mir oder anderen Kollegen einen Autrag gegen Bezahlung geben und es wird gemacht.
Grüße
Janusz
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
mal so als kleine Anregung :
Bilde dir für jede Station ein Datenbyte (oder größer) in dem du die signifikanten Ergebnisse der Station und auch der anderen Stationen ablegen kannst. Wenn du nun den Tisch vor-taktest dann schiebst du bei einem Tisch mit 3 Positionen Speicher_Station_3 -> Speicher_Station_1 und Speicher_Station_2 -> Speicher_Station_3 und Speicher_Station_1 -> Speicher_Station_2. Wenn du rückwärts taktest dann entsprechend umgekehrt. So kannst du dann bei jeder Station die durchgeführten Aktionen hinterlegen und entsprechend bei den weiteren Stationen mit den vorhandenen Ergebnissen weiter-arbeiten.
Wird dem Speicher irgendwo das Teil entnommen dann löscht du an dieser Stelle den Speicher.

Viel Spaß beim Programmieren ...

Gruß
LL
 
Ich erwarte auch kein fertiges Programm, was ohne weiteres übertragbar ist. Aber über ein paar kleine Tipps, wie von Larry Laffer wäre ich schon sehr erfreut. Mein geschriebenes Programm ist noch in Bearbeitung...;)
 
Ich hab ein Programm erstellt, habe aber noch ein Problem. Der Ablauf hat sich vereinfacht, es gibt nur noch 2 Auswahlkriterien. i.O. und n.i.O.!
Meine Variante sieht folgendermaßen aus:

LD Rundschalttisch-Takt:E1.0
EU
SHRB i.O.-Signal:E0.3, V100.0, +1

LD i.O.-Signal:E0.3
U Aussonderungsbefehl:E0.1
= i.O.-Düse:A0.3

LDN SM1.1
U Aussonderungsbefehl:E0.1
= n.i.O-Düse:A0.4

Im Einzelnen:
Bei jedem Takt des Rundschalttisches (E1.0) wird die steigende Flanke (EU) genutzt, um im Schieberegister (SHRB) eine Stelle zu verschieben. Als DATA benutze ich das Signal E0.3,was herausgegeben wird, wenn das Prüfteil in Ordnung ist.
Dann wird auch die entsprechende Düse (A0.3) im nächsten Takt betätigt.
Wenn kein i.O.-Signal kommt, wird eine Null als DATA weitergeschoben und nach einem weiterem Takt "fällt" diese Null aus dem Schieberegister heraus (SM1.1) und betätigt dann die n.i.O.-Düse (A0.4). Die Aussonderungsbefehle werden anderweitig gesetzt.
Die ganze Sache funktioniert, allerdings bläst die n.i.O.-Düse bei jedem Takt! Der Sondermerker SM1.1 bekommt keine "1", bei i.O.-Teilen... Hat das mit dem "niederwertigsten Bit" (V100.0) zu tun? Ich verstehe den Sinn und dessen Bedeutung für den Register nicht ganz. V100.0 ist willkürlich gesetzt...
Kann mir da jemand helfen?!?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Überlauf_unzulässig
SM1.1
Von einigen Operationen bei Überlauf oder ungültigem num. Wert auf 1 gesetzt.

erstma brauchst du zwei register die schiebst ja zwei werte!

Schieberegister Schiebt bei Drehen
LD E0.3
ED
SRB VB100, 1
SRB VB101, 1

St1 Kamera
Drehteller am Drehteller
LDW= Z0, 0
UN E0.3
INCW Z0

Drehteller in Position
LDW= Z0, 1
U E0.3
INCW Z0

Register Löschen
LDW= Z0, 2
R V100.7, 1
R V101.7, 1
UN V100.7
UN V101.7
INCW Z0

Register mit Kameraauswerung Füttern
LDW= Z0, 3
LPS
U E0.0 // gut
S V100.7, 1
LRD
U E0.1 // schlecht
S V101.7, 1
LRD
TON T37, 1
LPP
U T37
MOVW 0, Z0


jetzt ein takt weiter auswerung
LD V100.6
ON V101.6
= A0.3 //io

noch ein takt weiter

LDN V100.5
O V101.5
= A0.4 //nio

ein takt weiter

LD V100.4
O V101.4
= A0.5 //unbekannt



keine garantie ob das register richtigrum jetzt is ich verwechsel des immer mit rechts rum und linksrum ;) von 0.7 nach 0.0 oder andersrum :D
 
Zurück
Oben