Automatischer Start: SPS.sub und Automatik extern

  • Hallo zusammen,


    das Thema SPS.sub und Automatik extern gab es schon ein paar Mail, ich hab mir auch alles gewissenhaft durchgelesen, habe aber doch Fragen. :kopfkratz:


    Wir möchten einen Roboter mit GM-Schrank (nur Automatik Extern) ohne SPS derart konfigurieren, dass er folgendes Verhalten zeigt:
    1. Der Roboter soll nach einem (Kalt-/Warm-)Start automatisch sein Programm starten (CELL.src)
    2. Der Roboter soll nach einem Not-Aus wieder automatisch sein Programm fahren



    Gedacht habe ich mir das jetzt so:


    Die folgende Signale werden über I/O zu den entsprechenden Variablen gebrückt:
    ----------------------------------------------------
    SIGNAL KUKA_OUT_DRIVES_ON $OUT[10] ; $DRIVES_ON
    SIGNAL KUKA_OUT_PERI_READY $OUT[11]; $PERI_READY
    SIGNAL KUKA_OUT_CONF_MESS $OUT[12] ; $CONF_MESS
    SIGNAL KUKA_OUT_EXT_START $OUT[13] ; $EXT_START


    SIGNAL KUKA_IN_PERI_READY $IN[11] ; $PERI_READY



    In der SPS.sub würde dann stehen:
    ----------------------------------------------------
    DEF SPS ( )
    [...]


    LOOP
    [...]
    ;Make your modifications here

    IF($ALARM_STOP==FALSE)THEN
    START_VIA_AUTOMATIC_EXTERN( )
    ENDIF

    [...]
    ENDLOOP
    [...]
    END




    DEF START_VIA_AUTOMATIC_EXTERN ( )
    $MOVE_ENABLE=1
    $DRIVES_OFF=1


    KUKA_OUT_DRIVES_ON= 1

    WAIT FOR KUKA_IN_PERI_READY
    KUKA_OUT_CONF_MESS= 1

    WAIT FOR $STOPMESS
    KUKA_OUT_EXT_START= 1

    WAIT FOR $PRO_ACT
    END


    ----------------------------------------------------


    - ist das alles, was zu tun ist?


    - Kann ich $MOVE_ENABLE=1 und $DRIVES_OFF=1 einfach so setzen oder muss das durch Verdrahtung und Konfiguration der Automatik extern Schnittstelle geschehen?


    - Können die WAIT Anweisungen auch wegfallen? Es hier unterschiedliche Anleitungen gegeben den automatischen Start zu vollziehen.


    - Warum und wie sollte hier ein Blinker eingesetzt werden (war in manchen Beiträgen zu lesen)?


    - Was ist das KUKA Flankenproblem, was bedeutet das für mich?


    - Unser Hauptprogramm wird per Interrupt mit Daten von der seriellen Schnittstelle versorgt (etwa 5 mal die Sekunde), gibt es irgendetwas in diesem Zusammenhang mit der Start/Not-Aus Prozedur, was wir beachten müssen?


    Schönen Gruß, Maxx

  • Schritt für Schritt zum Roboterprofi!
  • Hallole,

    Zitat


    - ist das alles, was zu tun ist?


    Sorry, aber da ist ausser der Signalfolge das meiste falsch.


    Zitat


    - Kann ich $MOVE_ENABLE=1 und $DRIVES_OFF=1 einfach so setzen oder muss das durch Verdrahtung und Konfiguration der Automatik extern Schnittstelle geschehen?


    Kann nicht im Programm gesetzt werden, muss auf alle Fälle über einen Draht oder Bussignale kommen. Man kann da als Notbehelf Ausgänge auf Eingänge verdrahten,
    oder den Eingang 1025 nehmen, der ist immer 1.


    Zitat


    - Können die WAIT Anweisungen auch wegfallen? Es hier unterschiedliche Anleitungen gegeben den automatischen Start zu vollziehen.


    WAIT-Befehle haben im SPS.SUB aber auch rein gar nichts zu suchen !!! Da wird nämlich die Abarbeitung quasi angehalten und der SPS-Gedanke komplett untergraben. Das ganze muss durch eine Schrittkette/binären Automaten/Zustandsautomaten (oder wie auch immer man das nennen will) ersetzt werden.


    Zitat


    - Warum und wie sollte hier ein Blinker eingesetzt werden (war in manchen Beiträgen zu lesen)?


    Naja, vielleicht als Meldelampe oder so, unbedingt notwendig ist das nicht. Oder man will sich das saubere generieren von Flanken (siehe weiter unten) sparen.


    Zitat


    - Was ist das KUKA Flankenproblem, was bedeutet das für mich?


    Die Eingänge EXT_START, DRIVES_ON, CONF_MESS reagieren nur auf positive Flanken, d.h. man muss z.Bsp. beim Starten des Programms dafür sorgen, dass nachdem die Motoren ein sind und die Störungen quittiert sind das Signal $ext_start von 0 auf 1 wechselt.


    Zitat


    - Unser Hauptprogramm wird per Interrupt mit Daten von der seriellen Schnittstelle versorgt (etwa 5 mal die Sekunde), gibt es irgendetwas in diesem Zusammenhang mit der Start/Not-Aus Prozedur, was wir beachten müssen?


    Naja, wenn das Hauptprogramm steht, dann werden die Interrupts nicht verarbeitet, wenn da trotzdem Daten auf der Schnittstelle ankommen, dann gehen die irgendwann mal verloren (falls das Programm zu lange steht und der Empfangspuffer überläuft).


    Gruss Hermann

    Einmal editiert, zuletzt von Hermann ()

  • Hallo Hermann
    ich danke dir, habe mal kurz geschluckt, war mir nicht klar, dass ich so wenig Anhnung davon hatte.


    Komme ich denn so der Sache näher:


    DEF SPS ( )
    [...]


    LOOP
    [...]
    ;Make your modifications here

    IF(($ALARM_STOP==FALSE) AND (NOT ROBOT_IS_RUNNING))THEN
    START_VIA_AUTOMATIC_EXTERN( )
    ROBOT_IS_RUNNING= TRUE
    ENDIF

    [...]
    ENDLOOP
    [...]
    END




    DEF START_VIA_AUTOMATIC_EXTERN ( )
    ; $MOVE_ENABLE und $DRIVES_OFF statisch auf 1


    PULSE (KUKA_OUT_DRIVES_ON,TRUE,1 )
    PULSE (KUKA_OUT_CONF_MESS,TRUE,1 )
    PULSE (KUKA_OUT_EXT_START,TRUE,1 )
    END

  • Hallo,
    naja, auch nicht viel besser (meiner Meinung nach).
    Um Dich auf die richtige Strasse zu bringen hier mal eine Fährte:


    im Init-Teil des SPS.SUB

    Code
    zustand = 0


    im Loop sowas wie:


    oder halt so ähnlich, alles aus'm Gedächtnis ohne Garantie.
    Was noch fehlt, ist eine Fehlerbehandlung, falls mal eine Signal nicht kommt, wie erwartet, dann neuaufsetzen, Behandlung Not-AUS und, und, und....


    Gruss Hermann

  • Danke Hermann,
    Ich habe jetzt mal nach "Schrittkette" gegoogelt und schäme mich.


    Kann ich denn $MOVE_ENABLE und $DRIVES_OFF beide auf den Eingang 1025 nehmen?


    Schönen Gruß, Maxx

  • Gern geschehen,
    man lernt halt nie aus (hoffentlich :zwink:).


    Ob man beide Eingänge auf 1025 legen kann weiss nicht nicht genau, Versuch macht kluch.
    Könnte sein, dass der $drives_off auch flankengetriggert ist, dann ist eh egal wo er liegt.


    Bei den neueren Betriebssystemversionen (zumindest Standard-Versionen, also keine VKRC) darf man $move_enable nicht auf 1025 legen, da wird gemeckert, also auch da eine Brücke von Ausgang auf Eingang, oder die Option abschalten in der $options.dat, wurde hier im Forum schon mal erwähnt.


    Gruss Hermann
    PS: Schönes Wochenende allen zusammen.

  • Hi,


    $Drives_Off ist nicht fankengetriggert - es kann statisch 1 sein.
    Die einzigen Flanken, welche programmiert werden muessen sind $Conf_mess, $Drives_on und $Ext_Start.


    Gruss Stefan

  • Ok. das läuft jetzt. uff.


    Ich habe noch Schwierigkeiten mit der cell.src.
    Ich denke, ich hab das Konzept nach dem cell.src in welchen Betriebsmodi aufgerufen wird noch nicht verstanden.
    Ich habe ein einziges Programm auf dem Roboter, das auch nach einem Aus- und Einschalten gestartet werden soll.


    - Ersetze ich nun den Aufruf von cell.src in der sps.sub durch den Aufruf non meinem Programm? Hab ich probiert, hat nicht funktioniert.


    - Oder lösche ich cell.src und kopiere mein programm dorthin, was ich cell.src nenne?


    - Oder wie kann ich cell.src um den Auswahlteil für mehrere Programme zusammenstreichen?

  • Hi,


    Code
    ;Automatik extern
      IF $MODE_OP==#EX THEN
        CWRITE($CMD,STAT,MODE,"RUN /R1/CELL()")
      ENDIF


    steht im SPS.Sub vor dem Loop. Der Roboter muss bei hochlauf bereits in Mode Extern stehen - danach Umschalten bringt nix.


    alternativ kannst du

    Code
    IF ($pro_state1==#free and $mode_op ==#ext) THEN
        CWRITE($CMD,STAT,MODE,"RUN /R1/CELL()")
      ENDIF


    oder so aehnlich machen und zwar im loop


    der Name des Progarmms, ob du Cell nun ersetzt, was auch immer macht nix. Es Wird immer das Prgramm in den Anfuehrungszeichen gestartet.



    Musst du probieren - bei $pro_state1 bin ich mir nicht sicher mit dem Namen.


    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