WAIT FOR $IN[]==TRUE

  • Hallo Zusammen,


    ich würde gerne mit WAIT FOR $IN[10]==TRUE etwa 5 Sekunden auf TRUE warten, sollte dieser Zustand nicht eintreffen möchte ich, dass der Roboter dies mit einer Hupe bekannt gibt und weiter auf TRUE wartet.


    Bei ABB geht das ja wie hier im Beispiel zu sehen ist für mich ganz einfach.



    WaitDI Di10,1\MaxTime:=5\TimeFlag:=flag1;
    IF Di10=0 THEN
    TPWrite "Das Kontrollfach fährt nicht ein.";
    Hupe_3x_an;
    WaitDI Di10,1;
    ENDIF


    Bei KUKA habe ich nur diese Möglichkeit wo der Roboter auf TRUE wartet bis dieser Zustand Eintritt.


    WAIR FOR $IN[10]==TRUE bei ABB sieht es so aus WaitDI Di10,1;


    Gibt es bei KUKA die Möglichkeit die Syntax ähnlich zu schreiben oder muss ich die Sache ganz anders angehen?


    Vorab schon mal vielen Dank für eventuelle Antworten. :)


    Gruß
    Bruce

  • Schritt für Schritt zum Roboterprofi!
  • Hallo Bruce,


    Anbei eine fertige externe Funktion die macht was du willst, so bleibt dein Programm "schlank". Ist zwar noch von der KRC2, sollte aber auf der KRC4 genauso laufen.


    Implementierungsbeispiel:
    IF WAIT_INPUT(128,2000,10,TRUE) THEN
    MsgQuit("Eingang 128 nicht innerhalb 2s TRUE","AppErr",)
    ENDIF

    ...oder das gleiche halt in einer WHILE-Schlaufe


    Grüsse, Peter

  • Erstmal Dankeschön für die Antworten,


    @ Peter:


    Leider Funktioniert dein Vorschlag nicht, es kommt zu Fehlermeldungen! :-|
    Vielleicht habe ich es auch falsch angewendet :denk:


    Da ich selber auch ein bisschen mit unnötigen Pfunden zu kämpfen habe und nicht gerade "Schlank" bin, braucht mein Programm dies auch nicht unbedingt zu sein ;)



    @ Herrmann:


    Deine Version Funktioniert einwandfrei und ich habe Sie mit Erfolg umgesetzt, Danke nochmal :liebe024:



    @ Roland56:


    Bei deinem Beitrag habe ich das Gefühl, dass es sich um Sarkasmus handelt… oder liege ich da komplett Falsch?


    Beste Grüße und schönes Wochenende


    Gruß
    Bruce

  • @Bruce
    Komplett daneben.
    Die Lösung von APT ist TOPs.
    Im normalen Program mit einem Einzeiler zu integrieren.
    Wenn Sarkasmus dann hätte ich mich wohl ganz anders ausgedrückt.


    Schönes Wochenende und Servus Roland

    Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt.<br />Albert Einstein

  • Hallo Bruce Banner,


    und wenn du keinen zusätzlichen Timer verwenden willst (Beispiel Hermann),
    dann kannst du wie folgt vorgehen.


    PULSE($OUT[700],TRUE,5.0) ;Ausgang 700 für 5 Sek auf TRUE setzen
    WAIT FOR $IN[10] OR NOT $OUT[700]
    IF NOT $IN[10] THEN
    Hupe_an()
    WAIT FOR $IN[10]
    ENDIF


    Ich habe dies nicht getestet, sollte aber funktionieren.


    Gruß
    Twister

    Kleinere Wunder werden sofort erledigt... größere nach der Mittagspause...

    Einmal editiert, zuletzt von Twister ()

  • Hallo Bruce Banner,


    es gibt noch eine kleine Feinheit zu beachten.


    Wenn ich nicht falsch liege wird im Beispiel Hermann und APT der Timer im Vorlauf auf -5000 gesetzt.
    Sprich es kann sein dass die 5sek schon um sind bis die IF-Abfrage kommt.
    Kann jedoch auch sein dass dies gewünscht wird. Je nach Aufgabe.
    In meinem Beispiel wird mit PULSE ein Vorlaufstop erzeugt welcher die 5sek ab dieser Stelle im Hauptlauf garantiert.
    Jedoch ist bei meinem Beispiel so kein Überschleifen möglich.


    Gruß
    Twister

    Kleinere Wunder werden sofort erledigt... größere nach der Mittagspause...

  • Guten Morgen,


    da gibts aber bei beiden Methoden die Möglichkeit, den Puls bzw. das Timer setzen in einen Trigger zu verlagern, falls die 5s ab einem bestimmten Punkt abgewartet werden sollen. Das grenzt die Unschärfe wieder ein ;)


    Gruß,
    Robotermann

  • @Bruce
    Was ist daran so schwierig.
    Man kopiert die Funktion von APT in ein Unterverzeichnis.
    Und im Program erfolgt dann der Aufruf zur Funktion mit den Parametern.
    Einfacher und besser gehts nicht.

    Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt.<br />Albert Einstein

  • Hallo Roland,


    ich habe mir deine Zeilen nochmal durch den Kopf gehen lassen und erkannt, dass ich einen Denkfehler in Bezug auf Peters Vorschlag gehabt habe :zwink:
    danke für diese Gehirnwäsche ;)


    Ich wünsche allen ein schönes Weihnachten und einen guten Rutsch ins neue Jahr :)


    Bruce

  • Hi Forum
    Ich habe mal wieder eine frage bezüglich Krc1 Steuerung bei WAIT FOR $IN []==TRUE
    und zwar Programmiere ich ein Roboter Programm mit zwei Robotern. Roboter 1. hält das Werkstück und soll die bahnen abfahren die ich Programmiert habe, Roboter 2. hält den Schweißbrenner und gibt denn Befehl an die Schweißquelle wann sie angehen soll und wann aus.
    Roboter 1. erkennt alle WAIT FOR $IN []==TRUE befehle ohne Probleme, Roboter 2. hingegen nicht und überspringt auch mal welche ist das normal?
    Ich hatte dann das ganze Programm noch mal genauer angeschaut und habe bemerkt kaum wenn ich im Programm beim Roboter 2. den Befehl HALT eingebe er nach dem Befehl HALT wieder alle WAIT FOR $IN []==TRUE befehle erkennt. Das blöde dabei ist das man HALT befehle ja bestätigen muss und danach das Programm weiter fährt, das bedeutet jemand müsste immer in der nähe sein um beim KCP zu bestätigen. Dabei wollte ich eigentlich alles automatisiert haben :denk: .
    Meine frage ist jetzt gibt es eine Beschränkung beim gebrauch von WAIT FOR $IN []==TRUE Sätzen in einem Programm?
    Könnt ihr mir weiter helfen?

  • hi hetzer,


    evtl. ein problem mit dem vorlaufzeiger? du könntest testweise statt dem halt befehl einfach ein wait sec 0 einfügen und so einen vorlaufstop erzwingen.

    „Welten, regiert von künstlichen Intelligenzen,<br />mußten oftmals ihre schmerzlichen Erfahrungen machen.<br />Logik kennt keine Gefühle.“

  • Hallo Hetzer,
    einfacher für uns wäre, einfach mal Code zu posten, wo Dein Problem vorkommt.
    Programm fährt nicht ohne Grund einfach weiter.
    Wird Continue (ILF Cont) bei Dir verwendet?
    Softwareversion?
    Gruss SJX

    Manche Maenner bemuehen sich lebenslang, das Wesen einer Frau zu verstehen. Andere befassen sich mit weniger schwierigen Dingen z.B. der Relativitaetstheorie.

  • Hi Anubis und SJX,
    danke für eure Antworten.
    Ich konnte das Problem jetzt so lösen das ich wie Anubis mir geraten hatte einen WAIT SEC Befehl bei dem Roboter 2. verwende.
    Nachdem bei Roboter 2. die Wartezeit von 10 sec abläuft (was neben dem Ablauf des Programms von Roboter 1. sehr gut passt) kann Roboter 2. wieder alle WAIT FOR $IN[]==TRUE befehle lesen.
    Danke für die Schnelle Antwort.

  • hmm... also für mich klingt das so, als würde roboter 1 eine aktion ausführen, welche doch die eingänge schält auf die roboter 2 wartet. Dieser Puls kann so kurz sein, dass du es selbst gar nicht mitbekommst.


    das könnte über ein paar verknüpfungen der eingänge mit flags im sps.sub einfach geprüft werden. dann im src vor deiner wartezeit flags zurücksetzen und während der wartezeit zuschauen, ob die flags auf true schalten.

    „Welten, regiert von künstlichen Intelligenzen,<br />mußten oftmals ihre schmerzlichen Erfahrungen machen.<br />Logik kennt keine Gefühle.“

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
Anmelden
Du hast bereits ein Benutzerkonto? Melde dich hier an.
Jetzt anmelden