KRC4 Hilfe bei Programmierung von Zählern

  • Hallo zusammen,


    Ich brauche dringend Hilfe, ich soll ein Palettierungsprogramm auf einem KUKA schreiben was eigentlich kein Problem darstellt, leider habe ich bisher nur mit Motoman bzw. Reis Robotern gearbeitet. Bin dann mit der KRC4 8.3 Dokumentation vom Roboter auch gut zurecht gekommen nur zwei Dinge die Grundlegend sind kriege ich einfach nicht gebacken und zwar wie kann ich auf die Zähler zugreifen die ich mir unter Anzeige/Variablen/Zähler anzeigen lassen kann? Ich habe mir mit dem Satz „INT ZAEHLER_1“ quasi selbst einen angelegt und wollte mit „ZAEHLER_1=+1“ aufaddieren am Schluss soll mit „IF ZAEHLER_1>2 THEN u-Prog1 ELSE u-Prog2 ENDIF“ in das jeweilige Programm gesprungen werden, das Modul zeigt so zwar keinen Fehler an aber das klappt nicht und deshalb springt er mir nicht ins richtige Unterprogramm... Die Doku liefert dazu nichts und ich werde deshalb verrückt!!! Was ist falsch bzw. Wie macht man es richtig? Das andere was nicht klappt ist die Offsetverschiebung ich möchte die Entnahme Position jedesmal 5mm in Z verschieben. Dies wollte ich so realisieren „PosX=PosX.Z -5“ funktioniert auch nicht... Hoffe mir kann jemand weiterhelfen

  • Schritt für Schritt zum Roboterprofi!
  • also zb


    Config.

    DECL INT ZAEHLER_1


    SRC.


    ;Zähler intitialisieren

    ZAEHLER_1 = 1



    Loop

    PTP.....

    PTP.....


    IF ZAEHLER_1 ==1 THEN

    UP1()

    ENDIF


    IF ZAEHLER_1 ==2 THEN

    UP2()

    ENDIF

    ZAEHLER_1 = ZAEHLER_1 +1


    Endloop


    Oder...


    IF ZAEHLER_1 ==1 THEN

    UP1()

    ELSE

    UP2()

    ENDIF

    ZAEHLER_1 = ZAEHLER_1 +1


    gibt viele Möglichkeiten...


    Unter Anzeige...variable...Zähler sind systemzähler!

    Das kannst du dann mit...

    I[1]=I[1]+1

    Machen gleiche Prozedur.




    PosX.Z = PosX.Z -5

    Sollte so funktionieren...


    Grüße

    Einmal editiert, zuletzt von woodys ()

  • Ist möglich. Werde aber jetzt sowieso nochmal alles auf die Systemzähler ändern.

    Werde dann Montag berichten ob es geklappt hat. Nur noch eins, inwiefern ist den groß und Kleinschreibung bzw. sind Leerzeichen relevant?

  • Das mit den Zählern hat wunderbar geklappt! Danke dafür!!!:thumbup: Jetzt habe ich nur noch das Problem mit dem Offset... Der Position habe ich im Inlineformular den Namen „Entnahmepos“ gegeben, in der Befehlszeile steht dann „Entnahmepos.z=Entnahmepos.z-5“ als Fehlermeldung kommt Variable nicht deklariert... Wo ist der Fehler?! Und wo gibt es da eine anständige Doku dazu? In der wo ich habe steht darüber absolut gar nichts :(

  • Programm läuft einwandfrei! Habe jetzt nur noch eine Frage der Interesse halber kann ich mehrere IF-Blöcke aneinander reihen im Stil von:

    IF Fach1 voll THEN Fach2

    IF Fach2 voll THEN Fach3

    .

    .

    .

    END IF

    ?

    Ich habe dazu für mein Programm schon eine Lösung gefunden ist aber nicht die Musterlösung ^^

  • IF Fach1 voll THEN

    Fach2()

    ENDIF

    IF Fach2 voll THEN

    Fach3()

    ENDIF


    Oder....


    IF Fach1 voll THEN

    Fach2()

    IF Fach2 voll THEN

    Fach3()

    ENDIF

    ENDIF


    Wenn Fach1 voll eine INT variable ist kannst das ganze vielleicht auch mit einer Switch Anwendung realisieren. Zb


    Switch Fach_voll

    Case10

    Fach1


    Case20

    Fach2

    .

    Case30

    Fach3

    .

    .


    Endswitch


    Grüße

  • @ KRCGreenhorn : Ist vermutlich nicht das, was Du wilst, denn es soll ja das erste nicht volle Fach gefahren werden, und nicht irgendein definiertes, wenn ein anderes definiertes voll ist. Bei der Reihenfolge von aufwärts von 1 - ... und Vorgang=Einlegen müsste man dann die Bedingungen erst ineinander verschachteln, und dann zusätzlich alles weitere ausschließen, also z. B.


    Wie man sieht, wird das ein entsetzlich unübersichtlicher Topf Spaghetti. Man stelle sich das mit 42 Fächern vor...

    Beim Rausnehmen/Abstapeln müsste man natürlich entsprechend anders agieren und dicht das folgende Fach fahren, sondern das aktuelle.


    Es sollte aber besser sein, man trennt die Abfrage und den Fahrbefehl voneinander, stellt erst fest, welches Fach jetzt eigentlich gefahren werden soll, behält diese Information und handelt dann danach. Dazu eignen sich besser Arrays und deren Indizes, die man kurzfristig speichert.


    Ohne Spaghetticode und ohne Indizes muss man sich eine Abkürzung einfallen lassen, die alles Unerwünschte übergeht. Recht effizient geht das, indem man diese Auswahl in eine eigene Routine packt, in der nichts weiter sonst passiert als die Verzweigung. Die "RETURN" machen dann die Übergehung, die verlassen einfach die Routine. Es gibt allerdings Leute, die diese Art des Aussprungverhaltens nicht leiden können.

    Über die Definition von "Fach voll" sollte man auch noch nachdenken. Wenn man was hineinlegen will, ist es meist besser, das Fach auf "ist sicher leer" zu prüfen. Bei Irrtümern in der Peripherie oder beim Zurücksetzen des Programms (wenn es sich um Variablen handelt) wird dann schlimmstenfalls angenommen, dass das Fach eben nicht leer ist, und übergangen. Beim Herausnehmen ist es natürlich andersrum.


    Grüße,

    Michael

  • woodys

    Danke für die Hilfe! Das Programm läuft und funktioniert:thumbup:

    Programmiersklave

    Du hast natürlich recht das ganze ist sehr unübersichtlich und auf jedenfall ein Topf Spaghetti...^^ Habe es jetzt aber mit zig IF-Blöcken Programmiert. So wie Du es beschrieben hast wäre es natürlich besser gewesen. Falls ich wieder mal in den Genuss komme so ein Programm schreiben zu dürfen werde ich diese Methode versuchen! Nochmal alles ändern werde ich nicht da das Ding schon 3-Schichtig läuft. Trotzdem Danke für die Tips!

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