# Maschine muss abschalten, wenn Getriebe klemmt.



## Tigerkroete (4 Juli 2006)

Hallo Leute.
Ein Motor, der auf ein Getriebe geht, soll abschalten, wenn Material im Getriebe (Schrauben) dazu führt, dass es zu einer Klemmung kommt und nichts mehr weiter oder viel zu langsam weiter geht. Leider kann ich in die derzeitige Steuerung nicht reingucken und weiß nicht, wie das realisiert wurde. Also muss ich mir selbst etwas überlegen, bzw. habe mir etwas überlegt und würde gerne von Euch wissen, ob das halbwegs gescheit ist:

Am Motorende befindet sich ein Geber, der pro Umdrehung 10 Impulse ausgibt (1360rpm). Sobald der Motorausgang auf "1" ist, wird Schritt-0 einer Schrittkette gesetzt und der Zählwert des Encoderzählers wird geladen und in ein Datenwort geschrieben. Dann wird Schritt-1 gesetzt und ein Timer startet einschaltverzögert. Sobald der Timer kommt (eine Sekunde), wird Schritt-2 gesetzt und wieder der Zählwert geladen und mit dem alten verglichen. Falls die Differenz kleiner 10 Impulsen ist, schaltet die Maschine ab und es kommt eine Meldung. Falls die Differenz größer ist, wird wieder in Schritt 0 gesprungen.

Was meint Ihr?

Gruß,
Tigerkroete


----------



## volker (4 Juli 2006)

machs doch einfach im ob35

1360 u/min = 22,66 u/sek
10 imp pro umdrehung, ob35-aufruf 10 mal pro sek => 0

also 22,66
was liefert der encoder denn?
evtl musst du einen überlauf abfangen.


----------



## Werner54 (4 Juli 2006)

*alternativ*

Hallo, 
als mögliche Lösung käme auch ein cosφ-Relais in Frage (Pilz o.ä.).
Vorteil: Einbau staubgeschützt im Steuerschrank.
Nachteil: Strom- und Spannungsmessung nötig und muß genau eingestellt werden.


----------



## Tigerkroete (4 Juli 2006)

@Volker
Hatte bisher nur mit dem OB1 zu tun und von anderen OBs oder SFCs etc. keine Ahnung. Habe gerade mal nachgelesen: Der OB35 wird also als Interrupt alle 100ms aufgerufen?! Muss er dazu einfach nur in die CPU downgeloaded werden? 
QUOTE]Was liefert der Encoder denn?[[/quote]
Er hat einen Push-Pull-Ausgang (24V)

Wenn ich Dich richtig verstehe, ist der OB35 mein Timerersatz und auch besser geeignet, da die Abfrage der Zählstände immer den gleichen Zyklus hat?!

@Werner54
Das mit dem Relais klingt auch gut, aber ich würde das Problem am liebsten programmtechnisch lösen.

Gruß Tigerkroete


----------



## volker (4 Juli 2006)

ahh
ich erinner mich. das war die sache mit der fm350.
parametrier diese auf frequenzmessen. und z.b. 1000ms

der zur fm zugehörige fb liefert dir nun permanent die frequenz über 1sek.

die kannst du nun ohne probs in drehzahl umrechnen und im zyklischen programm überwachen.
den ob35 oder sonstwas brauchst du nicht

zum ob35.
ja der wird alle 100ms aufgerufen (standart) kannst du in der hw-config ändern.
den ob einfach im programm anlegen und das dort reinschreiben was du zeitabhängig machen willst.


----------



## Tigerkroete (4 Juli 2006)

Würde die FM ja gerne auf Frequenzmessung parametrieren, aber sie muss ja schon periodisch zählen, um meinen Weg zu erfassen. Deswegen geht das leider nicht.
Ansonsten finde ich die Idee mit dem OB35 toll und werde es wohl so machen.
Du hattest noch geschrieben, dass ich eventuell einen Überlauf abfangen muss. Ich nehme an ein Überlauf bedeutet, dass der OB35 aufgerufen wird, obwohl in ihm gerade noch gerechnet wird!?
Was muss ich denn machen um so etwas abzufangen? Habe bisher nur herausgefunden, dass im Falle eines Überlaufs der OB80 aufgerufen wird.

Gruß,
Tigerkroete


----------



## volker (4 Juli 2006)

ok.
also kann ich davon ausgehen, das du wenn der motor läuft eine wegänderung hast?
also überwache nicht die impulse selbst sondern direkt den weg. den musstest du dir ja sowieso berechnen.
immer gleiche drehzzahl? oder fu
welche auflösung? 1/10mm ?

ungefähr so im ob35

```
UN    A      0.0                  //motor ein
      SPB   ende
      L     DBD    2                    //istweg in real
      L     DBD    6                    //istweg voriger aufruf
      -R    
      ABS   
      T     DBD   10                    //differenz (zeile kann man sich schenken. nur zur übersicht)
      L     2.000000e+001               //min wegänderung
      <R    
      =     M      1.0                  //fehler
ende: NOP   0
      L     DBD    2
      T     DBD    6
```


----------



## Tigerkroete (4 Juli 2006)

> also kann ich davon ausgehen, das du wenn der motor läuft eine wegänderung hast?


Ja, so ist es. Auch immer mit der gleichen Drehzahl.

Die Auflösung kenne ich noch nicht. Das werde ich in den nächsten Tagen durch ausprobieren herausfinden müsse. Dazu werde ich einmal die maximale Strecke durchfahren, dann den Weg nachmessen und das dann mit meinen gezählten Impulsen verrechnen.

Vielen Dank für das Beispiel.
Wäre toll, wenn Du noch schreiben könntest, was ich machen muss um einen Überlauf abzufangen.

Muchas gracias,
El Tigerkroete


----------



## volker (4 Juli 2006)

sollte eigentlich nicht passieren. oder etwa doch? bin nicht sicher.

ich denke aber doch, dass der motor in 2 richtungen fährt.
also zählt der geber einmal rauf und dann wieder runter. oder macht dein geber das nicht? 
fm sollte das imho bei endlos zählen so machen.

inkrementalgeber setzte ich nicht ein. ich nehme immer absolutwertgeber.

aber grundsätzlich.
du fährst einen referenzpunkt an.
dort setzt du den zähler auf zb 1000 
(nicht 0 weil: wenn dein motor nur ein bit kleiner wird als der referenzpunkt, kommst du direkt in den überschlag. das kann fatal sein.
ziehe dann lieber im programm die 1000 ab)
jedenfalls ist das bei den absolutwertgebern so.

etwa so
L dbd100 //wahrer istwert
L 1000.0
-R
T dbd104 //korrekter istwert. hiermit arbeitest du im programm


----------



## Tigerkroete (4 Juli 2006)

Ja ich muss manchmal rauf und manchmal runterfahren.
Ich wollte das bzw. habe das im Programm so realisiert. Bediener gibt gewünschten Abstand im TP ein und startet das Programm. Der Motor fährt den Initiator an und die FM bekommt nun den Zählwert entsprechend der Bedienereingabe geladen. Nun fährt der Motor in die andere Richtung und pro Impuls zählt die FM runter. Bei null schaltet der Motor ab.

Während der Produktion muss der Motor normalerweise nicht mehr verstellt werden. Falls doch, so gehen nur feste Werte, also in 1mm- oder 5mm-Schritten. Drückt nun der Bediener z.B. den 5mm Button so wird der Impulswert entsprechend der 5mm in die FM geladen, welche wieder auf null runterzählt.
Den Abstand gebe ich am TP gepfuscht raus. Das heißt ich Lade den anfangs eingegebenen Abstand des Bedieners in ein Datenwort, welches ich am TP ausgebe. Immer wenn nun der Bediener den Motor in 1 oder 5mm-Schritten vor oder zurück fährt, addiere bzw. subtrahiere ich die 1 oder 5mm vom zu Anfang geladenen Wert.

Gruß und vielen Dank,
Tigerkroete


----------



## Werner54 (4 Juli 2006)

*Ich auch*



			
				Tigerkroete schrieb:
			
		

> ich würde das Problem am liebsten programmtechnisch lösen.


Hallo, 
also, wenn gerade kein Verdrahter zur Hand ist, und der Weggeber sowieso angebaut.. ich auch.


----------



## volker (4 Juli 2006)

wie hast du die fm parametriert? endlos oder einmalig zählen.

so wie du das machst, manipulierst du die wahre istposition bzw du kennst die wahre position nur durch rechnen.
imho keine gute lösung

ich würde das so machen.
bei bedarf würde ich den referenzpunkt anfahren.
im prog würde ich mit der istposition und einem vergleicher auf die sollposition (einstellbar) arbeiten um festzustellen ob die gewünschte pos erreicht ist.


----------



## Tigerkroete (4 Juli 2006)

Hmmm, ich hatte mir die Entscheidung nicht leicht gemacht, nun machst Du mir wieder ein schlechtes Gewissen ;-). Ich weiß, dass meine Lösung Pfusch ist, aber....O.K. Du hast recht. Das muss ich ändern.

Soll ich das so machen?:
Beim erreichen des Initiators fährt der Motor den vom Bediener eingegebenen Wert an. Der Zählwert wird normiert als Abstand in mm am TP ausgegeben. Wenn ich nun z.B. den 5mm-Button-aufwärts drücke (heißt wieder in Richtung des Initiators), dann Lade ich mir den Istwert in ein Datenwort, ziehe 5mm ab und lade diesen Wert als Sollwert in ein anderes Datenwort.
Nun habe ich folgendes Problem, was aber denke ich kaum schlimm ist, da es ja nicht superpräzise sein muss:
Ich kann ja nicht ==I abfragen, da ich diese Abfrage ja im Programm mache und es gut möglich ist, dass meine FM schon ein, zwei Schritte weiter ist, wenn mein Zyklus wieder an der passenden Stelle ist. 
Also sehe ich das doch richtig, dass ich jeweils nach Fahrtrichtung >=I bzw.<=I abfragen muss?.


MfG,
Tigerkroete


----------



## volker (4 Juli 2006)

Tigerkroete schrieb:
			
		

> dass meine Lösung Pfusch ist, aber....O.K. Du hast recht. Das muss ich ändern.


 nicht unbedingt pfusch. aber eben auch nicht gut.
das sind alles so sachen, die kommen mit der zeit.
aber du gibst dir , so wie ich das beurteilen kann, viel mühe.
und sowas soll ja auch belohnt werden.  

Soll ich das so machen?:
>>Beim erreichen des Initiators fährt der Motor den vom Bediener eingegebenen Wert an.

das muss nicht jedesmal passieren. mach dafür eine taste am tp 'antrieb referenzieren'. damit fährst du den ini an und setzt den zählwert auf 1000 (siehe weiter oben warum)

nun hast du deine absolute pos in z.b. dbd 100

>>Der Zählwert wird normiert als Abstand in mm am TP ausgegeben. Wenn ich nun z.B. den 5mm-Button-aufwärts drücke (heißt wieder in Richtung des Initiators), dann Lade ich mir den Istwert in ein Datenwort, ziehe 5mm ab und lade diesen Wert als Sollwert in ein anderes Datenwort.

nicht ganz. drückt der bediener + oder - änderst du direkt den sollwert (nicht vom istwert abhängig machen. mit der zeit verschleifst du den sollwert immer mehr). z.b. dbd 104
ich weiss ja nicht wie du das im tp gemacht hast (funktion: wert+; wert- ?) eine direkte pos-angabe wäre jetzt aber auch möglich. evtl sogar besser. das kann der mann an der maschine viel leichter nachvollziehen.

>>Ich kann ja nicht ==I abfragen, da ich diese Abfrage ja im Programm mache und es gut möglich ist, dass meine FM schon ein, zwei Schritte weiter ist, wenn mein Zyklus wieder an der passenden Stelle ist. 
Also sehe ich das doch richtig, dass ich jeweils nach Fahrtrichtung >=I bzw.<=I abfragen muss?.

das ist korrekt. abhängig davon in welche richtung du fahren musst, weisst du ja ob du auf >= oder <= abfragen musst. evtl musst du sowieso vorher abschalten, da der antrieb nachlaufen könnte. (dann eine konstante addieren bzw subtrahieren (am besten in einem dbd festlegen so kannst du das schnell immer wieder anpassen))
eine alternative wäre ein fenster zu programmieren. also: soll= 100 pos_ok = wenn ist zwischen 101 und 99 liegt.


----------



## Tigerkroete (4 Juli 2006)

Eine direkte Positionsangabe ist in meinem Fall nicht gut, da bei einer Fehlangabe, im Betrieb viel Material aus der Maschine fällt, deswegen sollen nur kleine Schritte betätigt werden können.

Hab vielen Dank Volker für Deine Hilfe!
Wünsche Dir und allen anderen einen schönen Fußballabend!!!


----------



## volker (5 Juli 2006)

>>Eine direkte Positionsangabe ist in meinem Fall nicht gut, da bei einer Fehlangabe, im Betrieb viel Material aus der Maschine fällt, deswegen sollen nur kleine Schritte betätigt werden können.

aber der bediener kann doch mehrfach die + - taste drücken. das hätte das selbe ergebnis.
ist aber nicht wirklich relevant wie man das realisiert.

>>Wünsche Dir und allen anderen einen schönen Fußballabend!!!
Tja. schönen abend hatten wir. leider nicht so erfolgreich wie gehofft.


----------



## Tigerkroete (5 Juli 2006)

<<aber der bediener kann doch mehrfach die + - taste drücken. das hätte das selbe ergebnis.>>
Das stimmt natürlich, aber wenn man versehentlich einmal +5mm zuviel drückt, wäre das nicht so fatal, wie eine Falscheingabe von z.B. 110mm Abstand auf 190mm. Natürlich ist Deine Variante einfach eleganter, bei richtiger Bedienung auch viel praktischer. Vielleicht mache ich es doch so. Bei einer Falschbedienung wäre es ja nicht meine Schuld ;-).

Tja das Fußballspiel war enttäuschend, aber trotzdem freue ich mich, dass wir so viele spannende Spiele erleben durften.

Gruß,
Tigerkroete


----------



## maxi (10 Juli 2006)

Hallo, villleicht ist es hilfreich.
Ich habe vor kurzen eine Inkrementalgeber auswertung programmiert.
Die Inkremnte in einen DB absgespiechert und alle 0,2 Sekunden den aktuellen Wert mit den alten verglichen. War da eien Differenz von 5 Inkrementen gab es eine Fehlermeldung (Klemmen)

Grüsse


----------



## Tigerkroete (11 Juli 2006)

Hallo Maxi. Vielen Dank für Deine Antwort.


----------

