KUKA KRC4 8.3 Dialogmeldung mit Ausgang / Problem

  • Guten Morgen zusammen,


    nach langer langer zeit bin ich nun auch mal hier angemeldet da ich nicht mehr weiter weis.

    Ich habe eine Dialogmeldung programmiert in der ich gerne wenn ich auf '' JA '' klicke einen Ausgang schalten möchte, ist das nicht möglich oder bin ich schlicht weg zu dumm dafür ?


    MELD_AUSW (#D,51,AUSWAHL ) ; Referenzieren oder Abbruch

    SWITCH AUSWAHL


    CASE 1 ; Referenzieren

    O_Freigabe_Ref = TRUE ;($OUT[205])



    CASE 2 ; Abbruch


    ENDSWITCH


    :rolleyes:


    Mit freundlichen Grüßen

  • Schritt für Schritt zum Roboterprofi!
  • Natürlich ist dies möglich.


    Aber bitte poste mal Minimum noch das Prog MELD_AUSW()

    Weiter noch Deklarationen, wo wir sehen, wo was gemacht wurde.

    Irgendwelche Fehlermeldungen noch dazu, wenn es gibt.


    Hellsehen, was Du programmierst hast, können wir noch nicht.

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


  • Natürlich, entschuldige. Habe leider noch nie Meldungen programmieren müssen, habe mir das so bei meinem Kunden zusammen gebastelt. Ob das so richtig ist, ist die Frage.



  • Soooo, habe jetzt nochmal durch Beiträge hier aus dem Forum versucht etwas zusammen zu Basteln. Hier mal mein Beispiel wie es aussehen sollte und das dazu gehörige Dialogprogramm. Wie setze ich das zusammen das an meinen stellen ( mit Kommentar versehen ) die Dialoge öffnen mit der Auswahl.


    DEF Grf_Abstandpruefen( )



    _Greifer(1,#AUF) ; Zangen loesen (mit Endlagen-Ckeck)

    _Greifer(2,#ZUR) ; Taster zurueck (mit Endlagen-Ckeck)


    ;FOLD LIN Festepos Vel=0.3 m/s CPDAT2 Tool[1]:Greifer ohne Sitz Base[0];%{PE}%R 8.3.38,%MKUKATPBASIS,%CMOVE,%VLIN,%P 1:LIN, 2:Festepos, 3:, 5:0.3, 7:CPDAT2

    $BWDSTART=FALSE

    LDAT_ACT=LCPDAT2

    FDAT_ACT=FFestepos

    BAS(#CP_PARAMS,0.3)

    LIN XFestepos

    ;ENDFOLD

    O_Referenzierposition = TRUE ; Zangen schliessen komplett für Referenzierung (Greifen)($OUT[204])


    ; HIER SOLLTE DER ERSTE DIALOG STEHEN ; SICHTKONTROLLE DURCHFÜHREN BEI OK DRÜCKEN WEITER IM PROGRAMM, BEI ABBRUCH IN HOME


    O_Referenzierposition = FALSE ; Zangen schliessen komplett für Referenzierung (Greifen)($OUT[204])

    O_GRF_oeffnen = TRUE ; Greifer oeffnen ($OUT[215])

    WAIT FOR I_GRF_geoeffnet ; Greifer geoeffnet ($IN[215])


    ;HIER SOLLTE DER DIALOG MIT REFERENZIEREN STEHEN / DURCH DIE BESTÄTIGUNG MIT JA SOLLTE DER AUSGANG O_Freigage_Ref GESETZT WERDEN. DURCH ABBRUCH ZURÜCK IN HOME


    WAIT FOR I_Referenz_abgeschlossen ; Warte auf Referenzierung abgeschlossen

    O_Freigabe_Ref = FALSE ;($OUT[205])

    WAIT SEC 0.5

    O_GRF_oeffnen = TRUE ; Greifer oeffnen ($OUT[215])

    WAIT FOR I_GRF_geoeffnet ; Greifer geoeffnet ($IN[215])


    TRIGGER WHEN DISTANCE=0 DELAY=0 DO POSITION=1

    ;FOLD LIN Pruefpos Vel=0.3 m/s CPDAT1 Tool[1]:Greifer ohne Sitz Base[0];%{PE}%R 8.3.38,%MKUKATPBASIS,%CMOVE,%VLIN,%P 1:LIN, 2:Pruefpos, 3:, 5:0.3, 7:CPDAT1

    $BWDSTART=FALSE

    LDAT_ACT=LCPDAT1

    FDAT_ACT=FPruefpos

    BAS(#CP_PARAMS,0.3)

    LIN XPruefpos

    ;ENDFOLD


    O_Referenzierposition = TRUE ; Zangen schliessen komplett für Referenzierung (Greifen) ($OUT[204])


    ; HIER SOLLTE ERNEUT DER ERSTE DIALOG STEHEN ; SICHTKONTROLLE DURCHFÜHREN BEI OK DRÜCKEN WEITER IM PROGRAMM, ABBRUCH WÄRE HIER THEORETISCH NICHT NÖTIG


    O_Referenzierposition = FALSE ; Zangen schliessen komplett für Referenzierung (Greifen)($OUT[204])

    O_GRF_oeffnen = TRUE ; Greifer oeffnen ($OUT[215])

    WAIT FOR I_GRF_geoeffnet ; Greifer geoeffnet ($IN[215])


    TRIGGER WHEN DISTANCE=0 DELAY=0 DO POSITION=0

    ;FOLD PTP HOME Vel= 100 % DEFAULT;%{PE}%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:HOME, 3:, 5:100, 7:DEFAULT

    $BWDSTART = FALSE

    PDAT_ACT=PDEFAULT

    FDAT_ACT=FHOME

    BAS (#PTP_PARAMS,100 )

    $H_POS=XHOME

    PTP XHOME

    ;ENDFOLD




    wait sec 0

    R_I_GRST=TRUE

    POSITION=0


    ;---------------------------------------------------

    ; Ende Hauptprogramm

    ;---------------------------------------------------


    END_HP:


    IF (R_I_GRST==FALSE) THEN

    GST_FAHRT ( )

    ENDIF


    ; Anwenderprogramm nicht mehr aktiv

    P_AKTIV=FALSE


    END



    ;----------------------------------------------------------------------------------------------------------

    ;Meldungen

    DECL INT TicketNr

    DECL KRLMSG_T Nachrichtentext

    DECL KRLMSGPAR_T Parameter[3]

    DECL KRLMSGOPT_T Optionen

    DECL BOOL geloescht,vorhanden

    DECL INT AntwortNr

    DECL KRLMSGDLGSK_T softkey[7]

    DECL INT I



    I=0


    Nachrichtentext = {modul[] "Sichtprüfung", Nr 1, msg_txt[] "Sichtprüfung ob Greifzangen in Position sind!"}

    Softkey[1] = {sk_Type #value, sk_txt[] "In Position"}

    Softkey[2] = {sk_Type #value, sk_txt[] "Abbrechen"}

    Softkey[3] = {sk_Type #Empty, sk_txt[] " "}

    Softkey[4] = {sk_Type #Empty, sk_txt[] " "}

    Softkey[5] = {sk_Type #Empty, sk_txt[] " "}

    Softkey[6] = {sk_Type #Empty, sk_txt[] " "}

    Softkey[7] = {sk_Type #Empty, sk_txt[] " "}


    TicketNr = Set_KrlDlg (Nachrichtentext, parameter[], Softkey[], optionen)

    IF (TicketNr > 0) THEN

    while (Exists_KrlDlg(TicketNr, AntwortNr))

    wait Sec 0.5

    endwhile

    switch AntwortNr

    case 1


    CASE 2

    O_Freigabe_Ref = FALSE ;($OUT[205])

    O_Referenzierposition = FALSE ; Zangen schliessen komplett für Referenzierung (Greifen)($OUT[204])

    O_GRF_oeffnen = TRUE ; Greifer oeffnen ($OUT[215])

    WAIT FOR I_GRF_geoeffnet ; Greifer geoeffnet ($IN[215])

    ;FOLD PTP HOME Vel=100 % DEFAULT;%{PE}%R 5.5.24,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:HOME, 3:, 5:100, 7:DEFAULT

    $BWDSTART=FALSE

    PDAT_ACT=PDEFAULT

    FDAT_ACT=FHOME

    BAS(#PTP_PARAMS,100)

    $H_POS=XHOME

    PTP XHOME

    ;ENDFOLD


    endswitch


    FOR I = 1 TO 7

    softkey[I] = {sk_type #Value, sk_txt[] " "}

    ENDFOR


    ENDIF


    Nachrichtentext = {modul[] "Referenzierung", Nr 2, msg_txt[] "Soll der Greifer Referenziert werden ?"}

    Softkey[1] = {sk_Type #value, sk_txt[] "Ja"}

    Softkey[2] = {sk_Type #value, sk_txt[] "Nein"}

    Softkey[3] = {sk_Type #Empty, sk_txt[] " "}

    Softkey[4] = {sk_Type #Empty, sk_txt[] " "}

    Softkey[5] = {sk_Type #Empty, sk_txt[] " "}

    Softkey[6] = {sk_Type #Empty, sk_txt[] " "}

    Softkey[7] = {sk_Type #Empty, sk_txt[] " "}


    TicketNr = Set_KrlDlg (Nachrichtentext, parameter[], Softkey[], optionen)

    IF (TicketNr > 0) THEN

    while (Exists_KrlDlg(TicketNr, AntwortNr))

    wait Sec 0.5

    endwhile

    switch AntwortNr

    case 1

    O_Freigabe_Ref = TRUE

    case 2

    O_Freigabe_Ref = FALSE ;($OUT[205])

    O_Referenzierposition = FALSE ; Zangen schliessen komplett für Referenzierung (Greifen)($OUT[204])

    O_GRF_oeffnen = TRUE ; Greifer oeffnen ($OUT[215])

    WAIT FOR I_GRF_geoeffnet ; Greifer geoeffnet ($IN[215])

    ;FOLD PTP HOME Vel=100 % DEFAULT;%{PE}%R 5.5.24,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:HOME, 3:, 5:100, 7:DEFAULT

    $BWDSTART=FALSE

    PDAT_ACT=PDEFAULT

    FDAT_ACT=FHOME

    BAS(#PTP_PARAMS,100)

    $H_POS=XHOME

    PTP XHOME

    ;ENDFOLD


    endswitch


    FOR I = 1 TO 7

    softkey[I] = {sk_type #Value, sk_txt[] " "}

    ENDFOR



    ENDIF

    ENDIF

    END

  • Zu Deinem ersten Post:


    Der Ausgang zu Setzen sollte so funktionieren.


    Nur das Prog, dass Du damit ergänzt hast (referenzier_meldung( ) ), hast Du nirgends im Programmablauf aufgerufen.

    So gewollt?

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

  • Wenn ich Deine Meldungsroutine ansehe:



    dann sollte die Antwort im letzten Parameter stehen.

    Das ist ein "out"-Parameter, der sollte nachher den korrekten Wert haben. Theoretisch jedenfalls, ich setze das ganze immer noch in ein repeat

    Code
       repeat
        .......................Meldungskram komplett   
        Answer=KeyNumber
       until (varstate("ANSWER")==#initialized)

    weil ich da schon mal Timingprobleme hatte, wenn zu schnell getippt wurde.


    Wäre noch interessant zu wissen, was genau eigentlich nicht geht.

    Die Zeile mit

    Code
    Msg.msg_txt[]="Meldung (#D,%2,AUSWAHL) nicht programmiert""

    sieht abenteuerlich aus, ich glaube nicht, dass das als String durchgeht.

    Wolltest Du die Cases noch vervollständigen? Die Routine wirkt unfertig.


    Grüße,

    Michael

  • Komisch, ich bins mehrfach abgefahren, auch im Einzelschritt um zu sehen ob er überhaupt ins Case springt, er fährt über den Befehl setzt aber den Ausgang nicht, habe deswegen den Ausgang zur übergangslösung normal ins Programm geschrieben, ist aber nicht sinn der Sache da er nun egal ob ''Ja'' oder ''Abbruch'' gedrückt wird den Ausgang setzt. Fraglich nur wieso er wenn ''Ja'' gedrückt wird und er ins Case 1 springt indem der Befehl für den Ausgang steht, er den nicht setzt.


    Na das '' referenzier_meldung() '' muss ich doch darin deklarieren damit er die Meldungsbefehle überhaupt kennt oder nicht ? Steh gerade am schlauch muss ich sagen, bin aber auch Krank und habe aktuell keinerlei Kopf zu denken. Nur der Kunde pocht aktuell darauf.

  • Also das Programm selbst ist ein bereits bestehendes von BMW gewesen, habe das genommen und selbst so zusammen gebastelt.


    Wie gerade dem Kollegen hier beantwortet ist das Problem das er den Ausgang nicht setzt, aus welchen gründen auch immer, er springt ins Case, setzt den ausgang aber nicht, dadurch startet er das Referenzieren nicht. Das mit dem

    Code
    Msg.msg_txt[]="Meldung (#D,%2,AUSWAHL) nicht programmiert""

    hatte ich einfach so übernommen, wurde nicht auf Funktion geprüft bis jetzt.

  • Okay, dann bleibt eigentlich nur noch eines der merkwürdigen Syntaxprobleme, die man sich beim Kuka manchmal einhandelt. Ein unechter Zeilenumbruch zwischen CASE und dem Ausgangsbefehl? 0 statt O? Kannst Du die Zeile mit dem Ausgang direkt mit Satzanwahl anwählen, oder markiert er dann mehr als erwartet?

    Mach mal ein paar Leerzeilen drüber und drunter.

    Oder weitere sinnlose Befehle....


    Wenn Du im Einzelschritt drübergehst, ändert sich dann der Zustand des benannten Ausgangs in "Ansicht|Variable|einzeln"?


    Oder hast Du irgendwas in der SPS.SUB, was Dir den Ausgang mit jener Nummer direkt wieder zurücksetzt? Über $OUT [...] vielleicht? Oder als Teil eines Gruppenausgangs?


    Wenn er jedenfalls reinspringt, muss er auch die dortigen Befehle ausführen.


    Grüße,

    Michael

  • Muss ich die Tage mal schauen, werde ab morgen erstmal Zuhause bleiben, 39° Fieber ist dann doch nicht zu spaßen.. Und nein wenn ich im Einzelschritt drüber gehe setzt er wie gesagt den Ausgang nicht, habs unter Ansicht ... geprüft. SPS.SUB ist nichts drin, der Ausgang wurde nachträglich angelegt nur für diese Funktion. Komisch war nur wenn ich mich recht erinnere das trotz einzelschritt Case1 + der Ausgang anscheinend eins waren, vielleicht sollte ich mal wie du sagst leere zeilen etc dazwischen machen. Muss ich die Tage mal schauen, besten dank aber schon mal das ich wenigstens weis das es so gehen sollte.

  • Servus zusammen,


    wollte mich nochmal zu Wort melden. Hat jetzt funktioniert, habe paar Leerzeilen + ne WAIT SEC 0 reingehauen.


    Danke für den Tipp !


    Grüße

    Tobias

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