Sys variable Cell aktiv

  • Hallo
    Ich will in meiner SPS mitbekommen ob das Cell programm aktiv ist oder nicht. Gibt es da eine systemvarible die mir mitteilt ob das Cell programm aktiv ist?
    Ach noch eine andere Frage.
    Ich nutze die Conveyorteck software V4.0.0 gibt es da eine Systemvariable wo ich sehe ob mein Syncronisierungseingang kommt bzw. den aktuellen geberwert des Conveyors auslesen kann?


    Uli

  • Schritt für Schritt zum Roboterprofi!
  • Hallo,
    die Variable $PRO_STATE1 ist aber nicht nur beim CELL true sondern bei jedem angewählten Anwenderprogramm und der Ausgang PGNO_REQ ist nur solange true, solange P00 eine Programmnummer anfordert, sobald diese anliegt false!
    Ich würde mir einen Merker bauen in sps.sub bei NOT $EXT false und im Initialisierungsteil von CELL true wie z.B. M_CELL_AKTIV!!!

  • hi,


    1. $SEN_PREA_C[conveyor index z.B 1] mit dieser Variable ist es möglich die Position des Conveyors im laufendem Betrieb ausgeben lassen.
    2. R_CONV_POSI zeigt dir die aktuelle position, wenn der Band angehalten wurde.
    3. $MEAS_PULSE[1] mit dieser variable überwachst du dein Schnellen Messeingang.


    Hoffe es bringt dich weiter.


    Gruß

  • nein.


    zweite frage von "kukabeginner"


    Zitat

    ...
    Ach noch eine andere Frage.
    Ich nutze die Conveyorteck software V4.0.0 gibt es da eine Systemvariable wo ich sehe ob mein Syncronisierungseingang kommt bzw. den aktuellen geberwert des Conveyors auslesen kann?

    Kontrolle ist eine Illusion, denn niemand weiss was als nächstes passiert.


  • wenn /R1/CELL.SRC läuft, dann wird der Ausgang PGNO_REQ=TRUE.


    ...und wenn nicht, dann war noch das Teachprogramm aktiv, welches nun am Roboter in Extern-Automatik gestartet wurde, und im schlimmsten Fall im Schutzzaun zum Stehen gekommen ist! :denk:


    Das Cell muss natürlich vor dem Start durch die SPS abgefragt werden. Die SPS muss also wissen ob CELL.SRC 'Vater aller Unterprogramme ist'


    Das geht mit:

    Code
    IF StrComp($PRO_NAME1[] , "CELL", #CASE_SENS) THEN


    Blöd ist nur, wenn kein Programm angewählt ist, wird die Variable $PRO_NAME1[] ungültig. Wenn die SUB.SPS dann darauf zugreift, dann schmiert das Hintergrundprogramm ab. :-|
    Vielleicht könnte man den Fehler abfangen, z.B. wie Errorlevel oder so.
    Oder nur dann abfragen, wenn nicht abgewählt werden kann.


    Auch blöd ist, wenn das Programm CELL offline geändert wurde, und Windows die Datei statt CELL.src, cell.src in den KUKA schreibt, also mit Kleinbuchstaben.
    Der Kukasteuerung total Wurscht, aber StrComp nicht. Also zusätzlich noch abfragen:

    Code
    IF StrComp($PRO_NAME1[] , "cell", #CASE_SENS) THEN


    Theoretisch kann es ja sogar möglich sein, dass das Programm so in der Steuerung steht 'CeLl.src', dann müsste man jeden Buchstaben einzeln auf groß, klein abfragen. Dann kann uns keiner mehr ärgern! ;)


    Geht auch wie Loipe schreibt mit $Pro_IP.Name[]", dann bekommst du "/R1/cell.SRC".



    Eine andere Möglichkeit ist, man setzt einen Ausgang zur SPS sofort wenn das CELL Programm startet. Dieser wird zurückgesetzt, wenn kein Programm angewählt ist.
    Ist das Programm zurückgesetzt, dann will die SPS den Ausgang. Ist NOT $ROB_STOPPED OR $PRO_MOVE OR $NEAR_POSRET bevor der Ausgang kommt, dann nimmt SPS die Fahrfreigabe weg.


    Leider fährt der Roboter im schlimmsten Fall noch ein Stück, weil die Reaktionszeit doch recht groß ist.
    Man kann auch versuchen den Roboter über die SUB zu stoppen, ohne $MOVE_ENABLE, mit:

    Code
    CWRITE($CMD,STAT,MODE,"STOP 1")



    Ciao, Andreas

    CONTINUOUS ALWAYS

    Einmal editiert, zuletzt von ah_robotics ()


  • Oh danke, mit #NOT_CASE_SENS, da hätte ich aber selber drauf kommen können. :kopfkratz:


    Die Frage ist aber wie sicher ist hier VarState?
    Wenn in Zeile 1 $PRO_NAME1[] initialisiert ist, dann ist rein logisch nicht gesagt, dass in Zeile 2 das Programm nicht schon abgewählt wurde.
    Sicher, vielleicht geht die Wahrscheinlichkeit gegen Null, dass das mal passiert, aber ich möchte das nicht riskieren.
    Im Sub stehen bei uns sehr oft wichtige Dinge. Besser wäre es, wenn die SUB den Fehler einfach abfangen und munter weiterlaufen könnte.
    Aber man kann das ganze nur in EXTERN abfragen, da ist eine Abwahl nicht möglich.


    Noch dazu kommt, das mache Kunden noch zusätzlich ihre eigenen geschrieben Programme starten wollen. Diese Programme müssten ja dann zusätzlich abgefragt werden. Diese Modifikation muss dann der Kunde vornehmen oder aber sie rufen uns (zornig) an. ;)


    Der Kunde hat viele Möglichkeiten mit dem Roboter Blödsinn anzustellen. Das Falsche Programm anwählen ist nur eine Möglichkeit. ;)
    Ich denke etwas Verantwortung liegt auch beim Kunden.
    Außerdem finde ich den KUKA im Vergleich zu manch anderen Fabrikaten doch relativ sicher!

    CONTINUOUS ALWAYS


  • also das sich der Variablen zustand innerhalb von 6 CPU zyklen (oder wieviele es waren) ändert halte ich für ABSOLUT unwahrscheinlich


    Sicher, vielleicht ist es sehr unwahrscheinlich. Aber ABSOLUT kannst du bei 6 CPU Zyklen nicht schreiben. Sobald eine Zeit im Spiel ist, ist ALLES RELATIV!


    Das ist für mich keine saubere Programmierung. Ich frage auch Maschinen-Freigaben nicht auf diese Weise ab (Semaphore).
    So kann ich Nachts besser schlafen! :sleep:


    Unser SPS-Programmierer meinte mal, 'zwischen Lesen und Schreiben kann die Welt unter gehen!'

    CONTINUOUS ALWAYS

  • Hallo,


    If (VarState("$PRO_NAME1[]") == #INITIALIZED) Then
    IF StrComp($PRO_NAME1[] , "CELL", #CASE_SENS) THEN
    Endif


    Mit dem Abfragen eines ungültigen Variablenzustandes hatte ich Probleme da die SUB sich mit dem Fehler "sModul-Wert ungültig" verabschiedete.


    Falls jemand noch die Abfrage eines bestimmten Programms (z.B. Cell) benötigt, ich habs so gemacht. Bis jetzt ohne Probleme (KRC2 und KRC4):


    ;Programmanwahl ausgeben
    ;----------------------------------------
    If $PRO_STATE1==#P_FREE Then
    do_cell_angewaehlt = FALSE
    Else
    do_cell_angewaehlt = StrComp($PRO_NAME1[] , "CELL", #NOT_CASE_SENS)
    EndIf
    ;----------------------------------------


    Gruß
    Dominik

  • Angenommen, du willst gerade das Programm abwählen. Der Programmzeiger der Sub huscht auf die Zeile:

    Code
    If $PRO_STATE1==#P_FREE  Then


    Du bist gerade beim Abwählen, aber noch ist das Programm angewählt, also $PRO_STATE1 ist nicht #P_FREE.


    Dann huscht der Zeiger weiter auf:

    Code
    do_cell_angewaehlt = StrComp($PRO_NAME1[] , "CELL", #NOT_CASE_SENS)


    Jetzt ist aber gerade zufällig das Programm fertig abgewählt und $PRO_STATE1 wird #P_FREE.
    ...und die Systemvariable $PRO_NAME1[] wird ungültig, SUB stoppt!


    Vielleicht sehr unwahrscheinlich. Vielleicht lässt das Timing der KUKA-Steuerung das ja auch nicht zu.
    Aber ich habe mal gelernt, dass es so nicht sauber programmiert ist. Wir fragen deshalb $PRO_NAME1[] nur in Extern ab, weil man in Extern kein Programm plötzlich abwählen kann.


    Allerdings kann man die SUB auch mittels Interrupt neu starten, falls das mal passiert. Es gibt für alles auch ein Workaround! ;)

    CONTINUOUS ALWAYS

    Einmal editiert, zuletzt von ah_robotics ()

  • Hier mal mein Versuch dieses Problem "sauber" zu lösen.


    Code
    Err_Clear($ERR) ;Lösche Fehler
       ON_ERROR_PROCEED ;Stoppe nicht bei einem Fehler in der nächsten Zeile
       do_cell_angewaehlt = StrComp($PRO_NAME1[] , "CELL", #NOT_CASE_SENS)
       IF $ERR.Number<>0 THEN ;Prüfe auf Fehler
        do_cell_angewaehlt=FALSE
        Err_Clear($ERR) ;Lösche Fehler
       ENDIF


    Viel spass damit :zwink:

    Kontrolle ist eine Illusion, denn niemand weiss was als nächstes passiert.

  • Hallo,


    Danke für eure Meinungen und Alternativen.


    Sollte ein Bediener oder Einsteller in EXT wechseln ohne ein Programm angewählt zu haben, da würde doch die SUB wieder abschmieren.
    Klar, dürfte nicht vorkommen aber neuer Einsteller in der Nacht allein........


    Aber wie du schon richtig gesagt hast, auch das ist natürlich abfangbar.

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