Stefan schrieb:
Sensor 1 1 0 0 1
Sensor 2 1 1 0 0 und dann wieder von vorne
Zunächst mal: Ich verstehe das so, dass die Sensoren diese Impulsfolge liefern?
Alles weitere geht Von dieser Überlegung aus.
Die Periode des zweiten Signals ist um 90 Grad (ein Viertel der Periode) gegenüber dem ersten versetzt. Das ist Standard zur Erkennung von Drehrichtungen.
Mit diesen Signalen kannst Du auch direkt die schnellen Zähler der SPS betreiben. Davon hat sie aber nur ein paar (2, 4, 6? je nach CPU). Wieviele es sind findest du im Systemhandbuch zur S7-200. Dort findes Du auch, wieviele Timer Deine CPU hat.
Wenn ich das mit den Sensoren richtig verstanden habe, gibt es eine Standardmethode, das auszuwerten:
Du zählst die Schritte der Sensoren unter Berücksichtigung der Richtung.
Abhängig vom Zählerstand stoppst Du Deinen Motor in einer bestimmten Position.
Zusätzlich musst Du irgendwo die Zähler nullen, entweder durch einen zusätzlichen Sensor (Endschalter) der nach dem Einschalten gezielt angefahren wird oder von Hand, indem Du einen manuellen Fahrbefehl einbaust, damit eine bestimmte Position anfährst und dann einen Taster zum Nullen drückst.
1. die sps muss von jeder der vier möglichen starten können
Das ist dann kein Problem
2. dadurch das die kette ein wenig schwingen kann brauche ich
(Ich glaube das nennt man hysterese ) eine Schutz vor Fehlschaltungen
Das machst Du, indem Du erst bei einem etwas höheren Zählerstand als deine Sollposition aus und bei einem etwas niedrigeren einschaltest. Differenz von "etwas höher" - "etwas niedriger"=Hysterese.
Code:
Auswertung der Sensoren
LD I 0.6
AN M 0.6 // voriger Zustand von Sensor 1, Sensor wechselt von 0 //nach 1
AN I 0.7 // und Sensor 2 ist 0, das ist vorwärts
ADD 1,MW10 //erhöhe Zählerstand
LD I 0.6
AN M 0.6 // voriger Zustand von Sensor 1, Sensor wechselt von 0 //nach 1
A I 0.7 // und Sensor 2 ist 1, das ist rückwärts
ADD -1,MW10 //verringere Zählerstand
LD I0.6
= M0.6 // merken für nächsten Zyklus
Das ist das Prinzip, so wie man es auf jeder SPS umsetzen kann.
Statt den Zustand des 1.Sensors in M0.6 zu speichern, kannst Du bei der S7-200 auch einen Spezialbefehl zur Flankenauswertung verwenden.
Dieser Code zählt auch nur einmal, wenn die ganze Vierer-Folge durchlaufen wird. Du kannst auch viermal zählen und bekommst einen höhere Genauigkeit:
Code:
Auswertung der Sensoren, 4 fache Genauigkeit:
LD I 0.6
AN M 0.6 // voriger Zustand von Sensor 1, Sensor wechselt von 0 //nach 1
= M1.0 // hilfsmerker, Steigende Flanke an 1
LDN I 0.6
A M 0.6 // voriger Zustand von Sensor 1, Sensor wechselt von 0 //nach 1
= M1.1 // hilfsmerker, fallende Flanke an 1
LD I 0.7
AN M 0.7 // voriger Zustand von Sensor 2, Sensor wechselt von 0 //nach 1
= M1.2 // hilfsmerker, Steigende Flanke an 2
LDN I 0.7
A M 0.7 // voriger Zustand von Sensor 2, Sensor wechselt von 0 //nach 1
= M1.3 // hilfsmerker, fallende Flanke an 2
LDN I 0.6
A M 0.6 // voriger Zustand von Sensor 1, Sensor wechselt von 0 //nach 1
= M1.1 // hilfsmerker, fallende Flanke an 1
LD M1.0
AN I 0.7 // und Sensor 2 ist 0, das ist vorwärts
O(
LDN M1.1
A I 0.7 // und Sensor 2 ist 1, das ist auch vorwärts
)
O(
LD M1.2
A I 0.7 // und Sensor 1 ist 1, das ist auch vorwärts
)
O(
LDM1.3
AN I 0.7 // und Sensor 1 ist 0, auch das ist vorwärts
)
ADD 1,MW10 //erhöhe Zählerstand
LD I0.6
= M0.6 // merken für nächsten Zyklus
LD I0.7
= M0.7 // merken für nächsten Zyklus
Ich hoffe, dass alle Kombinationen richtig sind. Die für "rückwärts" überlasse ich Dir. Am besten malt man sich ein Impulsdiagramm und durchläuft es von links nach rechts für vorwärts, andersherumm für rückwärts. Die Hilsfmerker M1.0 bis M1.3 kannst Du gleich weiterbenutzen.
3. ich will für jeden schritt rauf/ runter auf Ausgang 0.0/0.1 ein Signal bekommen
Dafür kannst Du die Oder-Verknüpfung von M1.0 bis M1.3 benutzen. Sie ist eins, wenn überhaupt ein Impuls auftratt. Soll der Ausgang länger als einen Zyklus aktiv sein, benutze einen Timer.
[/code][/quote]