Auswertung Drehgeber (Handrad)

GFI

Level-1
Beiträge
91
Reaktionspunkte
9
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Forum Mitglieder,

ich habe folgendes Software Problem, an einem Profibus - Master ist ein Drehgeber
angeschlossen; der Drehgeber ist ein Handrad, diese liefert einen Zählerwert mit einer
größe von einem Byte (0-255) zurück, wird das Handrad nach rechts gedreht wird
der Wert größer (links kleiner), wird der Wert aber größer als 255, beginnt der Zähler wieder bei
null, es gibt auch kein Signal für einen Überlauf.
Nun möchte ich einen Sollert für einen FU, mit diesem Signal (Zählerstand) erzeugen
von 0-1000, durch diesen unkontrollierbaren Überlauf ist das aber leider nicht ganz
einfach, zudem sollte das ganz natürlich auch abwärts zählend funktionieren,
dabei ist der null Durchgang, wieder das Problem.
Wer kann mir da einen Lösungsvorschlag unterbreiten, SPS - Sprache egal, kann
ich selbst an die Steuerung anpassen.

Gruß
GFI
 
Servus,

den Überlauf musst du dir dann selber programmieren:
Steigt der Wert im Bereich von 0 - 50 --> = Merker_POS (positive Richtung)
Sinkt der Wert im Bereich von 255 - 205 --> = Merker_NEG (negative Richtung)
mit den beiden Merkern wiederum über flanken Auswertung ein "Store"-Byte oder Int hoch/runterzählen


HTH

Tobi
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Tobi,

danke für die schnelle Antwort, der Tip mit den Bereichen ist gut, aber
das Problem das der Drehgeber beim links lauf von 0 auf 255 springt
und ich dann einen höheren Wert statt eines niedrigeren Wertes
bekomme, ist damit aber auch nicht gelöst... oder habe ich da etwas nicht
ganz verstanden?

Gruß
 
Also, ich schreib mal das Prinzip auf, wie ich es angehen würde.
Jeden SPS-Zyklus (kann auch ein Zeittrigger sein) speichert man den Neu_Wert des vorhergehenden Zyklus in die Variable Alt_Wert, den aktuellen Wert in die Variable Neu_Wert. Dann bildet man die Differenz (Neu_Wert - Alt_Wert) aus diesen beiden Werten. Ist die Differenz negativ und z.Bsp. < 150, gab es einen Sprung von 255 --> 0, ist der Wert positiv und > 150 gab es einen Sprung von 0 --> 255.

Bsp:

1. rechts drehen (Wert steigt)

Alt_Wert = 100
Neu_Wert = 112
Diff = 12
alles normal

Alt_Wert = 240
Neu_Wert = 10
Diff = -230
Sprung von 255 --> 0

2. links drehen (Wert fällt)

Alt_Wert = 120
Neu_Wert = 105
Diff = -15
alles normal

Alt_Wert = 5
Neu_Wert = 250
Diff = 245
Sprung von 0 --> 255

Weiterhin führt man eine Variable Basiswert mit:
Diese ist am Anfang = 0
Stellt man einen Sprung 255 --> 0 fest, bildet man eine Flanke und addiert 256 zum Basiswert dazu
Stellt man einen Sprung 0 --> 255 fest, bildest man eine Flanke und subtrahiert 256 vom Basiswert.

Der aktuelle Stellwert ergibt sich dann immer aus:

Basiswert + Neu_wert

Zusätzlich sollte man den Basiswert bzw. den Stellwert noch auf seine erlaubten Grenzen hin überwachen.

Basiswert: es wird nach links gedreht, der Basiswert wird Null, der Neu_Wert wird Null --> Sperrmerker setzen, Stellwert Null, nichts mehr machen. Jetzt beim erneutern Sprung 255 --> 0 den Basiswert nicht hochzählen, sondern den Sperrmerker zurücksetzen. Selbiges, beim Erreichen des Max-Wertes.

PS. Statt des addierens/subtrahierens, kann man natürlich auch zählen (wie Repök) und diesen Zählwert mit 256 multiplizieren. So bekommt man dann auch seinen Basiswert.
 
Zuletzt bearbeitet:
Danke für die Tips,

ich habe das Problem gelöst, einen Basiswert wie von Ralle vorgeschlagen
benötigt man nicht unbedingt, wenn man die Sprünge durch 0 oder 255 gar nicht auswertet, sondern bei einem Sprung die Information ignoriert, da ich immer die Differenz des Gebers addiere und ist dieser größer als 50 oder kleiner als -50 dann wird kein Wert addiert.
Bei der Handbedienung fällt das auch keinem auf.

Als Anlage das Programm als KOP für eine Mitsubishi -A-Serie SPS

Gruß GFI
 

Anhänge

  • GX Developer print Ladder MAIN.pdf
    18,8 KB · Aufrufe: 97
Zurück
Oben