Parameter inkompatibel

  • Schritt für Schritt zum Roboterprofi!
  • Hi zimt!


    Je nach Softwareversion mußt Du eine Unterprogramm und - wie in diesem Falle - eine Funktion zunächst im System bekanntgeben.


    Am einfachsten ist das in der $config.dat. Wenn Du in Deiner Funktion in der Kopfzeile beispielsweise folgendes stehen hast:


    DEFFCT INT Addition(par1: IN, par2: IN)


    und in der $config


    EXTFCT Addition(par1:OUT, par2: IN), dann funzt das natürlich nicht. Du mußt den übergebenen Variablentyp bekanntgeben und darfst IN und OUT nicht verwechseln.


    EXTFCT INT Addition (INT : IN, INT: IN) ist dann hier der richtige Verweis.


    Ich hoffe, Dir geholfen haben zu können (mei klingt das g'schwollen)

    Weniger als 100% wird nicht akzeptiert :)

  • Hi robodoc,


    danke für die schnelle Antwort!
    Die Softwareversion müsste 5.2 sein...


    Allerdings verwirrt es mich gerade, dass du meinst, dass es sich in meinem Fall um eine UnterFUNKTION handelt. Es ist nämlich ein Unterprogramm... Obwohl die Meldung ja von FCT spricht... :???:


    Ich denke, ich fass mal kurz zusammen, was ich da fabriziert habe:


    DEF mainProgram()
    ...
    registration()
    ...
    END


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


    DEF registration()
    EXT ftcInit(INITOPTIONS:IN) ; wobei in mainProgram.dat: GLOBAL ENUM INITOPTIONS init1, init2, ...
    ...
    ftcInit(#init1)
    ...
    END


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


    DEF ftcInit(ftcInitSwitch:IN,flexDeg:IN)
    SWITCH ftcInitSwitch
    CASE #init1
    ....


    CASE #init2
    ....


    ENDSWITCH
    END


    Die Programme stehen alle in separaten .src-files.


    ...Was mir gerade auffällt: Kann es sein, dass das Problem daran liegt, dass ich ftcInit mit nur einem Argument aufrufe, obwohl es mit zwei Argumenten definiert ist?
    Kann ich nen Dummy setzen, wenn ich nur das erste Argument übergeben will?

  • Hi,


    mußt du nicht auch den Parameter-Typ deklarieren (?):


    DEF ftcInit(ftcInitSwitch:IN,flexDeg:IN)
    DECL INITOPTIONS ftcInitSwitch
    SWITCH ftcInitSwitch
    CASE #init1
    ....
    CASE #init2
    ....
    ENDSWITCH
    END


    gruß

    Einmal editiert, zuletzt von rmac ()

  • Ja, klar. Sorry, hab ich vergessen hier mit aufzuschreiben.


    DECL INITOPTIONS ftcInitSwitch
    REAL flexDeg


    stehen natürlich auch in DEF ftcInit(ftcInitSwitch:IN,flexDeg:IN).

  • Hallo,


    wenn du eine Funktion mit zwei Übergabeparametern deklarierst, musst du sie auch mit zwei Parametern aufrufen.


    Bei ABB gibt es Möglichkeiten Parameter optional zu übergeben, ob dies bei KUKA auch möglich ist kann ich dir leider nicht sagen. Wenn nicht, hast du vielleicht die Möglichkeit den zweiten Paratemer mit 0 zu beschreiben und in deiner Funktion in dann nicht auswerten.



    Gruß
    Thilbi

  • Nach meinem Kenntnisstand nicht; der fehlende Parameter ist dann eben (zur Laufzeit) nicht definiert (ungültig)
    und erzeugt dann ggfls. einen (Laufzeit-)Fehler wenn innerhalb der Routine auf den Parameter zugegriffen
    wird.

  • Bei ABB gibt es Möglichkeiten Parameter optional zu übergeben, ob dies bei KUKA auch möglich ist kann ich dir leider nicht sagen. Wenn nicht, hast du vielleicht die Möglichkeit den zweiten Paratemer mit 0 zu beschreiben und in deiner Funktion in dann nicht auswerten.
    Gruß
    Thilbi


    Geht. Du mußt halt dann nur abfragen (mit $VARSTATE), ob auf diesem Parameter wirklich was übergeben wurde. Wenn nicht, dann kommt die Meldung "Wert ungültig"

    Weniger als 100% wird nicht akzeptiert :)

  • So, kurze Rückmeldung...
    Ich hab den zweiten Parameter von ftcInit komplett rausgenommen. Hab gemerkt, dass ich ihn nicht unbedingt übergeben muss, sondern erst im Unterprogrammm selber definieren kann. So funktioniert's nach Kaltstart.


    Danke nochmal und viele Grüsse!

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