Zeit-Funktion

JohnJRambo

Level-1
Beiträge
8
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn eine Lichtschranke genau auf der Höhe "Oberkante des zu schneidenden Blockes" positioniert ist, und somit der Lichtstrahl ständig zwischen unterbrochen und frei wechselt:

unterbrochen - frei - unterbrochen - frei - unterbrochen ......

entsteht ein flackerndes Eingangssignal in die SPS.

Wie kann ich ein solches Flackern des in die SPS eingehenden Signales durch die Programmierung rausfiltern, damit der Kasten sich nicht ständig zwischen zwei Höhen hin und her bewegt.
Ich Programmiere mit CoDeSys in der Sprache "strukturierter Text" und hoffe ihr könnt mir bei der Lösung des Problems in genau dieser Sprache behilflich sein.

Danke
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo!

Was willst du jetzt genau wissen?

Wie man das umsetzen soll?
Wie man eine Timer-Instanz (Ein-, Ausschalt-Verzögerung, Impuls) in Strukturiertem Text aufruft?
Oder ein Code Beispiel für die Ablaufsteuerung (Einlauf, Höhe ermitteln, Trichter positionieren, sägen, Trichter hochfahren...)

Gruß L.T.
 
Hallo,
kannst du das nicht so lösen wenn dein Laser ein mal unterbricht mit einer Negativen Flanke dort stehen bleibt?
Dann hast du die Höhe für den Block und kannst deine Absaugung positionieren. Nach dem der Block durchgefahren ist bekommst du deine Positive Flanke - damit wieder in die Grundstellung und die Ermittlung der höhe geht erneut los.

Bezw. wenn es so nicht lösbar ist da du nicht jedes mal von einer Grundstellung runterfährst und du nicht weißt ob der Block dann dort ist,
wäre es möglich das unterbrochen - frei - unterborchen mit einen CTU oder CTUD mitzuzählen. Wenn es z.B. 3 mal unterbrochen wurde das Ausgangsword somit 3 ist. Das du dann auf der Gepeicherten höhe deinen Sauger Positionierst. Sobald dein Laser dann wieder eine Positive Flanke bekommt Beispiel:"IF CTUD_Zähler1.WordVar (oder direkt zählerausgang) = 3 and NOT laser_var THEN ....."

Vielleicht hilft dir das als denkanreiz.
Mehr ist so früh morgens nicht drin - sorry.

LG
 
Wenn im Lichtgitter mehrere Lichtschranken sind, die einzeln in die SPS geführt sind, oder wenn die Anzahl der unterbrochenen Lichtschranken in die SPS eingelesen wird, kannst Du der Steuerung eine Hysterese verpassen.
Also:
Hochfahren wenn eine bestimmte Lichtschranke unterbrochen wird und runterfahren erst dann wenn eine bestimmte andere Lichtschranke darunter wieder frei wird.
Durch die Wahl des Abstandes der beiden Lichtschranken kannst Du Deine Dreipunktregelung (das ist es nämlich) mehr oder weniger beruhigen, ohne das Zeitverhalten der Regelung bei wirklich erforderlichen Bewegungen zu verlangsamen.

Mit Timern würde ich das nur dann lösen, wenn diese Möglichkein nicht besteht,denn dann wird die Regelung träger.

Gruß
Erich
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Beispiel in st

Ein Code Beispiel für die Ablaufsteuerung würde mir sehr helfen!
Auch weiß ich nicht wie man eine Zeitfunktion in st aufruft.

Das mit der Lichtschranke sieht so aus, das es ein analoges Ausgangssignal liefert. Je höher das Ausgangssignal um so mehr Lichtschranken sind unterbrochen und um so höher ist das Schnittgut.

Wenn jetzt allerdings die Oberkante des Schnittguts genau am Lichtstrahl liegt, entsteht das wie schon im vorherigen Beitrag erwähnte flackern. In diesem Fall sollte der Kasten in der Höheren der beiden Positionen stehen bleiben ohne sich ständig in der Höhe zu verstellen

Wie kann so ein Programm in st konkret aussehen?
 
Zuletzt bearbeitet:
Wenn ein Analogwert vom Lichtgitter kommt ist es auch leicht.
Nochmal: Nicht über Timer, sondern schalten mit Hysterese.
Also:
Wenn ein oberer Schaltpunkt überschritten wird hochfahren, wenn ein unterer Schaltpunkt unterschritten wird runterfahren, dazwischen stehen bleiben.
Das sind zwei Vergleiche und das wars. Wo ist das Problem?
Fang mal an und zeig den Kode, wenn es dann an einer bestimmten Stelle klemmt wird Dir hier sicher weiter geholfen.
Gruß
Erich
 
Zuletzt bearbeitet:
hallo,

ich gehe davon aus das es ungefähr so aussieht:
LS1=10cm
LS2=20cm
LS3=30cm
LS4=40cm
LS5=50cm
usw..

Wenn die LS3 aus ist und dann die LS4 kommt dann lässt du einfach einen counter auf die Position 40cm fahren. Alle 200ms 1 cm oder so. Dann kann es zwar sein, das deine Absaugung ständig hoch und runter schwenkt, aber so ist das halt.

Eventuell muß die Absaugung nach oben schneller fahren als runter, damit es keine Kollision gibt.
Zu berücksichtigen ist natürlich auch, wie schnell sich deine Absaugung bewegen lässt. Ausprobieren hoch und runter und dann umrechnen...

Bis dann...

MfG CAS
 
Zuviel Werbung?
-> Hier kostenlos registrieren
saege:=input_1

FOR ABS differenz > 5 DO
hoehe_wabenscheibe:=input_2*a (*input_2 = analoges Ausgangssignal des messenden Lichtvorhangs; a = konstanter Faktor bzw. durch Formel zu ersetzen*)
hoehe_ist:=input_3*b (*input_3 = Poti Motor; b = konstanter Faktor bzw. durch Formel zu ersetzen*)
differenz:= hoehe_Wabenscheibe - hoehe_ist
stellsignal:=differenz*c (*c = konstanter Faktor bzw. durch Formel zu ersetzen*)
END_FOR

END_IF
 
Zuletzt bearbeitet:
Ich habe Deinen Aufbau noch nicht verstanden.
Was ist input_3 = Poti Motor?
Ist das ein Motorpoti?
Oder ein Sollwertpoti für einen Motor, das vom Bediener verstellt wird?
Oder, oder oder.
Gruß
Erich
 
Die Höhe wird über einen Elektromotor verstellt. Die Höhe wird durch die Höhe des Schnittguts bestimmt und durch den Sensor ermittelt.

Ein Potentiometer misst den tatsächlichen Drehwinkel des Motors. Der Soll-Wert und der Ist-Wert können somit in der SPS verglichen werden, und wenn nötig muss die Position eingeregelt werden.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich verstehe das jetzt so, dass der Istwert das Motorpoti ist und der Sollwert vom Lichtgitter kommt.
Das Lichtgitter bringt diskrete häufig um kleine Werte springende Angaben.
Da ist schlecht mit Zeiten zu arbeiten, da Du dann auf echte Sollwertänderungen zu langsam reagierst.
Ich würde da in den Sollwert eine Funktion einbauen, die kleine Werteänderungen durch eine Totzone unterdrückt.
Etwa so:
Code:
If hoehe_wabenscheibe>Sollwert+HalbeTotzone then
  Sollwert := Sollwert+Sollwertschritt
else if hoehe_wabenscheibe<Sollwert-HalbeTotzone then
   Sollwert := Sollwert-Sollwertschritt
end_if
Den Wert HalbeTotzone musst Du so wählen, dass tolerierbare Schwankungen im Lichtgitterwert unterdrückt werden.
Sollwertschritt solltest Du so wählen, dass Dein Motor immer nachregeln kann.
Den Sollwert kannst Du dann zum Vergleich mit dem Istwert aus dem Poti nehmen und darauf regeln.
Gruß
Erich
ps: Was ich fabriziert habe, ist sicher kein syntaktisch korrekter Kode, mir geht es nur um das Verfahren.
 
Zuletzt bearbeitet:
Zurück
Oben