Beiträge von Langebua

    Servus zusammen,


    öffne dieses Thema hier nochmal da ich auch eine Frage zum SPS.SUB habe.


    Es geht um folgendes:


    Beim Automatischen Sitzverbau verwenden wir verschiedene Greifer Signale für verschiedene Sitz-Typen via Gripper-Tech.

    Beispiel: LU-Greifen = Ausgang xy (Grippertech Taste 1)

    LGIS-Greifen = Ausgang xy (Grippertech Taste 2)

    MPA-Greifen = Ausgang xy (Grippertech Taste 3)


    ( Da der Greifer auf verschiedene öffnungs/schließ werte fährt )


    Bei Störungen muss die Instandhaltung mit dem KCP in die Anlage und schauen welcher Sitztyp am Greifer hängt / oder hing, und mit der richtigen Gripper-Tech Taste den Greifer öffnen/schließen um den Roboter/Sitz frei zu fahren. Da kam die Beschwerde das es blöd wäre darauf achten zu müssen, denn wenn im Automatikablauf das LU-Signal schließen gesetzt wurde und die mit der Gripper-Tech Taste2 z.b LGIS öffnen drücken, der Greifer sich nicht bewegt, was logisch ist, Signal LU schließen steht ja noch an, wenn ich dann LGIS öffnen drücke, macht der Greifer nix da ja noch das LU schließen ansteht. Kann natürlich im Stress mal passieren und man weis nicht mehr welche Taste gedrückt wurde & schwups stehen gleich mal 2 verschieden öffnen & schließen an.


    Gefordert wird nun ein einziges Signal das den Greifer komplett öffnen und komplett schließen lässt, damit man nicht mehr drauf achten muss welcher Sitztyp etc am Greifer hängt/hing. Habe hierzu die Tasten 1-3 gelöscht und auf die Taste 1 ein komplettes öffnen/schließen gelegt. Damit das funktioniert habe ich in der SPS.SUB alle anderen Signale abgelöscht, wollte jetzt fragen ob das so funktioniert und so richtig ist ?


    Hoffe konnte es einigermaßen verständlich erklären :|


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


    IF (T1) AND (O_Komplett_schliessen) OR (O_Komplett_oeffnen) THEN


    O_GRF_oeffnen = FALSE

    O_Nachsetzen = FALSE

    O_GRF_schliessen_Pruef = FALSE

    O_GRF_schliessen_LGIS = FALSE

    O_GRF_schliessen_MPA = FALSE

    O_GRF_schliessen_LU = FALSE


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


    Nun sollte bei einem Störungsfall ganz einfach mit der Gripper-Tech Taste 1 das öffnen/schließen vom Greifer angesteuert werden können, da er ja alle anderen Signale ablöscht. Richtig ? :?::/


    Sorry falls es ne dumme frage ist, habe noch nie mit einer SPS.SUB gearbeitet, vorhanden ist die SPS.SUB bereits, hab nur diesen Text dazu gefügt.


    Gruß Tobias

    Servus zusammen,


    ab nächste Woche startet mein erstes eigenes Projekt mit einem LBR IIWA Roboter. Natürlich hatte ich eine 2 wöchige Schulung in Braunschweig, die allerdings schon wieder 5 Monate her ist,

    da der Roboter zu spät vom Kunden bestellt wurde. Plan war eigentlich direkt nach der Schulung mit frischem Wissen ins Projekt zu starten...


    Dementsprechend ist das wissen der Schulung auch wieder leicht verflogen, da es ziemlich viel input auf 2 Wochen war, selbst der Lehrer meinte so einen IIWA lernt man nicht mal schnell auf 2 Wochen. Mir geht natürlich die Pumpe da ich abliefern möchte & ich der einzige in meiner Firma bin der diese IIWA Schulung hatte. Ich habe keinen Kollegen den ich um Hilfe beten könnte.


    Habt ihr Tipps für mich ? Wie starte ich am besten ? Habt ihr erfahrungsgemäß einen Ablauf den ich schrittweise abarbeiten kann wenn der Roboter frisch eintrifft.


    Mit freundlichen Grüßen


    Tobi

    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

    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.

    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.

    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.

    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


    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.



    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