Wegeverfolgung ohne Geber

Zuviel Werbung?
-> Hier kostenlos registrieren
Da wäre schon einfacher Ini mit einem Sternrad an der Abtriebsseite des Motors! Oder einen Initiator an dem Lüfterrad!

Und am besten auf eine Geberkarte und einstellen Impuls und richtung in der Hardware Config wenn ich mich nicht irre!

Mfg
 
Eine VIPA - CPU315SB/DPM und WAGO I/O 750 Module über Profibus.

Ich weiß aber sicher, dass meine alte Firma für Impulse des Drehgebers einen DI einer ET200S verwendet hat und da hat das auch alles funktionert.

Bloß wie die das verdrahtet haben weiß ich leider nicht mehr!

Und dann bräuchte man ja auch ein HTL Signal mit bis zu 30V?????

Welches Signal könnten die auf einen Eingang verdrahtet haben? A, A/, B, B/, C, C/????

Grüße Pico

Wenn man einen HTL-Geber nimmt, klemmt man das A, B und ggf. das C (auch manchmal N genannt) an. Die negierten Signale kann man ignorieren.

Was besonders wichtig ist, ist die Zeit zwischen den einzelnen Impulsen, denn wenn die schneller als die SPS-Zykluszeit kommen, dann verzählt man sich. Für sowas gibt es extra Zählerbaugruppen, die die schnellen Signale erfassen können.

A + B geben Impulse in der angegebenen Auflösung ab. Die Signale sind etwas versetzt, damit auch die Drehrichtung erkannt werden kann. Die C-Spur gibt nur einen Impuls pro Geberumdrehung ab.

Mehr zu Gebersystemen gibts z. B. hier: http://sew-eurodrive.de/download/pdf/16742001.pdf
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hab jetzt mal einen Geber bestellt, bei welchem man zwischen HTL push pull und TTL umschalten kann (frei programmierbare Auflösung).

Werde mein weiteres vorgehen berichten!

Danke für eure Hilfe!

Grüße Pico
 
Mein Geber ist ja frei programmierbar, d.h ich kann eine Strichzahl bis zu 65.536 einstellen.

Mein Band läuft 30m/min => 0,5m/s => 1cm = 20ms

20ms Pulse müsste die SPS ja an den Eingängen verkraften.

Nur wie komm ich auf die Strichzahl die ich am Encoder für 1cm = 20ms einstellen muss?

Kann mir jemand auf die Sprünge helfen?

Grüße Pico
 
Vermutlich wirst Du den Geber ja an der Lastseite montieren, z.B. an einer Umlenkwelle für das Band. Kreisumfang = d * Pi. So kannst Du die Fahrstrecke des Bandes auf Umdrehungen der Umlenkrolle umrechnen.
 
Also ich hab das ganze jetzt fertig programmiert.

Jetzt würde ich gerne wissen ob ihr es genauso gemacht hätte bzw. ob ihr Verbesserungsvorschläge habt oder es ganz anders gemacht hättet.

Ich haben einen Wegimpulsgber von Sick gekauft (ca 200€) also preislich nichts zu mekern.

Habe die Signalleitung A auf einen DI an meine SPS angeschlossen und die Auflösung des Gebers auf 3cm / Impuls eingestellt. D.h. ich bekomme alle 50ms einen Impuls (was ein DI auch noch verkraftet lt. Siemens). Meine Bandgeschwindigkeit ist 39,8 m/min => 3,3cm pro 50ms.

Ich melde ein Teil auf dem Band durch eine Lichtschranke an. Dies mache ich über ein DB Register welches 64 Plätze vom Typ BOOL beinhaltet und durch jeden PPI Takt wird dieses Register um einen Platz nach links verschoben. 50 ms nach der Anmeldung bekomme ich eine Rückmeldung von der Kamera ob dieses Teil "GOOD" or "BAD" war und speichere das Ergebnis in einem zusätzlichen FIFO Speicher.

Wenn nun in dem DB Register ein bestimmter Platz erreicht ist (der Platz vor dem Ausschusskanal, hier Platz_39) lese ich den Eintrag aus dem FIFO register und prüfe den Status ob ok oder nok.

Ist das sinnvoll hier zwei Register zu führen oder wäre es eurer Meinung nach auch mit einem Möglich. Mir fällt momentan nichts ein, da ich ja einen bestimmten Zeitpunkt brauche an welchem ich den Status aus dem FIFO lesen und das geht ja nur mit diesem Schieberegister oder????
 
Wenn nun in dem DB Register ein bestimmter Platz erreicht ist (der Platz vor dem Ausschusskanal, hier Platz_39) lese ich den Eintrag aus dem FIFO register und prüfe den Status ob ok oder nok.

Ist das sinnvoll hier zwei Register zu führen oder wäre es eurer Meinung nach auch mit einem Möglich. Mir fällt momentan nichts ein, da ich ja einen bestimmten Zeitpunkt brauche an welchem ich den Status aus dem FIFO lesen und das geht ja nur mit diesem Schieberegister oder????
Hört sich doch gut an. :D
Alternativ könnte sein:
Nur ein FIFO und das als Byte: Teil vorhanden = 1 ; Good = 2 ; Bad = 3
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wie würdest du die Positionsabfrage dann mit nur einem Fifo lösen??

Ich muss ja irgendwie die Position bestimmen wann aus dem FIFO ausgelesen werden soll,
aber wenn der Eintrag im FIFO steht wie weiß ich dann wann ausgelesen werden soll??
 
Hört sich doch gut an. :D
Alternativ könnte sein:
Nur ein FIFO und das als Byte: Teil vorhanden = 1 ; Good = 2 ; Bad = 3

Das wäre sicher eine gute Lösung!Und du sparst die die 2te Schieberei!!

Im endeffekt ist es wie deine Lösung nur das du anhand von einer Nummer entscheidest was mit dem Teil geschieht!

Mfg
 
Das wäre sicher eine gute Lösung!Und du sparst die die 2te Schieberei!!

Im endeffekt ist es wie deine Lösung nur das du anhand von einer Nummer entscheidest was mit dem Teil geschieht!

Das leuchtet mir auch ein hatte mir schon gedacht dass es nicht notwendig ist zwei Register zu führen.

Mir ist nur nicht ganz klar wie ich dann die Position zur Auswertung der Daten ermittle (Zeitpunkt des auslesens des Eintrags aus dem FIFO).
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das leuchtet mir auch ein hatte mir schon gedacht dass es nicht notwendig ist zwei Register zu führen.

Mir ist nur nicht ganz klar wie ich dann die Position zur Auswertung der Daten ermittle (Zeitpunkt des auslesens des Eintrags aus dem FIFO).

Met dem Takt des Encoders schiebst du deine Daten weiter!Wenn an der richtigen Stelle im Fifo eine 2 steht was z.B.: ein "Schlechtes Teil" bedeutet musst du dann entweder genau an dieser Position bzw. besser wäre ab dann eine Kurze Wegverfolgung mit dem das Teil ausgeblasen wird!

Also bei ersten Ls trägst du eine 1 für Teil vorhanden ein,Bei der Beurteilung eine 2 für ein Schlechtes bzw. eine 3 für ein gutes teil!An der fifo stelle X muss augeblasen werden!

Weist du was ich meine?

Mfg
 
Also ich zeig euch mal so wie ich das programmiert habe (irgendwie werden manchmal Teile "verschluckt" bzw gehen verloren)
vielleicht mach ich da was falsch:

Status eintragen:

Code:
//Gutteil
      U     "E83.4"
      FP    M     50.1
      U     "DB_Command".Kamerapruefung
      SPB   GOOD
//Schlechtteil
      U     "E83.5"
      FP    M     50.3
      U     "DB_Command".Kamerapruefung
      SPB   BAD
      SPA   END

GOOD: CALL  "READ_CLK"
       RET_VAL:=#RET_VAL_SFC1
       CDT    :="DB_DISCHARGE".IN_STRUCT.TimeStamp
      L     50
      T     "DB_DISCHARGE".IN_STRUCT.TE_Status
      SET   
      S     M    160.0
      SPA   END
BAD:  CALL  "READ_CLK"
       RET_VAL:=#RET_VAL_SFC1
       CDT    :="DB_DISCHARGE".IN_STRUCT.TimeStamp
      L     0
      T     "DB_DISCHARGE".IN_STRUCT.TE_Status
      SET   
      S     M    160.0
END:  NOP   0

FIFO:

Code:
    CALL  "FB_FIFO" , "DB_INST_FIFO"
       xWrite    :=M160.0
       XRead     :="DB_Register_Kameraband".Platz_24
       wStore    :="DB_DISCHARGE".IN_STRUCT
       xReset    :=M200.0
       wValue    :="DB_DISCHARGE".OUT_STRUCT
       iCount    :=MW180
       xOverflow :=M115.0
       xUnderflow:=M115.1

      SET   
      R     M    160.0

Ausschuss abblasen:

Code:
  U     "DB_Register_Kameraband".Platz_24
      U(    
      U(    
      L     "DB_DISCHARGE".OUT_STRUCT.TE_Status
      L     0
      ==I   
      )     
      U     "DB_Command".Kamerapruefung
      O     "DB_Höhenkontrolle".Teil_ausblasen
      O     "DB_Command".Mode_Empty
      O     "DB_Kameratest".Pruefung_starten
      )     
      L     "DB_Zeiten".T44
      SV    T    129
      U     T    129
      =     #Abblasen

TE auf Band anmelden:

Code:
  U     "B96.5"
      U     "K87.2"
      FP    M     83.7
      S     "DB_Register_Kameraband".Platz_1

TE weiterschieben:

Code:
  U     "DB_CONVEYOR".Fertigteilband.D_BO_Takt_PPI
      FP    M    140.2
      SPBN  N12E
      AUF   "DB_Register_Kameraband"
      L     DBD    0                    //DBX0.7 = BIT 0
      SRD   1
      T     DBD    0
      L     DBD    4
      RRDA  
      T     DBD    4
N12E: NOP   0

Danke für eure Hilfe!

Grüße Pico
 
Sieht ja schon mal nicht so schlecht aus!

Hast du schon eine Ahnung wo die Teile verloren gehen?Bzw was hast du schon getestet?Ausblasen geht?
Wieviele Fifo Plätze hat dein Band?

Mfg
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren

Das Ausblasen funktioniert generell.

Hast du schon eine Ahnung wo die Teile verloren gehen?Bzw was hast du schon getestet?

Ich trage ja je nach Gut oder Schlecht von der Kamera einen Status (0 oder 50) in den
DB_DISCHARGE ein und übertrage diesen dann in durch den Merker M160.0 in das FIFO Register ein.

Auslesen tu ich das FIFO dann wieder bei einem Takt im Kameraband Register (Platz_24).

Erstens mal stört mich irgendwie dieser Merker 160.0....Ich setze diesen bei der Kamerauswertung
und nach Eintrag ins FIFO wird er wieder zurückgesetz, hab aber im Moment keine Idee wie man das intelligenter lösen kann.

Desweiteren vergleiche ich beim Ausblasen den Wert aus dem FIFO (welcher auch im DB_DISCHARGE steht OUT_STRUCT), wenn dieser 0 ist dann ausblasen.
In dieser OUT_STRUCT steht ja immer der letze gelesene Wert vielleicht macht auch das Probleme????

Die Impulse des Drehgebers habe ich weiter verkleinert d.h. die Auflösung ist nun 5cm / Impuls => 264 Flanken pro sekunde.

Wieviel FIFO Plätze hat dein Band?

Es sind ca. 3 - 4 Plätze..... von der Auswertung Kamera bis zum Ausschuss sind es ca. 0,5m
 
Das Ausblasen funktioniert generell.

Okay das ist ja schon mal gut!

Ich trage ja je nach Gut oder Schlecht von der Kamera einen Status (0 oder 50) in den
DB_DISCHARGE ein und übertrage diesen dann in durch den Merker M160.0 in das FIFO Register ein.

Wenn du 0 einträgst finde ich das irgendwie unpassend!Denn wenn du das register schiebst füllst du ja von hinten wieder mit 0 auf!Also mach 2 zahlen ungleich 0 für den Status dann sieht du mal etwas mehr!

Auslesen tu ich das FIFO dann wieder bei einem Takt im Kameraband Register (Platz_24).

Das passt ja soweit auch!Wie genau bist du dann mit dem ausblasen?


Erstens mal stört mich irgendwie dieser Merker 160.0....Ich setze diesen bei der Kamerauswertung
und nach Eintrag ins FIFO wird er wieder zurückgesetz, hab aber im Moment keine Idee wie man das intelligenter lösen kann.

Wenn das sowieso nur der Takt ist vom Geber der alle 5cm einmal kommt kannst ja auch direkt den Eingang nehmen!Und wo er verwendet wird mit einer Flanke auswerten!


Desweiteren vergleiche ich beim Ausblasen den Wert aus dem FIFO (welcher auch im DB_DISCHARGE steht OUT_STRUCT), wenn dieser 0 ist dann ausblasen.
In dieser OUT_STRUCT steht ja immer der letze gelesene Wert vielleicht macht auch das Probleme????

Ich würde nicht nur auf den einen schauen!Sonder schau einfach auf das generelle Fifo!Wenn da eine Ausblasinfo steht für Platz 24 dann muss das Teil raus!




Es sind ca. 3 - 4 Plätze..... von der Auswertung Kamera bis zum Ausschuss sind es ca. 0,5m

Wieso hast du dann ein 64 Bit fifo gemacht??

Mfg Mario
 
Zurück
Oben