# Handrad mit PLC auswerten?



## Boxy (17 Februar 2011)

Ich hätte einmal ein kleines Problem und mir fehlt gerade echt der Ansatz. Manchmal sind ja die kleineren Dinge die welche die größen Probleme machen.

Also folgendes Problem:

Ich muss ein Handrad verbauen zum manuelen verfahren eines Rundtisches. Kleine Anmerkung, zweites Meßsystem ist mit direktem Meßsystem schon belegt.
Daher der Gedanke, das Handrad in einer PLC auszuwerten und dann über die Schnittstelle die Achse verfahren!

So nun das Problem wo ich mir gerade die Haare grau werden lässt.

Ich würde ein Handrad der Firma EBE (das CS100) einsetzen, welches mit 24 V betrieben werden kann. Dieses liefert die Rechteck Signale A, /A, B, /B wobei B um 90° verschoben sein soll.

Gut mittels den 100 Imp. pro Umdrehung kann man ja die Pulse auswerten. Nur wie kann ich Drehrichtung +/- erkennen 

Ist jetzt zwar nicht für ne Siemens SPS sondern für einen Exoten, aber Siemens verstehe ich wenigsten. Also falls einer da nen Bsp. hätte ...

Danke schon mal vorab


----------



## Andreas_fuc (17 Februar 2011)

Hallo

Werte doch den Flankenwechsel der einzelnen Spuren aus. (Wenn deine Steuerung das so schnell auswerten kann)
Je nachdem welchen Zustand die andere Spur hat kannst du dann sagen, ob + oder -

A --__--__--
B -__--__--_

z.B. 
Spur "A" neg.Flanke   &   Spur "B" =0     =>   +
Spur "A" neg.Flanke   &   Spur "B" =1     =>   -


oder 
vergleiche zwei Zählerstände ob diese sich vergrößern oder verkleinern.
(diese Auswertung kommt aber erst verzögert, da erst ein Zählerunterschied erkannt werden muß)

mfG
Andreas


----------



## Boxy (17 Februar 2011)

Das mit der Auswertung per Flanke, ist mir im Anschluß auch eingefallen  
Das Horner Display hat ja ne Zyklusszeit von 0,2ms/K, da sollte einiges ja reichen.

Aber könntest Du mir das mit den Zählern genauer erklären? Ich stehe da auf dem Schlauch ...


----------



## LargoD (17 Februar 2011)

Andreas_fuc schrieb:


> Spur "A" neg.Flanke   &   Spur "B" =0     =>   +
> Spur "A" neg.Flanke   &   Spur "B" =1     =>   -
> Andreas


Für eine Handradauswertung mag das noch funktionieren, so lange das Handrad eine Rasterung hat, die Impulse ohne Betätigung (durch Erschütterung) zuverlässig verhindert. Im Allgemeinen sollte man aber mindestens die positive Flanke von A zusätzlich auswerten, sonst läuft Dir bei Vibrationen die Achse weg. Noch besser ist es, alle vier Flanken auszuwerten.


----------



## Boxy (17 Februar 2011)

LargoD schrieb:


> Für eine Handradauswertung mag das noch funktionieren, so lange das Handrad eine Rasterung hat, die Impulse ohne Betätigung (durch Erschütterung) zuverlässig verhindert. Im Allgemeinen sollte man aber mindestens die positive Flanke von A zusätzlich auswerten, sonst läuft Dir bei Vibrationen die Achse weg. Noch besser ist es, alle vier Flanken auszuwerten.



Danke auch für diesen Hinweis, aber ich dachte eh daran das man das Handrad mittels ner Funktion aktivieren muss und dies nur im Jog-Modus aktiviert ist. Bei Anwahl Auto bzw. Manu-Jog via Taste wird die Anwahl des Handrades deaktiviert!


----------



## zotos (17 Februar 2011)

Ich habe mal einen SCL Code hier im Forum veröffentlicht.


```
___     ___
Ch_A  _|   |___|   |_ 
          ___     ___
Ch_B  ___|   |___|
      0 1 3 2 0 1 3 2

BA
00 = 0 
01 = 1
11 = 3
10 = 2
```


```
SIG := 0;
IF Ch_A THEN 
    SIG := SIG + 1;
END_IF;

IF Ch_B THEN 
    SIG := SIG + 2;
END_IF;
    
IF (SIGold = 0 AND SIG = 1) 
OR (SIGold = 1 AND SIG = 3) 
OR (SIGold = 3 AND SIG = 2) 
OR (SIGold = 2 AND SIG = 0) THEN
    myValue := myValue + 1;
END_IF;

IF (SIGold = 2 AND SIG = 3) 
OR (SIGold = 3 AND SIG = 1) 
OR (SIGold = 1 AND SIG = 0) 
OR (SIGold = 0 AND SIG = 2) THEN 
    myValue := myValue - 1;
END_IF;

SIGold := SIG;
```
Der Trick dabei ist dem Signalzustand einen Wert zuzuordnen und dann diesen Wert mit dem aus dem letzten Zyklus zu vergleichen.

Diese Methode ist auch mit KOP/FUP/AWL/usw. umsetzbar.


----------



## Boxy (17 Februar 2011)

Jetzt habe ich aber doch das Problem, das der Hersteller für den Geber (EBE) nur ein Mindestbestellwert von 1000€ hat und ich nur einen Handradgeber für ca. 200€ benötige :twisted:

Kennt da einer noch ne andere Bezugsquelle für solche Teile?
Also mit 24V für Anschluß direkt an die SPS ...
Ist halt ne billig SPS und nix mit Profibus und Co.


----------



## Boxy (7 Juli 2011)

Ich möchte diese Thema nochmal her ziehen.

Habe dies nun einmal via normale Eingaänge und der Methode 

U Spur A
U FP Spur B
= Vor

U Spur B
U FP Spur A
= Zurück

versucht und irgendwie verschluckt die Steuerung (leider keine Simens) Impulse oder bekommt diese nicht mit (Zyklus ca. 10ms).

Die Steuerung bietet mir auch die Möglichkeit von HighSpeedCounter (HSC). 

Da ich noch nie mit Countern in dieser art gearbeitet habe, fehlt mir gerade total der Plan wie man nun hier eine Auswertung machen könnte.

Hat da einer eine Lösung für mich?
Am liebsten AWL :wink:, das kann ich einfacher auf die "fuck" Horner umsetzen.


----------



## bits'bytes (7 Juli 2011)

Hi,
leider keine Lösung, aber mein Gefühl sagt mir dass es besser wäre eine Hardware-Lösung anszustreben. 

Bei B&R z.B. haben wir extra Encoder-Karten welche die beschriebenen Encoder-Signale aufbereiten und als DINT zur Verfügung stellen. Drehrichtung usw. braucht man sich nicht zu kümmern. Hast du bei deiner Steuerung schon geschaut ob das geht ?

Wenn das Teil 100 Imp / Umdrehung hat kann man schon mal mit 200-400 Imp Pro Sekunde rechnen wenn der Bediener mal fleissig dreht... ich denke eine normale Bearbeitung (10 ms) kannst du vergessen.

Kenne aber auch die Horner bzw. den High-Speed Counter nicht, vielleicht bietet der ja diese Möglichkeit...

bg
bb


----------



## sailor (9 Juli 2011)

denk mal darüber nach:
http://www.motron.de/index.php?article_id=46

Das ist ein Frequenzteiler mit 3 Kanäle, deren Teilerverhältnis kannst du über Jumper einstellen.
Was das Ding kostet, weiss ich aber nicht. Ansonsten  kannst du dir so einen F-Untersetzer selber zusammenlöten.

Gruß
Sailor

PS: Die Genauigkeit setzt du dann selbstverständlich auch runter!


----------



## LargoD (9 Juli 2011)

bits'bytes schrieb:


> Wenn das Teil 100 Imp / Umdrehung hat kann man schon mal mit 200-400 Imp Pro Sekunde rechnen wenn der Bediener mal fleissig dreht... ich denke eine normale Bearbeitung (10 ms) kannst du vergessen.


Das kann ich aus Erfahrung bestätigen. Ich setze ähnliche Handräder ein. Mit einem Abtast-Intervall von 1ms ist komfortables Arbeiten möglich.  Bei 10ms Abtast-Intervall muss man langsam und gleichmäßig drehen, komfortables Arbeiten ist damit nicht möglich.
Lösungen für die Auswertung der Drehgeber-Signale findest Du im Programmierwettbewerb, zweite Aufgabe.
Gruß
Erich


----------



## Boxy (11 Juli 2011)

Thx, das es mit 10ms nicht geht habe ich ja selbst angedeutet 
Daher die Frage nach etwas über Zähleingänge ...


@LargoD, hast Du Deine Lösung mal bei 10ms versucht?


----------



## fliegender holländer (13 Juli 2011)

Hallo,

falls sich das Problem noch nicht gelöst hat, ich habe bei uns in der Firma eine Fräsbank stehen wo es folgendermaßen gelöst wurde: statt einen Impulsgeber wurde ein einfacher gleichstromgenerator für die Handradfunktion verwendet.
Das Signal geht allerdings sofort auf den Regler sein Sollwert.Über eine umschaltung mittels Poti und ein Relais wird hierbei zwischen Eil- und Schleichgang umgeschaltet.
Das Ding funktioniert einfach klasse, wenn du willst scanne ich es mal als PDF ein.

Gruß, Ronald.


----------



## Boxy (13 Juli 2011)

Hi,

ne danke ... Das Handrad hängt ja in einem Handpanel und ist halt ein Elektronisches Handrad. Soll ne SW Lösung sein ...


----------



## StructuredTrash (13 Juli 2011)

100 Impulse/Umdrehung = 400 Signalflanken/Umdrehung. Bei 10 ms Taskzyklus wird das schon bei 1/4 Umdrehung/Sekunde kritisch. Das wirst Du dem Bediener kaum zumuten können.
Du brauchst entweder
eine schnelle Zählerbaugruppe,
zwei Interrupteingänge
oder eine zusätzliche SPS-Task mit z. B. 1 ms Zyklus.
Ich weiss aber nicht, was Deine SPS in dieser Richtung bietet.


----------



## LargoD (13 Juli 2011)

Die 100 Impulse pro Umdrehung bei 10ms Abtastintervall solltest Du vergessen, das ist nicht brauchbar. 
Entweder wesentlich schneller abtasten oder ein Handrad mit deutlich weniger Pulsen pro Umdrehung.
Wenn das Handrad nicht änderbar ist und das Abtastintervall auch nicht, muss Du einen Vorteiler einsetzen. Für eine andere Anwendung habe ich so was schon mal gebraucht. Falls erforderlich kann ich Dir einen Hersteller raussuchen. 

Gruß
Erich


----------



## Boxy (14 Juli 2011)

StructuredTrash schrieb:


> 100 Impulse/Umdrehung = 400 Signalflanken/Umdrehung. Bei 10 ms Taskzyklus wird das schon bei 1/4 Umdrehung/Sekunde kritisch. Das wirst Du dem Bediener kaum zumuten können.
> Du brauchst entweder
> eine schnelle Zählerbaugruppe,
> zwei Interrupteingänge
> ...



Hi,

also Interrupteingänge hat die nicht, ist zu billig *ROFL*
SPS-Task mit 1ms wäre toll, ist aber net möglich da nicht vorhanden 

Also was gehen würde und ja auch mein Gedanke ist, schnelle Zähler!
Da hat das Teil zwei Counter wir glaube schon oben beschrieben.

Mir fällt da halt gerade keine Strategie bzw. nen Code ein.
Da sehe ich den Wald vor lauter Bäumen gerade nicht mehr !


----------



## LargoD (14 Juli 2011)

Und die Zählerbaugruppe in Deinem System kann auch das Signal aus dem Handrad dekodieren? (Also zwei Eingänge um 90 Grad versetzt?)
Wenn nicht, musst Du noch einen Quadraturdekoder vorschalten.
Gruß
Erich


----------



## LargoD (14 Juli 2011)

Noch eine Idee, wie es vielleicht doch per Software geht.
Wenn Du mit dem restlichen Programm eine deutliche Zykluszeitverlängerung vertragen kannst und wenn sich das Timing Deines zyklischen Programmes einigermaßen vorhersagbar verhält, könntest Du den Software-Dekoder an vielen Stellen im Zyklus aufrufen.
Die Aufrufe musst Du so verteilen, dass ausreichend kurze Auslese-Intervalle entstehen. Vorher natürlich immer das PAE aktualisieren.
Ist nicht schön, so könnte es aber gehen.
Gruß
Erich


----------



## sailor (15 Juli 2011)

Hi,

Ich hab ja schon angeboten, über einen Untersetzer die Signale für die SPS verarbeitbar zu machen. 
Wenn du die untersetzen Signale in der SPS wieder "hochsetzt", bzw. aus der untersetzten Frequenz in Abhängigkeit von der Zykluszeit, die ja die kürzeste messbare Zeit der "Normalo"-SPS ist (bei Siemens S7 im OB1 temporäre Variable OB1_PREV_CYCLE) dir einen Messwert bildest?
Man müßte halt etwas rechnen und 100% genau wirds auch nicht. Ausserdem wirds wahrscheinlich bei Stoppen/Drehrichtungswechsel des Rades zum Übersteuern kommen.


Gruß
Sailor


----------



## StructuredTrash (15 Juli 2011)

Ich kenne die Steuerung zwar nicht, aber bei Onboard-Zählereingängen wird wohl kein Quadraturdekoder dabei sein. In diesem Fall würde ich die von LargoD in #20 vorgeschlagene Softwarelösung aufgreifen. Ich weiss allerdings nicht, ob die Steuerung einen PAE-Refresh überhaupt ermöglicht. Wenn ja, musst Du für die übrigen IO's aber noch ein eigenes PAE basteln. Wenn nicht, oder wenn Du Dir diese Mühe sparen willst, könntest Du auch das Programm in 10 von der Verarbeitungszeit etwa gleich lange Teile aufteilen und mit einem Multiplexer in jedem Zyklus nur einen dieser Teile sowie die Handradauswertung aufrufen. Das bedeutet natürlich, dass nach jedem Zyklus ein Teil der Verarbeitungsergebnisse sofort an die Ausgänge ausgegeben wird. Du musst prüfen und sicherstellen, dass das keine negativen Auswirkungen auf die Gesamtfunktion der Anlage hat.


----------



## Boxy (15 Juli 2011)

Danke für die vielen guten Ratschläge,

aber nochmals. Ich habe *keine Siemens PLC* und kann auch kein PAE zwischendurch einlesen. 
Daher habe ich ja auch son die Einsicht und geschrieben es wird wohl nur über HW-Counter gehen.
Die 10-12ms Zykluszeit machen halt nun die Auswertung via SW nicht Bedienfähig. Am Anfang sah es halt anderst aus und alle Anfragen waren auch in der Richtung z.B. bei Inducoder, "ja das würde funktionieren und das Handrad wurde schon so oft eingesetzt"

Auch fallen die ganzen "Bastel-Lösungen" weg!


----------

