Neustart der Steuerung abfragen

  • Hallo Zusammen,


    zu meiner Verwunderung konnte ich bisher noch nichts zu dem Thema hier finden.


    Ich möchte mit dem Start der Steuerung eine Variable abfragen (welche immer mit Steuerungsstart auf TRUE gesetzt wird) und diese dann in meinem späteren Ablauf, bspw. nach einer Initialisierung, auf FALSE setzen.

    Das ist sicherlich etwas was allgemein mehrere Leute mal nutzen möchten.



    Zu meinem direkten Problem komme ich jetzt nochmal genauer zurück:

    Ich nutze eine KRC5 mit V8.7.4 in Zusammenhang mit einer Cognex Kamera und dem Optionspaket EthernetKRL 3.2.4


    Das Problem was ich aktuell habe ist, dass ich einmalig über EthernetKRL eine Verbindung zum Teilnehmer (in dem Fall die Cognex Kamera) aufbauen muss. Das Funktioniert soweit auch mit den "EKI" (EthernetKRL Interface) Funktionen ohne Probleme. Allerdings nicht, sobald ich durch An- und Abwahl meines Interpreters (in dem Fall der 2. Submit) die Funktionen neu aufrufe.


    Bspw. gibt es bei einer wiederholten Initialisierung der Ethernet Verbindung eine Störung, oder auch bei der Interrupt Deklaration (wie gesagt nur Beispiele, Initialisiert wird bei mir noch mehr). Deswegen würde ich meine Initialisierung gerne Abhängig vom Steuerungs Neustart machen.



    Danke für Eure Vorschläge! :)

  • Schritt für Schritt zum Roboterprofi!
  • Jonas315 : der Gedanke hat aber auch was von mangelnder Programmierhygiene. Wenn man jetzt unbedingt Tasks abwählen muss, warum dann nicht das, was man vorher mal "initialisiert" hat, auch ordentlich wieder runterfahren (EKI_Close, EKI_Clear, z. B.)? Eine Verbindung offen lassen und dann einfach den ganzen Task abwürgen ist unfein. Und nach der Wiederauferstehung die gleiche Verbindung wieder kapern zu wollen und zu können ist an sich noch schlimmer und als Sicherheitsrisiko einzustufen.


    Und/oder all das eben dann einzeln prüfen, ob es aus einem vorherigen Vorgang noch steht, wenn man es startet. Oder einfach töten, ohne zu prüfen, ob es noch steht, und dann neu aufbauen.


    Wenn das aus Gründen nicht geht, kann man sich manchmal mit der Variableneigenschaft behelfen (varstate()). Man definiere sich irgendwo an der richtigen Stelle eine Variable und weise einen Wert zu oder nicht, übergebe sie an fragliche Subroutinen, und die können dann mit varstate überprüfen, ob der Kontext noch erhalten geblieben ist bzw. durch eine Zuweisung diese Eigenschaft dann selbst festlegen. (#INITIALIZED)

  • Ich würde es nicht unbedingt als "mangelnde Programmierhygiene" bezeichnen, wenn man einen Störungsfreien Programmablauf für den Kunden gewährleisten möchte...

    Wo könnte ich denn die Ausführung von EKI_Close und EKI_Clear sicherstellen, wenn der Submit einfach aus Unwissenheit abgewählt wird?

    Deine Wortwahl finde ich da ein wenig unpassend, ist aber sicherlich nicht persönlich gemeint :)


    Die Idee über die Varstate-Funktion den Status abzufragen finde ich schon mal sehr gut und werde ich sicherlich auch einbringen.


    Allerdings denke ich das das Thema auch allgemein für die Zukunft interessant sein könnte, kennst du also evtl. eine Möglichkeit einen "frischen" Neustart der Steuerung abzufragen?

  • Wie frisch darf er denn sein? Warmstart? Kaltstart? Kaltstart mit Dateien neu einlesen? Warmstart mit "Kamera hat aber auch neu gebootet"? Re-Initialisierung nach Sicherheitsänderung? Neustart einer evtl. vorhandenen Soft-SPS?


    Ich weiß nicht, ich bin über dieses Thema noch nie gestolpert. Ich kann mir persönlich keine Situation vorstellen, in welcher der Zustand des Steuerungshochlaufes irgendeine Rolle spielt. Tasks ja, Steuerung nein.

    Gerade dazu dient ja die Initialisierung - einen definierten Zustand herzustellen. Eine Initialisierungsroutine muss mit allem fertig werden, was sie vorfindet, weil das, was sie vorfinden kann, per Definition undefiniert ist. :) Im konkreten Fall sollte der "EKI_*"-Werkzeugkasten etwas hergeben, womit man fehlerfrei eine neue Verbindung aufbauen kann.


    (((Und wenn der Kunde einen Deppen an die Anlage stellt, der aus Unwissenheit Tasks abwählt, dann hat der es nicht besser verdient. Eine Bedienerschulung sollte schon drin sein. Aber das fällt wahrscheinlich wieder unter "unpassende Wortwahl" der externen Syntaxrevision.)))

  • Mit der Systemvariable $POWER_FAIL könntest Du vermutlich was "basteln" in einem Sub.

    Wird standardmässig auch in der sps.sub verwendet (WAIT FOR NOT($POWER_FAIL)).


    Bin aber auch der Meinung, dass dies durch abfragen auch anders gehen sollte.


    Sympathischer als das langsame varstate() wäre für mich die Alternative ON_ERROR_ PROCEED für "Fehlerhandling". Handling ist in Doku beschrieben.


    Gruss SJX

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

  • ...

    Im konkreten Fall sollte der "EKI_*"-Werkzeugkasten etwas hergeben, womit man fehlerfrei eine neue Verbindung aufbauen kann.

    ...


    Letztendlich ist ja genau das mein Problem. Wenn ich ganz Stumpf 2 mal hintereinander EKI_INIT() ausführen würde, kommt eine Störung...

    Der erste Lösungsansatz der mir in den Sinn kam, war halt die Ausführung nach dem Start auszuführen und da ich allgemein nichts dazu gefunden hatte, habe ich da mal nachgefragt ;)



    ON_ERROR_PROCEED ist natürlich eine sehr interessante Funktion, vielen Dank dafür!

    Habe mir auch schon die Beschreibung aus der Doku dazu angeschaut, dass sollte man nur in Ausnahme Fällen nutzen.


    Mit den Infos die ich jetzt bekommen habe sollte ich soweit erstmal alles erledigen können.



    Und für alles weitere @Programmiersklave ...Natürlich hast du recht, nicht jeder Depp sollte am Roboter rumfummeln :beerchug:

  • ON_ERROR_PROCEED ........., dass sollte man nur in Ausnahme Fällen nutzen.

    Wer erzählt den sowas ????

    KUKA's BAS.src zeigt das Gegenteil.

    So als Beispiel:

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

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