Variablen Deklaration

  • Moin Moin,


    ich bin Student und zurzeit mit der Arbeit an meine Bachelor Thesis beschäftigt. Meine Aufgabe ist es, einen KUKA KR6 Roboter zu programmieren.
    Da ich das bei uns an der FH mache und niemand wirklich interesse zu haben scheint, dass der Roboter wieder funktionstüchtig wird, habe ich sogut wie keine Unterstützung. Ich muss mir anhand von Schulungsunterlagen meines Professors das selber beibringen, da dieser das meiste vergessen hat, was ja auch irgendwie den Reiz der Aufgabe aus macht :)

    Nun zu meiner eigentlichen Frage ;)
    Ich erstelle ein neues program auf der Anwender Ebene, wechsel anschließend in die Experten Ebene und bearbeite das Program dann. Ich deklariere die Variablen vor dem "INI"-Folder und schreibe nach dem INI das eigentliche Programm.
    Doch wenn ich das Program durch den Compiler schicke, teilt er mir mit, dass ich keine Laufzeitdaten im Hauptprogram benutzen darf. Dann habe ich hier gestöbert und die Variablen in der CONFIG.DAT deklariert, doch das hat keinen Unterschied gemacht. Die Hinweise der Fehlerhilfe haben mich auch nicht weitergebracht. Danke schonmal im Vorraus :)
    Tobias

    Einmal editiert, zuletzt von Hubrak ()

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


    die Config.dat ist nach der Veränderung ohne Fehler?
    Variablen in der Config.dat:
    Bool B_TEST=FALSE
    INT I_TEST=10
    Die Variablen sind danach im Programm verfügbar, dürfen im ini Teil nicht nocheinmal deklariert werden.

  • Wenn es trotz der Anmerkungen von Kuriosos nicht funktioniert, kannst du ja mal das Programm hier rein posten.

    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,


    hab vorher vergessen zu erwähnen dass die Variablen wenn sie nur lokal benötigt werden auch im entsprechnden Dat-File des Programms deklariert werden können. Vorgehensweise wie bei der Deklaration in der config.dat

  • &ACCESS RVEO
    &REL 75
    &PARAM TEMPLATE = C:\KRC\Roboter\Template\ExpertVorgabe
    &PARAM EDITMASK = *
    DEF Zylinder( )
    INIT


    ;-----Deklarationsteil
    DECL INT ZOK, ZGUT
    DECL REAL ZREFF, ZIST
    DECL CHAR TASTE
    POS PALETTE ;Abgabe Position
    POS MESS ;Messposition
    POS HOLEN ;Abholposition
    POS KISTE ;Ablage für schlechte Teile
    POS STARTE ;Startposition
    POS MESSP ;Endgültige Messposition


    ;-----Initialisierung
    ZOK = 0
    ZGUT = 0
    ZIST = 0
    ZREFF = 0
    $OUT[2] = FALSE; Grün aus
    $OUT[3] = FALSE; Gelb aus
    $OUT[4] = FALSE; Rot aus


    ;-----Programteil
    PTP STARTE
    ABHOLEN()
    MESSEN()
    ENTSCHEIDUNG()
    $OUT[2] = FALSE; Grün aus
    $OUT[3] = FALSE; Gelb aus
    $OUT[4] = FALSE; Rot aus
    END


    So sieht das Program aus. Die Unterprogramme sind entsprechend dadrunter, wollte nun nicht eine zu lange Textmauer einfügen.
    So wie ich hier die Variablen deklariert habe, habe ich sie auch in der Config.dat und in der Zylinder.dat deklariert. Beides brachte das gleiche Ergebnis :???:
    Und beide Dateien wiesen danach keinen Fehler auf beim speichern.

    Tobias

  • So sollte es eigentlich funktionieren.



    Den Deklarationsteil kannst du auch aus dem Programm rausnehmen und in die Config.dat schreiben.
    An welchem Steuerungstyp hast du den Roboter hängen?
    Und was bedeutet dieses INIT am Programmanfang?

    Gruß Roland


    Wie poste ich falsch?

    Nachdem ich die Suche und die FAQ erfolgreich ignoriert habe, erstelle ich das gleiche Thema in mehreren Unterforen, benutze einen sehr kreativen Titel wie "Hilfe", am Besten noch mit mehreren Ausrufezeichen, und veröffentliche einen so eindeutigen Text, dass sich jeder etwas Anderes darunter vorstellt.


    Ich bin wie ich bin. Die Einen kennen mich, die Anderen können mich.

    Konrad Adenauer

  • Das INIT ist ein Folder, der automatisch erstellt wird, wenn man das Programm in der Anwender Ebene erstellt. Dadrin befinden sich weitere Folder in denen die Grundlegenden Einstellungen initialisiert werden sollen. Das war alles was mir mein Professor dazu berichten konnte... Ich habe vorher nur mit Karel programmiert und bin auch noch nicht ganz dahinter gestiegen, wozu ich das alles immer wieder initialisieren muss.


    Die Steuerungssoftware ist laut Info KR C1 V3.3

  • Es gibt keine doofen Fragen in diesem Falle, weil ich sicherlich mehrere anfängerfehler gemacht habe :)


    Also ich habe im R1 Ordner, wo auch meine Programme liegen nur eine Config Datei und in die habe ich das eingefügt. Sollte noch in einem Unterordner eine Config Datei liegen?

  • Hi,
    deklarieren direkt unter der DEF Zeile, solltest auch alle initialisieren in der dekla!!!

  • R1 ist richtig.


    Muss in die KRC\R1\System und nicht in die KRC\Steu.


    dann muss es wohl woanders dran liegen..


    Schreib mal in deine Config.dat:


    USER GLOBALS
    ;==================================
    ; Userdefined Types
    ;==================================
    ;==================================
    ; Userdefined Externals
    ;==================================
    ;==================================
    ; Userdefined Variables
    ;
    INT Offset_X=100




    Wird dann ein Fehler angezeigt,kannst drauf zugreifen über Anzeige--> Variable??

  • Die Deklarationen liegen nicht wie ursprünglich beschrieben vor dem INI-Folder. Sondern dahinter. Das geht schon mal gar nicht. Das sollte zuerst beseitigt werden und dann mal weiter sehen.

    Greetings, Irrer Polterer!

    Wie poste ich falsch? Nachdem ich die Suche und die FAQ erfolgreich ignoriert habe, erstelle ich das gleiche Thema in mehreren Unterforen, benutze einen sehr kreativen Titel wie "Hilfe", am Besten noch mit mehreren Ausrufezeichen, und veröffentliche einen so eindeutigen Text, dass sich jeder etwas Anderes darunter vorstellt.


    Life is a beta version. Full of bugs and no Manual.

  • Ich habe "INT Offset_X=100" In beide Config.dat Dateien eingefügt (einmal in R1\Config.dat und einmal in R1\System\Config.dat


    Beide haben keinen Fehler ausgespuckt. Wenn ich über Anzeige mir die Variablen anzeigen lassen will, zeigt er mir aber nur 2 Textvariablen.. Muss auch gestehen, dass ich die Funktion mit Anzeige/Variablen zum ersten mal betrachtet habe


    @titan72 
    Ich habe die DECL´s schon an so ziemlich jede Stelle im Quelltext verschoben, aber die Fehler bleiben gleich


    @Irrer Polterer
    Ja, da habe ich mist gebaut, so sieht es momentan aus:


    &ACCESS RVEO
    &REL 51
    &PARAM TEMPLATE = C:\KRC\Roboter\Template\vorgabe
    &PARAM EDITMASK = *
    DEF Testo( )
    DECL INT ZOK = 0
    DECL INT ZGUT = 0
    DECL REAL ZREFF = 0
    DECL REAL ZMESS = 0
    DECL CHAR TASTE
    POS STARTE
    POS MESS
    POS KISTE
    POS PALETTE
    POS HOL



    $OUT[2] = False
    $OUT[3] = False
    $OUT[4] = False
    ;--------
    ;FOLD INI;%{PE}%V3.2.0,%MKUKATPBASIS,%CINIT,%VCOMMON,%P
    ;FOLD BAS INI;%{E}%V3.2.0,%MKUKATPBASIS,%CINIT,%VINIT,%P
    GLOBAL INTERRUPT DECL 3 WHEN $STOPMESS==TRUE DO IR_STOPM ( )
    INTERRUPT ON 3
    BAS (#INITMOV,0 )
    ;ENDFOLD (BAS INI)
    ;FOLD A20 INI;%{E}%V3.2.0,%MKUKATPA20,%CINIT,%VINIT,%P
    IF ARC20==TRUE THEN
    A20 (ARC_INI)
    INTERRUPT DECL 6 WHEN $CYCFLAG[3]==FALSE DO A20(TECH_STOP2)
    ENDIF
    ;ENDFOLD (A20 INI)
    ;FOLD A10 INI;%{E}%V3.2.0,%MKUKATPARC,%CINIT,%VINIT,%P
    IF A10_OPTION==#ACTIVE THEN
    INTERRUPT DECL 4 WHEN $CYCFLAG[2]==FALSE DO A10 (#APPL_ERROR)
    INTERRUPT DECL 7 WHEN A_ARC_SWI==#ACTIVE DO A10 (#ARC_SEAM)
    INTERRUPT DECL 5 WHEN A_FLY_ARC==TRUE DO A10 (#HPU_ARC)
    INTERRUPT ON 5
    A10_INI ( )
    ENDIF
    ;ENDFOLD (A10 INI)
    ;FOLD GRIPPER INI;%{E}%V3.2.0,%MKUKATPGRIPPER,%CINIT,%VINIT,%P
    USER_GRP(0,DUMMY,DUMMY,GDEFAULT)
    ;ENDFOLD (GRIPPER INI)
    ;FOLD SPOT INI;%{E}%V3.2.0,%MKUKATPSPOT,%CINIT,%VINIT,%P
    USERSPOT(#INIT)
    ;ENDFOLD (SPOT INI)
    ;FOLD TOUCHSENSE INI;%{E}%V3.2.0,%MKUKATPTS,%CINIT,%VINIT,%P
    IF H70_OPTION THEN
    INTERRUPT DECL 15 WHEN $MEAS_PULSE[TOUCH_I[TOUCH_ACTIVE].IN_NR] DO H70 (6,CD0 )
    INTERRUPT DECL 16 WHEN $ZERO_MOVE DO H70 (7,CD0 )
    INTERRUPT DECL 17 WHEN $TECHPAR_C[FG_TOUCH,8]>0.5 DO H70 (8,CD0)
    H70 (1,CD0 )
    ENDIF
    ;ENDFOLD (TOUCHSENSE INI)
    ;FOLD USER INI;%{E}%V3.2.0,%MKUKATPUSER,%CINIT,%VINIT,%P
    ;Make your modifications here
    ;ENDFOLD (USER INI)
    ;ENDFOLD (INI)


    ;FOLD PTP HOME Vel= 100 % DEFAULT;%{PE}%V3.2.0,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:HOME, 3:, 5:100, 7:DEFAULT
    $BWDSTART = FALSE
    $H_POS=XHOME
    PDAT_ACT=PDEFAULT
    BAS (#PTP_DAT )
    FDAT_ACT=FHOME
    BAS (#FRAMES )
    BAS (#VEL_PTP,100 )
    PTP XHOME
    ;ENDFOLD
    PTP STARTE
    ABHOLEN( )
    MESSEN( )
    ENTSCHEIDUNG( )
    END

    Einmal editiert, zuletzt von Hubrak ()

  • Immer schön Step by Step. Alles Andere verwirrt zu sehr.


    Generell gilt bei Deklarationen im src.file:


    Die Deklaration der Variablen muss vor der ini gemacht werden.
    In deinem Beispiel kommt sie danach.
    Darum klappt das auch nicht.
    Schau dir bitte das von mir geänderte Programm an.
    Und achte darauf, daß du nicht doppelt (im src und in der config.dat) deklarierst. In deinem Fall und in meinem Beispiel sollte in der config.dat nichts gemacht werden.


    Lass die Initialisierung deiner Variablen mal so stehen wie du es gemacht hast.
    Das kann dann zwar noch verfeinert oder vereinfacht werden ist aber im Moment nicht wichtig.
    Wenn dein Programm dann läuft sehen wir weiter.

    Gruß Roland


    Wie poste ich falsch?

    Nachdem ich die Suche und die FAQ erfolgreich ignoriert habe, erstelle ich das gleiche Thema in mehreren Unterforen, benutze einen sehr kreativen Titel wie "Hilfe", am Besten noch mit mehreren Ausrufezeichen, und veröffentliche einen so eindeutigen Text, dass sich jeder etwas Anderes darunter vorstellt.


    Ich bin wie ich bin. Die Einen kennen mich, die Anderen können mich.

    Konrad Adenauer

  • So, nachdem ich nach dem Try & Error Verfahren nun die Variablen im R1\Syste\Config.dat deklariert habe, nimmt er sie schonmal an und ich kann sie verwenden :)


    Nun habe ich leider 2 weitere Fragen, die ich nicht gelöst bekomme mit der Suchfunktion.
    1. Kennt die KUKA Steuerung den Befehl Modulus, also aus einer division zweier variablen den Rest raus zu finden? z.B. habe ich geschrieben I = 5 MOD 3, dann sollte als Ergebnis 2 rauskommen.


    2. Gibt er mir nun als Fehler aus, dass meine IF-Schleifen falsch beendet werden. Ich habe es 5 mal durchgeguckt, aber keinen Fehler gefunden. Dieses Unterprogram z.B. liefert mir 3 Fehler:


    DEF ENTSCHEIDUNG( )
    IF ABS(ZREFF-ZMESS) <= 1,5 THEN
    $OV_PRO = 30
    $OUT[2] = TRUE
    ;PTP PALETTE
    LIN_REL {POS: X (50 * (ZGUT MOD 3)), Y (-50 * (ZGUT DIV 3)))}
    LIN_REL {POS: Z -40}
    ;Greifer öffnen
    LIN_REL {POS: Z 40}
    ZGUT = ZGUT + 1
    ELSE
    IF ZREFF < ZMESS THEN
    $OUT[3] = TRUE
    ;PTP PALETTE
    $OV_PRO = 30
    LIN_REL {POS: Y -140}
    LIN_REL {POS: X (50 * (ZOK MOD 3)), Y (-50 * (ZOK DIV 3)))}
    LIN_REL {POS: Z -40}
    ;Greifer öffnen
    LIN_REL {POS: Z 40}
    ZOK = ZOK + 1
    ELSE
    $OUT[4] = TRUE
    ;PTP KISTE
    ;Greifer öffnen
    ENDIF
    ENDIF
    $OV_PRO = 100
    ;PTP START
    IF ZOK OR ZGUT == 6 THEN
    HALT
    ;Fehler ausgeben "Pallette wechseln"
    ;REPEAT
    ;READ(TASTE)
    ;UNTIL TASTE == W
    ENDIF
    END


    Danke schonmal im vorraus

  • Hallo,


    Modulo kennt die KUKA Software leider nicht, Aber du kannst Dir die Funktion ja selbst erstellen.
    Was für Fehler liefert Dir denn Dein Unterprogramm?

  • Puh Funktionen selber erstellen schiebe ich lieber erstmal nach hinten und versuche die anfänger Fehler zu finden, aber danke für die schnelle Antwort :)


    Zu den Fehlern.
    IF ZOK OR ZGUT == 6 THEN -------> Operantentypen sind nicht vergleichbar (ZOK und ZGUT sind Integer)
    IF ABS(ZREFF-ZMESS) <= 1,5 THEN ---------> "THEN" erwartet.... mein persöhnlicher Favorit
    Und dann sagt er mir noch 3 mal falsches Kontrollstrukturende bei dem ersten ELSE, dem letzten ENDIF und beim 2. ENDIF
    Sonst halt nur der Fehler bei der Modulus Rechnung, aber das hat sich ja ergeben :P


  • IF ZOK OR ZGUT == 6 THEN -------> Operantentypen sind nicht vergleichbar (ZOK und ZGUT sind Integer)


    Welche Logik ist denn beabsichtigt?
    Der Zahlenwert ZOK ist 6 oder der Zahlenwert ZGUT ist 6 ==> dann 'IF (ZOK==6) OR (ZGUT==6) THEN'
    Die Summe der Zahlenwerte ist 6 ==> dann 'IF (ZOK+ZGUT)==6 THEN'



    IF ABS(ZREFF-ZMESS) <= 1,5 THEN ---------> "THEN" erwartet.... mein persöhnlicher Favorit


    Der Nackommaanteil wird bei Programmiersprachen immer mit dem Punkt '.' getrennt, als '1.5' stat '1,5',
    'Falsches Kontrollstrukturende etc.' werden dann Folgefehler sein.

  • Vielen Dank :)
    Beides geklappt und alle Fehler behoben. Das mit dem Punkt hatte ich schonmal getestet, aber nur auf die Summe der Fehler geachtet und die blieb gleich, weil dadurch wohl irgendwo anders ein Fehler entstanden ist, aber nun gehts es :)

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