Wie kann ich beim KUKA Roboter ohne externe SPS also nur mit externen Ein/Ausgängen eine zeitabhängige Meldung konstruieren? Meldungen auszugeben usw. sind kein Problem. Aber wie schreibe ich eine Anweisung die mir z.B. nach Ansteuerung eines Ausganges nach z.B. 1 Sekunde eine Meldung bringt, wenn bis dahin nicht ein bestimmter Eingang gekommen ist ohne dass das Programm im Ablauf durch die Zeit angehalten wird. Beispiel Zylinder ausfahren, nach 1 Sekunde kommt der Eingang des INI Ausgefahren nicht, Meldung Endlage nicht erreicht.
zeitabhängige Meldung programmieren
- Servernexus
- Erledigt
-
-
Möglichkeit 1:
Zylinder ausfahren
Warte auf Eingang oder Timer
Wenn Timer, dann MeldungMöglichkeit 2:
Interrupt einschalten
Zylinder ausfahren
Im Interrupt eine Wartezeit und EIngang auswerten,dann Meldung ausgeben -
Wenn im Submit, dann Timer!
Ungefähr so:
Code
Alles anzeigen;Zylinder eingefahren und Ausgang fuer ausfahren gesetzt: IF e_zylinder_eingefahren AND a_zylinder_ausfahren then $TIMER[1]=-1500 ;1,5sec Timeout $TIMER_STOP[1]=FALSE ENDIF ;Alles schoen, Zylinder ist ausgefahren bzw. a_zylinder_ausfahren wieder abgeschaltet : IF (e_zylinder_ausgefahren) OR (not a_zylinder_ausfahren) THEN $TIMER_STOP[1]=TRUE $TIMER[1]=0 ENDIF ; Ausgang fuer ausfahren gesetzt und Timeout abgelaufen IF a_zylinder_ausfahren AND $TIMER_FLAG[1] THEN ;Meldung ausloesen $TIMER_STOP[1]=TRUE $TIMER[1]=0 ENDIF
Bitte dementsprechend anpassen, ausschmücken usw.
Und nicht vergessen: KEIN WAITFOR / KEIN WAIT SEC im Submit.
-
ok, erstmal danke. Muss ich nun die Timer oder den Timer Flag irgendwo declarieren oder unterscheidet das Orogramm durch die Nummer (1)
Passt jetzt nicht ganz aber wenn ich schon einen Spezialisten am Rohr habe wie programmiere ich am besten eine positive Flanke, oder soll ich neues Thema starten
Danke -
wie programmiere ich am besten eine positive Flanke,
x : signal von dem die flanke detektiert werden soll
a : hilfsvariableif (x and not a) then
; hier kommt man nur bei positiver flanke rein
a=true
endifif (not x) then
a=false
endifa könnte man auch "flanke_steht_an_wurde_aber_bereits_verabreitet" nennen...
-
Muss ich nun die Timer oder den Timer Flag irgendwo declarierenEs handelt sich um Systemvariablen. Sind also vom System deklariert. Angesprochen über den Index in den eckigen Klammern. 10 Timer.
$TIMER[n] - aktueller Wert (ms) INT
$TIMER_FLAG[n] - wird ausgelöst wenn der Wert in $TIMER[n] in den positiven Bereich wechselt. BOOL
$TIMER_STOP[n] - TRUE stoppt den Timer, FALSE lässt den Timer weiterlaufen BOOLZum Flankenthema:
Interessante Diskussion, auch wenn's einige Meinungsverschiedenheiten gab.
http://www.roboterforum.de/rob….0.html;msg41921#msg41921
Erstelle ein Benutzerkonto oder melde dich an um zu kommentieren
Du musst ein Benutzerkonto haben um einen Kommentar hinterlassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Geht einfach!
Neues Benutzerkonto erstellen