Erkennen, in welchem Task/Interpreter das Modul aufgerufen wurde

  • Hallo alle miteinander,


    ich habe gerade das Problem, dass ich ein Modul sowohl in der SPS.SUB als auch im Roboterablauf verwende.


    Dieses Modul loggt Zustände, Parameter, Fehler etc. in ein .DAT-File. Jetzt scheint es vorzukommen, dass sowohl das Ablaufprogramm als auch die SPS.SUB "gleichzeitig" darauf zu greift und somit auch "gleichzeitig" auf das .DAT-File.


    Mein Frage: Kann ich im Modul abfragen, wo es gerade ausgeführt wird (SPS.SUB
    oder Roboterablauf)?
    Erzeugt die KRL automatisch eine weiter Instanz, oder liegt da das
    Problem?


    Vielen Dank für Eure Hilfe.


    mfg mag_de_coco

  • Schritt für Schritt zum Roboterprofi!
  • Hallo,
    glaube nicht, dass da eine neue Instanz erzeugt wird.


    Ich würde da den bequemen Weg gehen und das Modul kopieren, und
    aus dem SPS.SUB die Kopie aufrufen. Dann hat man halt zwei Protokolle.
    Sehe da keine halbwegs vernünftige Möglichkeit das anderweitig in den Griff zu bekommen.


    Wird das Modul aus dem SPS.SUB aufgerufen, dann kann es unterbrochen
    werden (u.U. mehrmals) so dass es dann aus dem Hauptprogramm während
    dieser Zeit nochmal aufgerufen wird (u.U. mehrmals).


    Man könnte höchstens was mit einer Art Semaphoren versuchen, also im SPS.SUB
    eine Variable setzen, bevor das Modul aufgerufen wird, danach diese wieder
    zurücksetzen.
    Im Hauptprogramm vor dem Aufruf des Moduls warten, bis die Variable zurückgesetzt ist,
    dann eine andere Variable setzen, Modul aufrufen, Variable wieder zurücksetzen.
    Jetzt kommt die Ergänzung im SPS.SUB: Das Modul nicht aufrufen, wenn diese vom
    Hauptprogramm gesetzte Variable gesetzt ist.


    Hört sich schon nicht so übersichtlich an, ist dann im SPS.SUB nicht so schön zu
    realisieren da man nicht einfach warten sollte, bis das Modul frei ist.


    Gruss Hermann

  • Danke für die Antwort.


    Mein Gedanke war auch über eine Semaphore die Überschneidung abzu fangen. Allerdings wollte ich das direkt in den Modulen vor nehmen.
    Aber wenn es keine Möglichkeit gibt zu erkennen, wo das Modul läuft, kann ich auch nicht die taskspezifischen Verriegelungen verwenden.


    Gibt es eine Möglichkeit das ganze mit einer Semaphore zu realisieren? Wie zum Beispiel bei ABB " TestandSet ..."?


    Gruß


    mag_de_coco

  • Du kannst in der SPS VIA
    $pro_ip.name_C(hauptlauf)
    oder
    $pro_ip.name(vorlauf)
    prüfen wo sich der prozesszeiger gerade befindet
    und je nach dem fallunterscheiden.
    Rückgabe ist ein String zb "R1/UnterprogrammXXX.SCR"

  • Hallo zum Beispiel in der Art:




    Im sps.sub auf den semaphore warten waere wohl nicht ganz gluechlich. Muesste halt dort behandelt werden.


    Gruss Stefan

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