Variabler Programmname

  • MOIN!


    Ich habe hier ein Programm und zu wenig Ahnung vom Programmieren. Das läuft alles sehr schön aber ich habe vor etwas zu verschlanken.
    Wir haben hier einen KR150/2 welcher je nach Bedarf verschiedene Werkstückträger (Paletten heissen die im Programm) aus einem Regal in eine Maschine packt. Ich habe eine SPS die verschiedene Eingänge (über Profibus) am Roboter schaltet.
    Dann durchläuft das Programm ne Schleife und fragt die ganzen Eingänge ab um je nach dem eine der 20 Paletten zu bearbeiten.


    Ich kopier mal etwas vom Code hier rein.


    ;;FOLD Palettenwahl (DIREKTANWAHL)
    DEF PALETTE ()
    ; Palette 1
    IF (E_ZC == FALSE) AND (E_PALHOL == TRUE) AND (E_PAL1 == TRUE) THEN
    A_RobiReady = FALSE
    HPAL1 ()
    A_PAL1 = FALSE
    ENDIF
    IF (E_ZC == TRUE) AND (E_PALWEG == TRUE) AND (E_PAL1 == TRUE) THEN
    A_RobiReady = FALSE
    WPAL1 ()
    A_PAL1 = TRUE
    ENDIF

    ; Palette 2
    IF (E_ZC == FALSE) AND (E_PALHOL == TRUE) AND (E_PAL2 == TRUE) THEN
    A_RobiReady = FALSE
    HPAL2 ()
    A_PAL2 = FALSE
    ENDIF
    IF (E_ZC == TRUE) AND (E_PALWEG == TRUE) AND (E_PAL2 == TRUE) THEN
    A_RobiReady = FALSE
    WPAL2 ()
    A_PAL2 = TRUE
    ENDIF

    ; Palette 3
    IF (E_ZC == FALSE) AND (E_PALHOL == TRUE) AND (E_PAL3 == TRUE) THEN
    A_RobiReady = FALSE
    HPAL3 ()
    A_PAL3 = FALSE
    ENDIF
    IF (E_ZC == TRUE) AND (E_PALWEG == TRUE) AND (E_PAL3 == TRUE) THEN
    A_RobiReady = FALSE
    WPAL3 ()
    A_PAL3 = TRUE
    ENDIF


    usw. usw.


    Kann ich und wenn wie die Palettennummer (hier 1,2 und 3) durch eine Variable ersetzen?


    Danke für die Hilfe

  • Schritt für Schritt zum Roboterprofi!
  • Im kurzen Drüberschauen ist mir das mal eingefallen:


    Signalvereinbarung in der Config.dat:
    SIGNAL Palettennr $IN[1] TO $IN[20]
    Eingänge müssen deinen Eingängen angepasst werden.



    IF E_PALHOL THEN
    A_RobiReady = FALSE
    SWITCH Palettennr


    CASE 1
    IF NOT E_ZC THEN
    HPAL1 ()
    A_PAL1 = FALSE
    ELSE
    WPAL1()
    A_PAL1 = TRUE
    ENDIF


    CASE 2
    CASE 4
    CASE 8
    CASE 16
    DEFAULT

    ENDSWITCH
    ENDIF

    Externer Inhalt www.youtube.com
    Inhalte von externen Seiten werden ohne deine Zustimmung nicht automatisch geladen und angezeigt.
    Durch die Aktivierung der externen Inhalte erklärst du dich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.

  • Hallo BeatTheQ !


    Danke für die Infos!
    Ich meinte das eher so in dieser Richtung:


    ; Palette 1-20
    IF (E_ZC == FALSE) AND (E_PALHOL == TRUE) AND (E_PAL*VARIABLENWERT* == TRUE) THEN
    A_RobiReady = FALSE
    HPAL*VARIABLENWERT* ()
    A_PAL*VARIABLENWERT* = FALSE
    ENDIF
    IF (E_ZC == TRUE) AND (E_PALWEG == TRUE) AND (E_PAL*VARIABLENWERT* == TRUE) THEN
    A_RobiReady = FALSE
    WPAL*VARIABLENWERT* ()
    A_PAL*VARIABLENWERT* = TRUE
    ENDIF

  • Hallo


    Dann musst du dir nen ABB kaufen bei Kuka geht das Late Binding leider net. ausser du würdest ganz hart aus SPS.SUB das laufende Programm abwürgen und nen neues anwählen.
    ginge vllt auch ist aber net grad schön.



    Gruß Loipe

  • Wenn Du's unbedingt brauchst kannst es mit einem zusätzlichen Modul lösen:


    DEF HPAL (i:IN)
    decl int i


    switch i
    case 1
    HPAL1()


    case 2
    HPAL2()


    case 3
    HPAL3()


    default
    ;ups falsche nummer
    endwitch


    end


    Dann kannst HPAL(*VARIABLENWERT*) verwenden, also zb HPAL(1)


    Das gleiche dann auch für WPAL(1) und A_PAL(1)

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