Geschwindigkeitsmessung im OB35

Nordischerjung

Level-2
Beiträge
826
Reaktionspunkte
111
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin,

meine HW: CPU314C-2DP + ein Paar SM-Karten , Optischer Sensor di-Soric OBS120

Ich habe den OBS120 als Zähler an der CPU angschlossen. Da es ein Inkrementalgeber ist und ich die Geschwindigkeit brauch mache ich folgende Rechnung im OB35 (10ms)

Code:
NW1

      L     "DB20_Allgemein".zaehlwert_aktuell  //Zählwert vom SFB47 als DINT
      DTR   
      L     "DB20_Allgemein".zaehlwert_letzter_zyklus
      -R    
      L     1.000000e+002               // bei 10ms * 100
      *R    
      L     3.000000e+001               // Inkremente pro cm
      /R    
      L     6.000000e-001               //0,6== 60sek/100cm /Minuten/meter
      *R    
      T     "DB20_Allgemein".speed_produkt_extruder
Code:
NW2

      L     "DB20_Allgemein".zaehlwert_aktuell
      DTR   
      T     "DB20_Allgemein".zaehlwert_letzter_zyklus
1. Sollte ich den SFB47 mit im OB35 aufrufen , oder reicht es den im OB1 aufzurufen?

2. Ich messe mit dem Sensor die Geschwindigkeit eines Stranges, direkt am Ausgang eines Extruders und steuere damit die nachfoldgende Anlage. Sollte der Strang jetzt einmal kurzzeitig unterbrochen sein, würde die Anlage keine Geschwindigkeitsvorgabe mehr erhalten. Wie könnte ich eine Überbrückung programmieren, der letzte Sollwert zb?
Ich habe schon mit dem Taktmerker gespielt und alle 100ms den akt. Wert gespeichert. Im Sensor gibt es eine Auswerteausgang, ob noch etwas im Sichtfeld ist oder nicht. Ist dieser Eingang in der CPU nicht mehr vorhanden, schalte ich um auf den letzten aktuellen Wert gespeichert durch 100ms Takt).
Aber der Eingang ist doch sicherlich langsamer als der Zähler, so dass es evtl eine Überschneidung beim Abspeichern mit dem Taktmerker geben könnte. Zb Sensor gibt kein Impuls mehr raus, ich speichere 0 ab und dann kommt erst die Meldung " Kein Material im Sichtfeld des Sensors". Wie könnte ich dieses umgehen?

Ich hoffe ihr versteht mein kauderwelsch :ROFLMAO:
 
... wenn ich dich richtig verstanden habe, dann würde ich im OB35-Aufruf überprüfen, ob du in Folge mit dem gespeicherten Wert oder dem errechneten Wert weitermachen willst. Ergibt deine Überprüfung, dass du dich für den Aktuellen entscheidest dann legst du diesen als "neuen" gespeicherten Wert ab ...

Ich würde hier nicht zyklische und Interrupt-Bearbeitung unterscheiden ...

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
... wenn ich dich richtig verstanden habe, dann würde ich im OB35-Aufruf überprüfen, ob du in Folge mit dem gespeicherten Wert oder dem errechneten Wert weitermachen willst. Ergibt deine Überprüfung, dass du dich für den Aktuellen entscheidest dann legst du diesen als "neuen" gespeicherten Wert ab ...

Ich würde hier nicht zyklische und Interrupt-Bearbeitung unterscheiden ...

Gruß
Larry

Da liegt mein Problem, wie speichere ich mir den letzten GUTEN Wert.
Beispiel:
Ich speicher alle 100ms den akt. Wert ab. Material ist im Sichtfeld.
Jetzt kein Material mehr im Sichtfeld, SFB47 liefert mir 0, in dem Moment speichere ich gerade per 100ms takt den akt. Wert also 0, jetzt kommt erst die Meldung vom Sensor "kein Material ..."
Ich denke, das das Inkrementalesignal vom Sensor schneller auf 0 ist als das Digitalesignal am Eingang der CPU da ist.
 
... ich habe mich darauf bezogen :
Da es ein Inkrementalgeber ist und ich die Geschwindigkeit brauch mache ich folgende Rechnung im OB35 (10ms)
Das oben genannte Intervall (10 ms) wäre für mich der Trigger für den "letzten Wert". Und so wie ich dich verstanden habe machst du hier ja auch die SFB47-Auswertung. Also mußt da dann auch (wie schon von mir geschrieben) der Check vom Wert erfolgen ...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Eine Möglichkeit wäre, nur zu speichern wenn der Wert plausibel ist, sprich >0.
Eine zweite Möglichkeit:
Im OB35 das PEW abfragen, ob Matrial vorhanden.
Du meinst den EIngang, weil der Sensor leifert mir a) Inkremental b) Digital eine 1, wenn Inkremental unter einem bestimmten wert.
Deswegen dachte ich ja, das Inkremental schneller auf 0 ist bzw unter dem bestimmten Wert, als das Digitalsignal auf 1 ist. Und ich würde gerne den letzten funktionierenden Wert speichern und falls Inkremental unter bestimmten Wert, diesen gespeicherten Wert weiter benutzen bis Inkremental wieder über dem Wert ist
 
Deswegen dachte ich ja, das Inkremental schneller auf 0 ist bzw unter dem bestimmten Wert, als das Digitalsignal auf 1 ist. Und ich würde gerne den letzten funktionierenden Wert speichern und falls Inkremental unter bestimmten Wert, diesen gespeicherten Wert weiter benutzen bis Inkremental wieder über dem Wert ist
Das meinte ich mit Möglichkeit 1:
Code:
   L #neuenWert
   L #letztenWert
   <D 
   SPB xxx // nicht speichern
   ...    // Dein Programm
   L #neuenWert
   T #letztenWert
xxx:Nop 0
Du machst das ja schon mit dem neuen Wert auf den letzten speichern, jetzt muss nur noch ausgewertet werden ob sich der Wert bei der nächsten Abfrage in positiver Richtung geändert hat.
 
Erst einmal danke, irgendwie denke ich manchmal zu kompliziert, oder man sitzt schon zu lange davor :D

Zu meinem anderen Problem.

Ich gebe den Bändern eine Geschwindigkeit in m/min (errechnet nach der Zykluszeit der produzierenden Maschine) vor. Der Extruder legt nun das Produkt auf die Bänder ab. Der Sensor misst die Geschwindigkeit des Stranges aus dem Extruder, nun muss ich den Extruder so regeln, dass der Strang die gleiche Geschwindigkeit hat wie die Bänder.
Wie mache ich das? Mit dem FB41? Wenn ja, wie und wo rufe ich den auf? Ich benutzte den OB35 schon alle 10ms, das wäre für den Regler bestimmt zu schnell, oder gibt es dafür auch ne einfache Lösung? :rolleyes:
Nebenbei, hab mit dem FB41 noch nicht gearbeitet :D
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
ich hatte irgendwann einmal auch so ein Thema ...
Da kannte ich allerdings noicht die Geschwindigkeit des Extruders und hatte die nachfolgenden Förderbänder zu steuern.
"Damals" hatte ich mich da einer Durchhangsteuerung bedient - das heißt, dass mein Fördergut einen gewissen Durchhang zwischen Extruder und Förderband haben konnte. Wurde der Durchhang größer so mußte das Band schneller werden - entsprechend umgekehrt.
Ist das bei dir so ähnlich ?

Gruß
Larry
 
Nein.leider nicht, der Extruder legt den Strang genau auf das Band ab, und die Bandgeschwindigkeit ergibt sich halt aus dem Zyklus der Maschine am Ende.
Deswegen muss ich den Extruder steuern, damit der Strang nicht zu gross gestaucht oder gezogen wird
 
Naja ... so sehr weichst du dann aber doch nicht ab ...
Bei mir war der Extruder der Bestimmer - bei dir das Band. Ansonsten die gleiche Problematik.
Könntest du denn etwas wie einen Durchhang machen ?
Damit könntest du dann ja auch genauso den Extruder manipulieren ...

Gruß
Larry
 
Das was ich da damals hatte war etwas wie eine Lichtmengen-Messung - frag jetzt bitte nicht nach dem Hersteller - den weiß ich nicht mehr.
Jedenfalls auf der einen Seite eine Lichtquelle (wie bei einem Lichtvorhang) und auf der anderen Seite ein Sensor (etwa wie ein Lichttaster). Der Sensor hat die Beschattung ausgegeben (0 .. 100%) und damit hatte ich die Geschwindigkeit korrigiert.
 
Das bringt mir leider nichts, da ich schon den Sensor di-soric OBS120 habe und der Kunde bestimmt nicht noch ein Sensor bezahlt ;). Also muss ich das jetzt irgendwie mit der Geschwindigkeit des Stranges und meine Bandgeschwindigkeit bewerkstelligen. Da ist nur die Frage dann, wie? :ROFLMAO:
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Du kannst da natürlich einen Regler einsetzen, die Frage ist halt immer, wie gut er nachher arbeitet.
Wahrscheinlich steuerst Du die Drehzahl des Extruders an. Dabei gibt es, abhängig vom Material, oftmals deutliche Verzögerungen zwischen der Ansteuerung und der Geschwindigkeit des Stranges.In solchen Fällen hilft es, einen gesteuerten Anteil in den Stellwert einzukoppeln, also einfach Sollgeschwindigkeit*Faktor, und dann nur die verbleibende Abweichung über einen PID-Regler auszugleichen.
Das geht alles mit Bausteinen von Siemens, oder, wenn Du selbst am Regelalgorithmus spielen willst, mit Funktionen aus der OSCAT.Lib.
Wenn Dir das 10ms Intervall zu kurz zum Reglen ist, ruf den Regler halt nur in jedem 10ten Weckalarm auf, Du musst nur das korrekte Aufrufintervall am Regler übergeben.
Gruß
Erich
 
Zurück
Oben