Inkremental Geber Baustein

Purple

Level-1
Beiträge
13
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin Leute,
kennt jemand einen Baustein der ein inkrementales Geber Signal auswerten und mit zählen kann? Also der auch Drehrichtung verrechnen kann. Wenn ich manuell so ein Baustein programmiere ist Berechnung zu langsam und er zählt nicht genau.
 
Wenn der selbst programmierter Baustein zu langsam ist gibt es 2 Gründe dafür:

1. Nicht performat programmiert und somit Zyklen verschwendet,...
2. Dein SPS Zyklus ist zu hoch und du bekommst nicht alle Inkremente mit.

Lösung:
1. Baustein performater programmieren (dazu brauchen wir deinen Code)
2. Absolutwertgeber kaufen der die immer die absolute Position meldet. Dann ist es nicht so schlimm wenn du nicht alle Inkremente mitbekommst da du ja immer den Absolutwert erhälst.

Tipp:
Lösung 2 nutzen oder: Einen Inkrementalgebereingangskarte kaufen
- bei Siemens gibt es sog. Zählerkarten die genau dafür sind im Prinzip sind das kleine CPUs mit ausreichend Leistung um alle Inkremente zu erkennen und diese dann in den langsamen SPS Zyklus zu übergeben als Absolutwert o.ä.
- Bei Codesys gibt es das natürlich auch, bei Wago z.B. oder bei Festo das Encodermodul auf der CECX Basis (geht nicht bei CPX)

Wenn du einen selbst programmierten Baustein nutzt musst du immer das "Nyquist-Shannon-Abtasttheorem" im Kopf haben. Das sagt aus: Deine Abtastfrequenz muss immer größer als zwei mal die abzutastende Frequenz sein sonst erhälst du Aliasingeffekte.
fAbtast > 2*f

Bei 1000 ink/s bedeutet das => 1 ink / ms
Daraus ergibt sich eine Abtastungsperiode von max 0,4999.. ms also eine Frequenz von 1/0,00049999s = 2000Hz
Das würde keine SPS packen..


==> Kauf dir eine Zählerkarte/Encoderkarte oder ein Absolutwertgeber mit Busanschluss (CAN, PB, PN, Ethercat,.. was auch immer)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das sind ja schon mal ein paar Möglichkeiten. Es ist so das meine SPS die Signale schnell genug aufnimmt. Nur ab und zu verzählt er sich bei den Wendepunkten um ein oder zwei Impulse. Wenn ich es aufwendiger mit kompletter Sicherheit programmiere läuft das dann aber nicht mehr wirklich. Daher wollte ich mal so einen Baustein ausprobieren weil die ja ideal ausgelegt sind bevor ich mir was anderes kaufe.
 
Naja einen Baustein kenne ich da nicht. Interessant wäre dein Geber. Hast du dir da was selbst gebaut mit nur einem Ini/Lichtschranke,.. oder hast du zwei? Du brauchst min. 2 um die Drehrichtung ermitteln zu können. Dann solltest du dein Programm so erstellen, dass du nicht eine Schrittkette nutzt die evtl. in einem Schritt steht wo ein Ink nicht mitgezählt wird. Du musst sicherstellen, dass dein Programm in jedem Zyklus mitzählen kann. Logischerweise musst du immer min. ein Zyklus ein "TRUE" Signal haben und min ein Zyklus ein "FALSE" Signal damit du alle Inkremente mitbekommst.

Vielleicht auch eine seperate hochpriore Task erstellen die mit kleinster Zykluszeit läuft damit du keine Schwankungen des Zyklus des restlichen SPS Programms einfängst.

So wie du das beschreibst geht es eigentlich nicht um das Erkennen der Inkremente, sondern nur um das Erkennen der Drehrichtung damit du + oder - rechnen kannst.

Fangen wir vorne an:
Wie sieht dein Geber aus? Inis, Lichtschranken oder ein gekaufter Geber mit RSxxx?
 
Ich habe einen inkrementalen Drehgeber gekauft der 360p/rpm hat un 2 versetzte Signale ausgibt. Ein Motor treibt ihn mit 15 rpm an. Das macht 90 Impulse in der Minute. Das sollte ein SPS doch hinbekommen oder?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Bei der geringen Drehzahl kann das kein Geschwindigkeitsproblem sein.
Wenn Du an den Umkehrpunkten Zählfehler hast, dann stimmt Deine Auswertelogik nicht.
Zu der Geberauswertung habe ich mal eine Aufgabe im Programmierwettbewerb gestellt.
Den Thread findest Du hier. Da sind einige interessante Lösungen drin.

Gruß
Erich
 
90 Imp./Sek. macht bei 2 um 90° versetzten Signalspuren 360 Signalflanken/Sek. im Abstand von 2.77 ms. Da sollte Deine SPS ihr Programm schon in einem festen 1ms-Zeitraster bearbeiten. Sollte es aber Deine Absicht gewesen sein, die Motorumdrehung mit 360° aufzulösen, bist Du mit dem Geber zu hochauflösend unterwegs.
Dafür bräuchtest Du einen Geber mit 90 Imp./Umdrehung.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wichtig ist in diesem Zusammenhang auch die Filterzeit der Digitaleingänge. Die Aufgabe ist schon sportlich über einen normalen Digitaleingang (Flanke alle 5.5ms pro Spur).
Ich würde mich also als erstes dafür interessieren, welche SPS und welche Digin-BG Du benutzt. Im allgemeinen würde ich eine spezielle A/B-Zählerkarte bevorzugen.
 
Ja ich meine natürlich 90 Impulse pro Sekunde. Ich hatte es am Anfang erst als Kettenschaltung programmiert. Jetzt hab ich es relativ einfach umgesetzt und er zählt nahezu fehlerfrei. Allerdings nicht mit der Geschwindigkeit des Motors. Bei 10 rpm funktioniert es aber schon. Ich benutze eine ILC 150 eth von Phoenix Contact.

Merkwürdig ist nur das ich vorher nur einen Kanal benutzt habe um die Position mitzuzählen. So konnte ich nicht die Richtung bestimmen aber das konnte die SPS ohne Probleme mitzählen.
 

Anhänge

  • Geber_Programm.jpg
    Geber_Programm.jpg
    33,3 KB · Aufrufe: 43
Zuletzt bearbeitet:
Zurück
Oben