Einen Timer zu setzen ist sehr einfach .Das System bietet 10 interne Timer die ich nur setzen oder auslesen muss.Die Position innerhalb der Programme ist abhängig der aufgebauten Struktur. Ich kann die Timerfunktion in einem Task(PC Programm) verwenden oder auch in einem direkten Ablaufprogramm. Um den Timer zu starten setze ich den Befehl:
timer(1) = 0
ab diesem Befehl zählt der Timer in Sekunden.ich kann an jeder beliebigen Stelle an dem ich die aktuelle Zeit wissen möchte über den Befehl:
type timer(1)
im Keyboard erkennen wie die zeit im Moment steht.Wenn ich eine Zyklusbestimmung für Boden Boden Zeiten ausgeben möchte kann ich auch im IFP (frei zu bestimmende Seite eineTextausgabe anlegen in der mehrere Timer ausgewertet und dementsprechend verschiedene Abläufe der Zyklen darstellen.Wenn du mehr Infos brauchst könnte ich dir auch einen solchen Zähler als Beispiel senden.
Hab eben deinen Beitrag zum Thema "Timer erstellen" gelesen. Nun zu meiner Frage:
ist es möglich einen Timer in Echtzeit anzeigen zu lassen (laufende Sekunden)?
dieser timer ist immer Echtzeit. Die Frage stellt sich was du gerne anzeigen möchtest. Wenn du einen laufenden timer sehen möchtest kannst du in einem PC Programm den Befehl
type timer(1) setzen und in der zweiten Zeile eine kleine Verzögerung damit die Anzeige im Keybord auch lesbar bleibt.
Der Befehl
twait 1 steht für 1 Sekunde, falls du eine höhere Auflösung brauchst schreibe twait 0.1 für eine 10/ Sekunde
Die Anzeige ist auch abhängig der Taskzykluszeit, das heißt wenn du ein großes PC Programm verwendest ist die Ausgabe sowiso langsamer. Ich möchte dich aber damit nicht verwirren. Wenn du ev. über das was du genau machen möchtest mehr Infos hast kann ich dir auch ein Beispiel senden. Oder ein Backup dann kann ich die Befehle direkt einfügen.
PS. PC Programme funktionieren wie SPS Programme die im Speicher unabhängig von den Ausführprogrammen laufen.
Ist übrigens der einzige Roboter auf dem Markt der diese Funktion integriert hat. Ist eine tolle Sache.
Ti10 = 0;stellt die Variable ti10 bereit, wird nur 1 mal bei Programmstart ausgefuehrt
$Ti10 = 0;stellt den String $ti10 bereit, wird nur 1 mal bei Programmstart ausgefuehrt
lo1:
IF SIG 2010 THEN
TIMER (10) = 0;Zeit in Timer 10 auf Null setzten
END
TWAIT 1;Wartezeit zur Auswertung
IF SIG -2010 THEN
ti10 = timer(10);schreibe die Zeit in Timer 10 in die Variable ti10
END
TWAIT 0.1
$ti10 = $ENCODE(/L,ti10);schreibt den Wert aus ti10 in einen String
TPLIGHT; Beleuchtung einschalten
IFPWPRINT 1,1,2,4=”Zeitmessung”,$ti10,, ;Zeile zeigt den Wert in $ti10 im IFP an
GOTO lo1;Programm wiederholen ab Schritt lo1
END
Das ist ein Beispiel für eine Anzeige im IFP. Das Programm funktioniert im Beispiel nur als alleine laufendes PC Programm. Zudem muss im IFP ein Textfeld angelegt werden in dem die Variable ausgegeben werden kann. Mit dem Merker 2010 kann ich die Ausgabe steuern, indem ich den Merker einschalte beginne ich mit der Zeitmessung. Ich gebe den Wert der Messung im IFP aus in dem ich den Merker mit dem Befehl SIG -2010 wieder ausschalte. Ich kann diese Ausgabe im IFP mit dem Befehl IFPWPRINT in verschiedenen Farben und Werten ausgeben. Das ergibt sich aus den Zahlen hinter dem Befehl.Ein Beispiel zu liefern ist natürlich nicht einfach wenn ich deinen Programmaufbau nicht kenne.+
Wenn du aber nur die Zeit für deine Info ausgeben möchtest kannst du das wie in meiner ersten Antwort genau so einfach machen.Das schöne an der Programmierung Kawasaki ist dass ich in AS alles programmieren kann was ich möchte, die Programmierung ist offen gehalten. Es ist aber nicht unbedingt erforderlich so viel in ein Programm zu packen.
Es reicht auch einfach am Anfang deines Arbeitsprogramms mit dem Befehl
Timer(10) = 0 die Zeitmessung zu starten und am Ende deines Programms mit
TYPE timer(10) den Zyklus im Keyboard anzuzeigen.
Mehr Info auf einmal sprengt wahrscheinlich den Rahmen. Aber wenn du mehr Hilfe brauchst kannst du auch unter meiner Page sehen wie du mich erreichen kannst.
erstmal vielen Dank für die gute Antwort.
Zur Erklärung meines Timers:
- er soll nur die Laufzeit eines Programms messen
- er soll mit laufenden Sekunden und 10/ Sekunden angezeigt werden
Ist ein solcher Timer im IFP als "Variable Data Display" anzeigbar.
Ja das ist anzeigbar. Der interne bzw. die 10 internen timer zählen effektiv 100/ Sekunden. Die Ausgabe kannst du dir zurechtschneidern wie du möchtest in dem du das Ergebnis einfach * 60 rechnest und anschließend erst anzeigst. Wenn du nur die Zeit des Programms möchtest kannst du das auf die gleiche Weise einbauen, die Frage ist wann startest du den timer und wann lässt du das anzeigen.
Eigentlich ist der Zähler sehr einfach einzubauen. Ich kann dir vorschlagen dass du mir ein Backup zusendest, ich setze den timer und schreibe eine Erklärung getrennt zu der Änderung. Dann kannst du den timer an der Stelle einsetzten die du sehen willst. Ich kann dir im Backup auch die Daten die das Textfeld im IFP anzeigen einfügen.
Noch ein Tipp: Kawasaki bietet kostenfreie TOOLS an die das Programm in Echtzeit zeigen. Eine hilfreiche Sache ist ebenfalls Exam Diff ein Freeware Tool das dir Änderungen im Backup zeigt.
POINT pal = palette
OPENI 1
FOR ebene = 1 TO ebene.max
JAPPRO #pos_fliessband,fliessbandvorpo
SPEED 30
ACCURACY 1
LMOVE #pos_fliessband
CLOSEI 1
LDEPART fliessbandvorpo
JAPPRO pal,palettenvorpos
SPEED 30
ACCURACY 1
LMOVE pal
OPENI 1
LDEPART palettenvorpos
POINT pal = SHIFT(pal BY 0,0,z)
END
.END
Bitte setz doch den TIMER und auch die Daten die das Textfeld im IFP anzeigen mit rein. Vielen Dank
Wie ich sehe holst du in deinem Programm ein >300 mm Bauteil mit einem Sauggreifer ab und setzt es dann auf eine Palette. Ich vermute ein Subrutine übernimmt die Überwachung Palette ist voll. OK damit nichts schief gehen kann bitte an die Anweisung halten.
Mache zuerst sicherheitshalber eine Datensicherung als "alle daten" !!!!!!!!!!!!!!!!!!!!!!!!WICHTIG"
WICHTIG ist auch dass du prüfst ob die erste Seite in deinem IFP die ersten vier Felder frei hat. Ich habe den Aufbau für einen D Controllertyp gemacht, geht aber auch mit C, A oder AD.
Wenn du unsicher bist sende aus der Sicherung noch den Abschnitt INTER_PANEL_D dann kann ich sehen ob die Felder frei sind. Oder sende ein komplettes Backup an meine Privatmail. Ich kann die Änderung an einem meiner Roboter testen.
Du brauchst nur die Zeile in das Programm schreiben. Speichere die Datei TIME1 und die Datei INTER_PANEL_D mit REALS und STRINGS als AS Datenerweiterung und lade die Datei als Sicherung in den Controller. So kannst du den timer auch aus anderen Programmen verwenden. Der CALL Befehl führt die Subrutine aus und kehrt zum laufenden Programm zurück.
Ich habe dir die Änderung im Programm blau markiert.
POINT pal = palette
OPENI 1
FOR ebene = 1 TO ebene.max
JAPPRO #pos_fliessband,fliessbandvorpo
SPEED 30
ACCURACY 1
LMOVE #pos_fliessband
CLOSEI 1
LDEPART fliessbandvorpo
JAPPRO pal,palettenvorpos
SPEED 30
ACCURACY 1
LMOVE pal
OPENI 1
LDEPART palettenvorpos
POINT pal = SHIFT(pal BY 0,0,z) CALL time1
END
.PROGRAM TIME1()
ti10 = timer(10);schreibe die Zeit in Timer 10 in die Variable ti10
TWAIT 0.1
$ti10 = $ENCODE(/L,ti10);schreibt den Wert aus ti10 in einen String
TPLIGHT; Beleuchtung einschalten IFPWPRINT 1,1,2,4=”Zeitmessung”,$ti10,, ;Zeile zeigt den Wert in $ti10 im IFP an
END
.INTER_PANEL_D
0,9,1,4,4
.END
.STRINGS
$ti10 = 0
.END
.REALS
ti10 = 0
.END
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »JOSCH« (29. Mai 2009, 06:53)