Step 7 32Bit Zähler mit Drehgebersignalauswertung + Richtung

Xplosion

Level-1
Beiträge
202
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

bin zwar erst Neuling bezüglich S7 programmieren, aber ich glaube ich komm ganz gut voran.
Mir fehlen viele fertige Standardbausteine, wie z.b bei einer Siemens Logo.

Es gibt zwar teilweise fertige Bibliotheken, aber ich hab jetzt mal selber zum Erstellen angefangen. Da lernt man eh am besten.

Folgendes hab ich bereits gemacht:

Einen Wandler, der mir bei einen Merkerdoppelwort die zwei Wörter vertauscht (wegen HMI-Display, MW´s sind vertauscht)
Einen 32Bit-Zähler mit Eingangssignal A u. B + Richtungsauswertung. Desweiteren kann eine Abschaltung ab einen bestimmten Wert erfolgen. (Einsatzbereich Wickeltechnik; Meterzählung + Meterabschaltung)


Beides kann in meiner eigenen Bibliothek als FC aufgerufen werden. Ist ganz praktisch, da man ja immer die selben Funktionen braucht.


Nun aber zu meiner Frage bezüglich Drehrichtungsauswertung:

1. Reicht es, wenn beim Kommen des Signals A vom Drehgeber abgefragt wird, ob das B-Signal aktuell 1 oder 0 ist und daraufhin ein Impuls in positiver oder negativer Richtung ausgegeben wird?

Hab zuerst mehr oder weniger beide Signale abgefragt. Wenn Signal A kommt und danach B , dann positiv. Wenn zuerst B und dann A kommt, dann negativ.
Wenn ich mir aber die Funktion von einen Drehgeber so anschaue, dann müsste es doch reichen, die Abfrage so wie in Punkt 1 zu machen oder?
 
Hi,

es würde theoretisch mit deiner einfachen Auswertung funktionieren, damit hast du aber nur ein viertel der Auflösung die der Drehgeber eigentlich hätte.
Ein weiterer Nachteil ist, dass deine Erkennung empfindlich auf ein wackelndes Signal auf deiner der Leitungen reagiert.
Wenn z.B. Spur A sporadisch flackert und Spur B stabil bleibt, dann würde deine Auswertung bei jedem Signalwechsel eine Wertänderung in eine Richtung registrieren.
Dein Zähler würde damit voll aus dem Ruder laufen.

Besser ist es, die Signale des Gebers vom Gray-Code in den Wert zurückzuwandeln.
Dazu kannst du anhand der Signale die Wertigkeit anhand folgender Tabelle bilden:

Zustand : Wert
--------------------
A=0 und B=0: 0
A=1 und B=0: 1
A=1 und B=1: 2
A=0 und B=1: 3

Bei jedem Aufruf vergleichst du den Wert mit dem vom letzten Aufruf und bildest die Differenz.

Wenn jetzt z.B. B=0 ist, und A zwischen 1 und 0 flackert, bekommst du bei der Differenz abwechselnd -1 und +1 heraus.
Damit ist deine Zählerauswertung um maximal 1 verkehrt.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich google grad ein bisschen. Glaub ich verstehe schon was du meinst. Aber wie man sowas umsetzt entzieht sich meiner Kenntnis.

Ich weiß wie ein Inkrementalgeber funktioniert und habe eigentlich immer welche mit den Anschlüssen: A,Anicht,B,Bnicht,0,0nicht

Jetzt müsstest mir nochmal erklären, welche Signale ich wirklich davon verwenden sollte für eine exakte und fehlerfreie Messung.
 
Sie brauchen fur eine zahler nur die kanale A und B.
Jede kanal abfragen auf FP und FN , ist ein resultat 1 dan das resultat vergleigen mit der zustand von das andere kanal und an had davon die zahler adieren mit +1 oder -1, mit dieser lossung haben Sie die 4 fache auslossung von der Encoder.

Code:
  U     #Ingang_A
      FP    #FP_A
      =     #MerkerA

      U     #Ingang_B
      FP    #FP_B
      =     #MerkerB

      U     #Ingang_A
      FN    #FN_A
      =     #MerkerC

      U     #Ingang_B
      FN    #FN_B
      =     #MerkerD

     

      O     #MerkerA
      O     #MerkerB
      O     #MerkerC
      O     #MerkerD
      SPBN  end

     
      U     #MerkerA
      UN    #Ingang_B
      O     
      U     #MerkerB
      U     #Ingang_A
      O     
      U     #MerkerC
      U     #Ingang_B
      O     
      U     #MerkerD
      UN    #Ingang_A
      SPBN  en1a                        // als status = 0 dan omlaag tellen anders optellen
      L     L#1
      SPA   en1b
en1a: L     L#-1
en1b: T     #hulp
      L     #Totaal
      +D    
      T     #Totaal
 
Hallo,
für Deine theorethische Auswertung reicht es, wenn Du das Richtungs-Signal als Master betrachtest.
Richtung = +, dann Vorwärts / Richtung = -, dann Rückwärts

In der Praxis wird eine Zählerbaugruppe, bzw, Zählerkarte verwendet.
Dazu gibt es entsprechende F_B/C's, die mit der HW leider nicht mitgeliefert werden.
Z.B: FM-350-1;

Aber zum Guten: hier im Forum gibt es ein Thema über Zählerauswertung.
Ah, es wurde sogar ein Programmierwettbewerb durchgeführt.

Für Details ist es aber für mich zu Wochenendig.

Ein schönes WE
jb
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Für meine Insevis-CPU gibt es auch eine Zählerkarte. Aber diese hat doch nur die Funktion der schnellen Zählung oder?

Oder gibt es dann dafür auch spezielle Funktionsbausteine oder Funktionen?

Prinzipjell geht es mir erstmal darum, diese Erkennung richtig zu programmieren. Danach muss ich natürlich schauen, wie es mit den "normalen Digitaleingängen" ausschaut bezüglich der Erkennungszeit.

Brauche eigentlich nur einen "normalen Meterzähler". Hab so einen schonmal in der Siemens Logo genutzt. Man muss halt aufpassen, dass die Zykluszeit immer unter der effektiven Impulsdauer ist.

Es reicht, wenn ich eine Ware mit einer Geschwindigkeit von 300m/min in 10cm-Schritten messen kann. Das sind 5m/s und bei einem 50cm-Messrad (Umfang) ergibt das 50 Impulse pro Sekunde.
Mit einer 0BA7 Logo mit 4ms Zykluszeit hab ich diese Auswertung nicht mehr ganz geschafft. Bin dann auf 25cm-Schritte zurückgegangen. Seitdem funktioniert es 100%ig genau.

Da ich solche Aufgaben aber in Zukunft mit der S7 lösen möchte, versuche ich mich in diese Thematik schonmal rechtzeitig einzuarbeiten.

Falls ich doch so ein Zählermodul benötige, wie funktioniert das dann eigentlich? Sobald ich einen Funktionsbaustein oder Funktion aufrufe, benötigt das doch eine Abarbeitungszeit.

Bei der Logo durfte man schnelle Eingänge nur direkt auf einen Zähler geben. Sobald eine andere Funktion dazwischen war, hängt man wieder in der Zykluszeit fest.
 
Zuletzt bearbeitet:
Zurück
Oben