Zustand einer Variable

  • Hallo,


    Welchen Zustand hat eine Variable eines Unterprogramms
    in dessen Aufruf kein Wert für diese Variable übergeben wurde:


    Aufruf: SET_OUT_C (#S,-400)


    GLOBAL ENUM TR_TYP DIST_0,DIST_1,DISABLED


    GLOBAL DEF SET_OUT_C (OUT_TYP: IN,OUT_NR: IN,P_TIME: IN,TRIGGER_TYP: IN)
    DECL TR_TYP TRIGGER_TYP


    welchen --> VARSTATE("TRIGGER_TYP")==#????????? habe ich nun im Unterprogramm?


    Rainer

    - Ehrlichkeit, die im Pfandhaus gelandet ist, wird nie mehr eingelöst. - (Thomas Middleton (1580-1627), engl. Dramatiker)

  • Schritt für Schritt zum Roboterprofi!
  • Hallo


    wenn sie nen gültigen wert hat sie #INITIALIZED
    wenn sie deklariert ist ist der Wert #DECLARED
    und wenn sie ganz unbekannt ist #UNKNOWN
    die zwei letzetn fälle nochmal bitte nachprüfen benutze meist nur den ersten fall
    die anderen müsste ich am montag nachschauen



    dann hast du im Programm nur


    If (VARSTATE("TRIGGER_TYP")==#INITIALIZED) Then
    ;allet gut
    Else
    TRIGGER_TYP = Standard
    Endif


    Gruß und schönes WE


    Loipe

    Einmal editiert, zuletzt von Loipe ()

  • Warum sollte das einen Vorlaufstop ausloessen?
    Der Wert einer globalen Variablen kann zur Laufzeit geandert werden (sps.sub, oder Variablenanzeige) - warum also nicht der Status?


    Varstate ist eine Funktion des Kernsystems, wenn die Abarbeitung so lange dauert, bis der Hauptlaufzeiger den Vorlaufleiger einholt, wuerde das einen Vorlaufstop ausloessen.


    Ob es tatsaechlich so ist, weis ich nicht - sollte man probieren.


    Gruss Stefan

  • Hallo
    zum einen weil ich deswegen schonmal Probleme hatte und deswegen ich schon mal diesen Beitrag gelesen hab den ich grad wieder rausgesucht hab (ist ja schon ne weile her und ich kann mir auch net alles merken)


    http://www.roboterforum.de/rob…25.0.html;msg3189#msg3189


    und wenn er was triggern möchte könnte es vieleicht auch mal zeitlich knapp werden womit er dann vieleicht nicht unbedingt mit nem Vorlaufstop probleme kriegen wird aber vieleicht mit dem was er triggern will.


    nur das eine Funktion im Grundsystem ist heißt es net das sie schneller als von uns Programmierte laufen es gibt da genug Faktoren.


    Gruß Loipe

  • Hallo,


    $Varstate ist meiner Erfahrung nach sehr langsam.


    Ich habe lediglich die These aufgestellt, dass es aufgrund der Gesschwindigkeit der Abarbeitung zum Vorlaufstop kommt.
    Ich sehe keinen logischen Grund, warum Kuka hier gewollt einen Vorlaufstop ausloessen sollte.


    Interpolationstakt ist fix, erhoehen von $advance wird nix bringen - den Beweiss bleibe ich also schuldig.


    Gruss Stefan

  • Hallo


    ja meine These ist wenn er genau am Punkt Triggert und Varstate bissel länger braucht um die enum Variable zu checken könnte es möglich sein das es nen Vorlaufstop oder andere nicht gewollte Reaktionen gibt aber auch das ist von mir jetzt gerade, ausser im office light, nicht auch nicht zubeweisen.


    und das man office light nicht mit nem realen Roboter vergleichen können sind wir uns ja einig, oder? ^^


    und wie genau er was machen will ist uns ja auch net bekannt, also mir jedenfalls net.


    und ich das ich von einem generellen Vorlaufstop gesprochen war ein fehler von mir :???: war so net gemeint


    Gruß Loipe

    Einmal editiert, zuletzt von Loipe ()

  • Hallo,


    jetzt mal zur urspruenglichen Frage zurueck.


    der Status im Unterprogramm waere #declared, wenn die uebergebene Variable nicht inittialisiert wird.


    Bin mir nicht sicher, ob das nicht beim Laden schon mucken machen wurde (...von Laufzeit Variablen nicht zulaessig).
    Steh grad ein bisschen auf dem Schlauch.


    Du hast fuer deinen Enum #disabled vorgesehen, da kannst du dann im aufrufenden Programm die Variable doch auch so initialisieren?


    Gruss Stefan

  • hallo
    ich nutze dies hauptsächlich für Laufzeit Variablen und da funktioniert es bei mir Problemlos
    und das #disabled kann er nutzen muss es aber auch net wenn dieser Zustand nur ausagt das der ausgang nur net getriggert werden soll.



    weiß zwar net ob das mit der $out zuweisung funktioniert aber das mit VarState kannst du so nutzen da bei den Laufzeitvariablen durch die Übergabe schon vorm Zeitpunkt der Deklarierung der Wert feststeht wird dieser so vermute ich beim deklarieren direkt berücksichtigt.
    sag mal woführ steht eigentlich der OUT_TYP?



    Gruß Loipe

  • Hallo,


    zu OUT_TYP:


    #S = Ausgang SETZEN TRUE/FALSE
    #P = Ausgang PULSEN TRUE/FALSE


    Rainer

    - Ehrlichkeit, die im Pfandhaus gelandet ist, wird nie mehr eingelöst. - (Thomas Middleton (1580-1627), engl. Dramatiker)

  • da hätte ich auch drauf kommen können :wallbash:


    aber warum denn net noch wenn wir schon dabei sind


    Code
    If (VARSTATE("P_TIME")==#INITIALIZED) Then
    ;    Pulsen
      Else
    ;    setzen
      Endif


    dann sparst du dir den Out_typ


    setzen ohne trigger
    SET_OUT_C (-400)
    pulsen ohne trigger
    SET_OUT_C (-400,1)
    usw.
    SET_OUT_C (-400,,DIST_0)
    SET_OUT_C (-400,,DIST_1)
    SET_OUT_C (-400,1,DIST_0)
    SET_OUT_C (-400,1,DIST_1)


    macht doch nen schlanken Fuss ;)

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