Socketmessaging und Timeout

  • Guten Abend,


    Ich nutze seit längerem Socketmessaging bei mehreren FANUC Robotern.


    Alles klappt hervorragend, sofern sich ein Client beim Server anmeldet. Bleibt diese Anmeldung aus, dann bleibt das Karel Programm scheinbar auf ewig in der Zeile "MSG_CONNECT(...)" stecken und wartet auf einen Client. Es handelt sich um ein Hintergrundprogramm.


    Ist die Kommunikation aufgebaut, steht er in While Schleifen bis der Client weg ist oder ein IO Flag gesetzt wird.


    Nur wenn kein Client kommt, dann kann ich das Programm nicht beenden. Im Falle von Serviceeinsätzen unschön: der Techniker vor Ort kann das Programm nicht ohne weiteres beenden. Cold-Start bringt nichts, es wird beim Start des Roboters mitgestartet. Dem Techniker erklären, wie man das ändern kann ... ist hier nicht sinnvoll bzw gewünscht. Das Programm muss irgendwie sicher und einfach beendet werden können, sodass dann in der Anleitung für Softwareupdates steht:
    "MakroTaste1 drücken (dann startet ein Programm, welches IO Flag xy = true setzt, sodass sich alle Hintergrundprogramme beenden und das Update kopiert werden kann). Updaate installieren gemäß Anleitung."


    Ich sehe nun zwei Möglichkeiten:


    1. Timeout. Irgendwie müsste man dafür sorgen, dass der Server nur XX Sekunden (30?) auf einen Client wartet. Kommt keiner: Neustart des Servers in einer abbrechbaren Schleife.
    Folge: Setzt man ein IO Flag, kann man das Programm beenden bzw verhindern, dass der Server erneut auf Clients wartet.


    2. Ein zweites Hintergrundprogramm, welches die IO Flags beobachtet (Endlosschleife mit Delay) und bei IO Flag xy=True dann den Server (und sich selbst) beendet.
    Hier muss ich aber passen, weil ich nicht weiß, wie Karel Programm A nun Programm B beenden könnte (finde dazu nichts).




    Wenn mir da jemand weiterhelfen könnte, wäre das echt super. Schönen Abend noch! :)

  • ANZEIGE
  • Hallo,


    ich kann zwar erstmal nicht direkt auf dein Problem antworten aber gg. noch ein, zwei weitere Möglichkeiten anbieten.
    Ich habe auch das Problem gehabt dass ich ein Programm bei Start des Controllers starten musste und dieses gerade im Servicefall zu Problemen geführt hat.


    Lösung die ich genutzt habe : ich habe einfach ein R[] im Programm ausgewertet. Hatte dieses einen bestimmten Wert dann beendete sich das Programm einfach. Allerdings muss man dazu das R[] setzen und dann den Controller neu starten (oder es über einen Interrupt wegfangen) bzw. wenn Service beendet muss das R[] wieder zurückgesetzt werden. Von daher auch sehr ungünstig zu bedienen.


    Eine zweite Möglichkeit wäre das Karel Program als Task zu behandeln. Damit kannst du dann einfach ein kleines TP Programm schreiben welches den Task startet und auch wieder beenden kann. (ich nutze allerdings auch zum Task starten/beenden ein Karel Programm da es diverse Vorteile gibt)


    Vielleicht hilft das weiter.
    Gruß
    Microbi

    Der Besitz der Weltherrschaft wird überbewertet.

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