Step 7 BCD - Winkelgeber an Eingangskarte auslesen

Cool-Ice

Level-1
Beiträge
9
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo

Ich habe mal eine Frage auf die Machbarkeit folgender Aufgabenstellung:

Ich habe einen Winkelgeber mit 360°. Dieser gibt den Winkel BCD codiert über 10 einzelne Leitungen weiter. Dabei gilt:
Leitung 1 Bit 1 1x1
Leitung 2 Bit 2 2x1
Leitung 3 Bit 3 4x1
Leitung 4 Bit 4 8x1
Leitung 5 Bit 5 1x10
...
Leitung 10 Bit 10 2x100

Mein Gedanke ist nun diese zehn Leitungen jeweils auf einen Eingang zu legen (in der richtigen Reihenfolge natürlich) und dann per Merkerwort und Umwandlung von BCD in INT als Winkel anzeigen zu lassen. Dies sollte auch ohne Probleme Funktionieren. Was ich allerdings nicht weis ist ob der Eingang von ersten Bit schnell genug zum zählen ist. In meinem Fall benötigt der Winkelgeber für eine ganze Umdrehung 2s. Wenn ich mich jetzt nicht verrechnet habe ändert sich das Bit dann alle 5 ms. Als Eingangskarte habe ich eine 321-1BH02-0AA0 oder eine 321-1BL00-0AA0 zur Verfügung. CPU ist eine 315-2DP

Was denkt ihr? Wird das funktionieren oder sind die Eingänge zu träge sodass nicht richtig ausgewertet werden kann.

Danke schon mal an alle
 
Wenn es dir nur um das Anzeigen lassen geht, sollte das nicht weiter stören. Denn den Wert wirst du vermutlich nirgends alle 5 ms aktualisiert angezeigt bekommen. Oder was verwendest du zur Darstellung des Wertes?
Wenn du danach positionieren möchtest auf ein LSB genau, dann ist das etwas anderes. Wobei dann auch noch andere Dinge zum Tragen kommen.
 
> Was ich allerdings nicht weis ist ob der Eingang von ersten Bit schnell genug zum zählen ist.

was du machen kannst ist:

INT "gelesenen Winkelwert"
INT "letzten gelesenen Winkelwert"
LONG "gespeicherterWert"


a) Winkelwert lesen und auf "gelesenen Winkelwert" schreiben
b) Differenz zum "letzten gelesenen Winkelwert" bilden
c) Differenz zum "gespeicherterWert" addieren
d) "gelesenen Winkelwert" auf "letzten gelesenen Winkelwert" schreiben

"gespeicherterWert" wäre deine Positiom

bei c) musst du den Überlauf 0->360 in beide Richtungen beachten.
und "Referenzieren" musst du auch.
 
Es ist generell keine gute Idee, auf parallelen Schnittstellen Werte binär- oder BCD-Kodiert zu übertragen.
Wenn man das unbedingt tun will, sollte man zusätzliche Maßnahmen gegen Übertragungsfehler treffen, weil die inkonsistente Übertragung der einzelnen Bits mit einer Wahrscheinlichkeit größer als Null zu Übertragungsfehlern bis zur Hälfte des Messbereichs führen wird. Die Hersteller des Gebers wissen schon, warum sie intern mit Gray-Kode arbeiten, dann ist der maximal mögliche Fehler durch Daten-Inkonsistenz ein LSB.
Ich würde einen Geber mit Gray-Kode Schnittstelle benutzen und in der SPS umrechnen.
Gruß
Erich
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ja der Winkelgeber liefert die Seine Eingangsspannung an die Ausgänge weiter.
Laut Deinem Schaltbild liefern die Ausgänge keine Spannung weiter. Die NPN-(!)-Transistoren legen die Ausgänge auf GND.

PS: zum referenzieren ist nix vorgesehen, lediglich die ZählRichtung kannst Du vorgeben.

PPS: Was willst Du mit der WinkelAngabe machen? Nur anzeigen oder . . . ?

. . . Gray-Kode . . . , dann ist der maximal mögliche Fehler durch Daten-Inkonsistenz ein LSB.
Für mein Verständnis gibt es beim GrayCode überhaupt keine DatenInkonsistenz.
 
Zuletzt bearbeitet:
Was ich allerdings nicht weis ist ob der Eingang von ersten Bit schnell genug zum zählen ist. In meinem Fall benötigt der Winkelgeber für eine ganze Umdrehung 2s. Wenn ich mich jetzt nicht verrechnet habe ändert sich das Bit dann alle 5 ms.
Warum willst Du zählen? Der Encoder liefert doch schon den ganzen Positions-Zahlenwert. (Wenn Du Bit 1 zählst, mußt Du auch noch mindestens das Bit 2 und das Paritätsbit (Pin 11) auswerten um die Drehrichtung zu erkennen für Vorwärts-/Rückwärtszählen. Und Du brauchst einen Referenzpunkt.)
Nicht nur der Eingang für das niedrigste Bit 1 muß schnell genug sein - alle verwendeten Eingänge müssen schnell genug sein, weil sich beim Drehen nicht nur das niedrigste Bit ändert, es können sich auch viele Bits gleichzeitig ändern, z.B. bei 199 --> 200
Für die sichere Auswertung der Encoderposition während sich der Encoder dreht muß die Zykluszeit Deines SPS-Programms kürzer als die 1°-Drehzeit (ca. 5ms) sein. Oder die Eingänge müssen im auf 5ms eingestellten OB35 ausgewertet werden. Und es sollte das Paritätsbit (Pin 11) angeschlossen und mit ausgewertet werden (oder eine andere Plausibilitätskontrolle). Die Auswertung Deines Encoders mit Deiner Hardware ist theoretisch gerade so machbar.
Welche CPU 315-2DP hast Du genau? 6ES6 315-2.......?

Weil die Ausgänge des Encoders nach GND schalten (m-schaltend), mußt Du beim Anschluß an Deine p-schaltenden Eingangskarten jeweils einen Pull-up-Widerstand (ca 2 kOhm) vom Encoderausgang/SPS-Eingang nach +24V schalten (oder Optokoppler zwischenschalten).

Ein Anschluß des Encoders an eine A/B-Zählerbaugruppe geht leider nicht wegen der BCD-Codierung (kein Unterschied zwischen 9->0 und 9->8).

Harald
 
Hallo PN/DP

So hatte ich das noch gar nicht gesehen. Danke.

Die CPU ist eine 315-2AH14-0AB0

Um mal einen Überblick zu bekommen worum es bei mir geht:
In der Anlage die Umgebaut werden soll befindet sich quasi nur eine Hauptkette, diese läuft kontinuierlich. An dieser befindet sich der Winkelgeber. Der Winkelgeber ist an eine Auswerteinheit (von 1989) der selben Firma angeschlossen. In dieser Auswerteinheit befinden sich Steckkarten auf der mit Hilfe von Schaltern eine Position angegeben werden kann. Die Ausgänge der Auswerteinheit gehen dann auf Eingänge einer S5. Diese Steuert dann z.B. ein Ventil an. Also in etwa so das ich sagen kann bei 101° Stopper ausfahren und bei 134° Stopper einfahren.
Das Problem ist das ich für jeden Zeitpunkt einen eigenen Schalter auf der Steckkarte brauche und diese bereits alle belegt sind.
Deshalb wollte ich die S5 rausschmeißen und die S7 einbauen und den Winkelgeber direkt auslesen, damit hätte ich dann unendlich viele Positionen zu Verfügung mit denen ich arbeiten kann.

Das mit dem Zählen war etwas blöd beschrieben. Ich will ja nur ein Vergleich von Soll und Ist Position machen.

Das mit den Pull-Up-Widerständen hab ich noch nicht ganz kapiert. Ich dachte der Winkelgeber gibt die Spannung einfach weiter.

Danke
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn der Winkelgeber schon so alt ist stellt sich mir die Frage ob man da nicht mal in etwas Neueres investieren möchte. Wenn man eh schon gerade am Umbauen ist macht es eventuell Sinn den 30 Jahre alten Sensor durch was moderneres ersetzten, oder nicht?
 
Das mit den Pull-Up-Widerständen hab ich noch nicht ganz kapiert. Ich dachte der Winkelgeber gibt die Spannung einfach weiter.
Stell Dir die AusgangsTransistoren als Kontakte vor, die laut SchaltBild die Ausgänge mit Masse verbinden (bei 0-Signal) oder auch nicht (bei 1-Signal).
Die PullUpWiderstände zwischen der BetriebsSpannung (+24VDC) und den Ausgängen sorgen dafür, dass bei offenem Ausgang eine Spannung >0V und <24V (abhängig vom Wert des PullUps und dem "EingangsWiderstand" der DI-Baugruppe) resultiert.

Wenn man eh schon gerade am Umbauen ist macht es eventuell Sinn den 30 Jahre alten Sensor durch was moderneres ersetzten
Gibt es denn noch WinkelGeber mit 1° Auflösung und würden die auch 30 Jahre lang ihren Dienst tun?
Für mich wäre eine andere Codierung ein wichtigerer GesichtsPunkt, z.B. Excess3Gray.

 
Zuletzt bearbeitet:
Darüber sollte Cool-Ice mal gründlich nachdenken!
Über die 30 Jahre eher nicht (muss ja nicht um jeden Preis "deutsche Wertarbeit" sein ;o), aber vielleicht über die 1° Auflösung (für die die 5ms-MachbarkeitsBetrachtung gilt).
Ich dachte mir nur, dass 90 Striche/Umdrehung heutzutage wohl schwieriger zu bekommen sind als z.B. 4096 Striche/Umdrehung und wenn überhaupt, dann im BilligstSegment mit vielleicht 3 h LebensDauer. Und nein, ich werde mir nicht die Mühe machen, nach WinkelGebern mit 1° Auflösung zu guckeln.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Also der Winkelgeber muss drin bleiben. Und so wie der aussieht hält der auch noch mal 30 Jahre.
Solange keiner daran herum fummelt vielleicht :ROFLMAO: .

Sei vorsichtig beim Umbau, 12mA Ausgangsstrom lässt nicht gerade viel Spielraum zum Experimentieren! Falls vielleicht früher als gedacht Bedarf nach einem Ersatzteil besteht, ich würde einen Drehgeber mit Busanschluss (PN/DP) bevorzugen, z.Bsp. Leine & Linde. Die gibt es auch in "gepanzerter" Ausführung, falls notwendig. Normale Ausführungen tun aber auch schon seit vielen Jahren in rauer Umgebung (Kieswerk) zuverlässig ihren Dienst, vom Gröbsten nur durch einen einfachen Spritzschutz geschützt. Eine passende CPU mit DP-Master hast du dafür ja.

Ansonsten musst du probieren ob es funktioniert. Ein bisschen grenzwertig ist es schon. Zur Überwachung kannst du das even-Bit auswerten, oder auch die Differenz zwischen den zyklischen Messwerten. So kannst du zumindest erst mal erkennen, ob die eingehenden Werte plausibel bzw. konsistent sind. Die Verzögerung der Eingänge auf den genannten Baugruppen kannst du NICHT parametrieren (Danke Harald).


  1. Was muss die S7 denn neben der Auswertung des Gebers sonst noch bewältigen? Wie groß wird die Zykluszeit werden?
  2. Wie lang ist die Leitung zwischen Drehgeber und Auswerteeinheit? Ggf. geschirmtes Kabel verwenden!
  3. Wie genau musst du die Position erfassen? Du wirst ein gewisses Fenster definieren müssen?
 
Zuletzt bearbeitet:
Guck dir mal den RN3001 von ifm an, kostet euch mit Prozenten vemutlich unter 500EURO.
Die 10 Eingänge die du für BCD Geber brauchst kosten ja auch Geld.
Beim RN3001 brauchst du nur die Profibus und 24V Leitung als zusätzlichen Hardwareinvest und du brauchst
dir keine Gedanken über die Geschwindigkeit deiner Eingänge machen.
UND du hast keine Bastelei mit Pull up Widerständen.
 
Sei vorsichtig beim Umbau, 12mA Ausgangsstrom lässt nicht gerade viel Spielraum zum Experimentieren!
Da sollte für die Pull-up-Widerstände ein Wert von 2,2 kOhm, besser 2,4 kOhm gewählt werden. Vielleicht funktioniert auch ein Wert von 2,7 kOhm noch.
(Hinweis: durch das m-schalten und Pull-up-Widerstand an p-lesenden Eingängen werden die Bits negiert.)

Besser wäre es, für die Digitaleingänge eine M-lesende Baugruppe zu nehmen (z.B. 6ES7 321-1BH50), da können die Encoder-Ausgänge ohne zusätzliche Widerstände direkt an die Eingänge angeschlossen werden und belasten die Encoder-Ausgänge nur mit typisch 7 mA.
Oder nimm eine S7-1200 nur zum Einlesen der Encoderbits - da können die Eingänge auch M-lesend verschaltet werden, und die ist auch sicher schnell genug.


Die Verzögerung der Eingänge auf den genannten Baugruppen kannst du parametrieren.
Meinst Du die genannten 321-1BH02 und 321-1BL00? Wie geht das da?

Harald
 
Zurück
Oben