UIListView

  • Hallo und guten Tag
    Ich habe seit einer Woche einen IRB 140 hier stehen.
    Klappt eigentlich ganz gut aber:
    Ich habe da mal eine Frage zu UIlistView
    Unser IRB140 wird zirka 10 verschiedene Werkzeuge entformen müssen.
    Darum wollte ich mich UIListView ein Menü erscheinen lassen, wo alle Werkzeuge aufgelistet sind.
    Das Menü soll aber nur erscheinen, wenn ein DI gesetzt ist.Sonst soll immer die letzte gewählte Procedur
    ablaufen.
    In der Rapidhilfe habe ich folgendes Beispiel gefunden:

    CONST listitem list{3} := [ ["","Item 1"], ["","Item 2"], ["","Item 3"] ];
    VAR num list_item;
    VAR btnres button_answer;
    ...
    list_item := UIListView (
    \Result:=button_answer
    \Header:="UIListView Header",
    list
    \Buttons:=btnOKCancel
    \Icon:=iconInfo
    \DefaultIndex:=1);
    IF button_answer = resOK
    IF list_item =1 THEN
    ! Do item1
    ELSEIF list_item = 2 THEN
    ! Do item 2
    ELSE
    ! Do item3
    ENDIF
    ELSE
    ! User has select Cancel
    ENDIF
    wenn ich das in mein Programm als Procedur einfüge erhalte ich Fehlermeldungen.
    Wie müsste die procedur aussehen, damit es so funktioniert, wie es oben beschrieben ist.


    der_iwan

  • ANZEIGE
  • VAR num nAntwort;
    LOCAL CONST string stHeader:="Wählen Sie ein Menü aus.";
    LOCAL CONST listitem lDialog{7}:=[["","1:Hier 1.te Auswahl rein"],["","2:Hier 2.te Auswahl rein"],["","3:Hier 3.te Auswahl rein"],["","4:Hier 4.te Auswahl rein"],["","5:Hier 5.te Auswahl rein"],["","6:Hier 6.te Auswahl rein"],["","7:Menü beenden"]];



    PROC rMenü()


    IF Di_Menü=low Return; ! beenden wenn dein Signal DI nicht vorhanden


    nAntwort:=UIListView(\Header:=stHeader,lDialog\Buttons:=btnOK\Icon:=iconInfo);


    TEST nAntwort
    CASE 1: !Menü Werkzeug 1
    CASE 2: !Menü Werkzeug 2
    CASE 3: !Menü Werkzeug 3
    CASE 4: !Menü Werkzeug 4
    CASE 5: !Menü Werkzeug 5
    CASE 6: !Menü Werkzeug 6
    CASE 7: Return;
    DEFAULT:
    ENDTEST


    ENDPROC


    Nur mal so als Ansatz. Möglichkeiten gibt es noch etliche. Den Rest solltest Du ja alleine hinbekommen.


    Gruss...

  • Hallo und vielen Dank für deine schnelle Reaktion


    Ich habe dein Programm gleich in die Steuerung eingefügt aber...
    dann passiert folgendes:
    MODULE Main_Module
    CONST robtarget Home:=[[428.28,-219.61,627.60...
    CONST robtarget vor_1:=[[537.38,-455.82,556.42...
    CONST robtarget zurueck_1:=[[-73.79,681.75,539...
    CONST robtarget vor_2:=[[529.25,-339.72,326.17...
    CONST robtarget vor_3:=[[505.94,-200.12,38.82...


    proc main()!
    rMenü;
    ENDPROC

    VAR num nAntwort;
    LOCAL CONST string stHeader:="Wähle das Werkzeug aus";
    LOCAL CONST listitem lDialog{7}:=[["","BL 100"],["","2:Hier 2.te Auswahl rein"],["","3:Hier 3.te Auswahl rein"],["","4:Hier 4.te Auswahl rein"],["","5:Hier 5.te Auswahl rein"],["","6:Hier 6.te Auswahl rein"],["","7:Menü beenden"]];



    PROC rMenü()


    IF Di_Menü=low Return; ! beenden wenn dein Signal DI nicht vorhanden


    nAntwort:=UIListView(\Header:=stHeader,lDialog\Buttons:=btnOK\Icon:=iconInfo);


    TEST nAntwort
    CASE 1: BL100;
    CASE 2: !Menü Werkzeug 2
    CASE 3: !Menü Werkzeug 3
    CASE 4: !Menü Werkzeug 4
    CASE 5: !Menü Werkzeug 5
    CASE 6: !Menü Werkzeug 6
    CASE 7: Return;
    DEFAULT:
    ENDTEST


    ENDPROC

    proc BL100()
    !Hier stehen Fahrdaten für das BL100

    MoveJ Home, v1000, fine, tool0;
    MoveJ vor_1, v1000, fine, tool0;
    MoveJ zurueck_1, v1000, fine, tool0;
    MoveJ vor_2, v1000, fine, tool0;
    MoveJ zurueck_1, v1000, fine, tool0;
    MoveJ vor_3, v1000, fine, tool0;
    MoveJ zurueck_1, v1000, fine, tool0;
    MoveJ Home, v1000, fine, tool0;
    ENDPROC
    ENDMODULE
    Dann erhalte ich folgende Fehlermeldungen:


    150 13:46:07 Programm wurde geändert.
    151 13:46:08 BL_Vakuum/T_ROB1/Main_Module (76) : Fehler 40137 : Syntaxfehler : Erwartet: 'trap', aber gefunden: 'var'
    152 13:46:08 BL_Vakuum/T_ROB1/Main_Module (77) : Fehler 40135 : Syntaxfehler : Erwartet: 'endtrap'
    153 13:46:08 BL_Vakuum/T_ROB1/Main_Module (77) : Fehler 40137 : Syntaxfehler : Erwartet: 'trap', aber gefunden: 'const'
    154 13:46:08 BL_Vakuum/T_ROB1/Main_Module (78) : Fehler 40135 : Syntaxfehler : Erwartet: 'endtrap'
    155 13:46:08 BL_Vakuum/T_ROB1/Main_Module (78) : Fehler 40137 : Syntaxfehler : Erwartet: 'trap', aber gefunden: 'const'
    156 13:46:08 BL_Vakuum/T_ROB1/Main_Module (81) : Fehler 40135 : Syntaxfehler : Erwartet: 'endtrap'
    157 13:49:35 Programm wurde geändert.
    158 13:49:36 BL_Vakuum/T_ROB1/Main_Module (31) : Fehler 40137 : Syntaxfehler : Erwartet: 'trap', aber gefunden: 'var'
    159 13:49:36 BL_Vakuum/T_ROB1/Main_Module (32) : Fehler 40135 : Syntaxfehler : Erwartet: 'endtrap'
    160 13:49:36 BL_Vakuum/T_ROB1/Main_Module (32) : Fehler 40137 : Syntaxfehler : Erwartet: 'trap', aber gefunden: 'const'
    161 13:49:36 BL_Vakuum/T_ROB1/Main_Module (33) : Fehler 40135 : Syntaxfehler : Erwartet: 'endtrap'
    162 13:49:36 BL_Vakuum/T_ROB1/Main_Module (33) : Fehler 40137 : Syntaxfehler : Erwartet: 'trap', aber gefunden: 'const'
    163 13:49:37 BL_Vakuum/T_ROB1/Main_Module (36) : Fehler 40135 : Syntaxfehler : Erwartet: 'endtrap'


    was mache ich da verkehrt.
    P.S. Ich bin auf diesem Gebiet blutiger Anfänger


    der_iwan

  • MODULE Main_Module


    CONST robtarget Home:=[[428.28,-219.61,627.60...
    CONST robtarget vor_1:=[[537.38,-455.82,556.42...
    CONST robtarget zurueck_1:=[[-73.79,681.75,539...
    CONST robtarget vor_2:=[[529.25,-339.72,326.17...
    CONST robtarget vor_3:=[[505.94,-200.12,38.82...

    VAR num nAntwort;
    LOCAL CONST string stHeader:="Wähle das Werkzeug aus";
    LOCAL CONST listitem lDialog{7}:=[["","BL 100"],["","2:Hier 2.te Auswahl rein"],["","3:Hier 3.te Auswahl rein"],["","4:Hier 4.te Auswahl rein"],["","5:Hier 5.te Auswahl rein"],["","6:Hier 6.te Auswahl rein"],["","7:Menü beenden"]];


    proc main()!
    rMenü;
    ENDPROC



    PROC rMenü()


    IF Di_Menü=low Return; ! beenden wenn dein Signal DI nicht vorhanden


    nAntwort:=UIListView(\Header:=stHeader,lDialog\Buttons:=btnOK\Icon:=iconInfo);


    TEST nAntwort
    CASE 1: BL100;
    CASE 2: !Menü Werkzeug 2
    CASE 3: !Menü Werkzeug 3
    CASE 4: !Menü Werkzeug 4
    CASE 5: !Menü Werkzeug 5
    CASE 6: !Menü Werkzeug 6
    CASE 7: Return;
    DEFAULT:
    ENDTEST


    ENDPROC

    PROC BL100()
    !Hier stehen Fahrdaten für das BL100

    MoveJ Home, v1000, fine, tool0;
    MoveJ vor_1, v1000, fine, tool0;
    MoveJ zurueck_1, v1000, fine, tool0;
    MoveJ vor_2, v1000, fine, tool0;
    MoveJ zurueck_1, v1000, fine, tool0;
    MoveJ vor_3, v1000, fine, tool0;
    MoveJ zurueck_1, v1000, fine, tool0;
    MoveJ Home, v1000, fine, tool0;
    ENDPROC
    ENDMODULE


    Dann erhalte ich folgende Fehlermeldungen:


    150 13:46:07 Programm wurde geändert.
    151 13:46:08 BL_Vakuum/T_ROB1/Main_Module (76) : Fehler 40137 : Syntaxfehler : Erwartet: 'trap', aber gefunden: 'var'
    152 13:46:08 BL_Vakuum/T_ROB1/Main_Module (77) : Fehler 40135 : Syntaxfehler : Erwartet: 'endtrap'


    Diese Fehler wie man sieht deuten auf Interrupts hin die falsch deklariert wurden. Fängt wie man ja auch sieht in der Zeile 76 an. Also mal in diese Zeilen schauen. Hat also normalerweise nix mit dem Menü zu tun. Solltest aber auch das main unter deine Deklaritionen hängen wie oben zu sehen.


    Gruss...

  • Hallo Robcheck01
    Jetzt funktioniert es wunderbar, aber:
    Ich muss jetzt nach jedem Startimpuls wieder mein Werkzeug anwählen.
    Möchte aber wenn mein DI low ist, das er das bisher angewählte Werkzeug anfährt
    Wie kann das programm es sich merken, welche Procedure vorher angewählt war.



    Beispiel: Ich habe Werkzeug1 angewählt.Der Robbi soll jetzt solange nach Startimpuls
    Werkzeug1 anfahren bis ein DI kommt und auf dem Panel mein Menü erscheint.
    Jetzt wähle ich Werkzeug2 aus.
    Dann soll er wieder Werkzeug2 solange anfahren bis ...


    Vielen Dank für deine Geduld


    der_iwan

  • Meinst Du das aktive Tool für das verfahren?


    Dann zB. so.


    PERS tooldata akttool:=[trUE,[[0,0,300],[1,0,0,0]],[50,[0,0,250],[1,0,0,0],7.622,6.872,0]];


    akttool:=CTool(); ! Einlesen des aktuellen Tools das gerade aktiv ist


    akttool könntest Du dann in deinem Menü immer mit deinem neuen Tool zuweisen zb. tool2,tool3 etc. Du müsstest dann deine Fahrbefehle aber immer mit akttoll fahren.


    zB. MoveJ pHome,v3000,z200,akttool;


    Schau aber nochmals in der Doku nach ob es das richtige für dich ist oder sag falls Du etwas anderes meinst.

  • Also ich meine das so
    Wenn ich einmal den Menüpunkt 1 angewählt habe,soll das Programm solange bei Start immer in die Procedure Menüpunkt1 springen,
    bis mein Di_Menü high wird und ich mir z.b. Menüpunkt2 anwähle.
    Jetzt soll wieder bei jedem Startimpuls zum Menüpunkt2 gesprungen werden, bis ich wieder neu wähle


    der_iwan

  • Dann ungefähr so.


    PROC rMenü()
    VAR BOOL bExit:=FALSE;
    IF Di_Menü=low Return; ! beenden wenn dein Signal DI nicht vorhanden

    WHILE (NOT bExit) DO
    IF Di_Menü=high nAntwort:=UIListView(Header:=stHeader,lDialogButtons:=btnOKIcon:=iconInfo);
    TEST nAntwort
    CASE 1: BL100;
    CASE 2: !Menü Werkzeug 2
    CASE 3: !Menü Werkzeug 3
    CASE 4: !Menü Werkzeug 4
    CASE 5: !Menü Werkzeug 5
    CASE 6: !Menü Werkzeug 6
    CASE 7: bExit:=TRUE;
    DEFAULT:
    ENDTEST
    ENDWHILE
    ENDPROC


    Gruss...

  • so, einmal noch für Heute
    Ich habe dein "Programm eingefügt.


    Jetzt meldet er mir beim Übernehmen:
    21: Erwartet 'and'aber vorgefunden '='
    21 ist: IF Di_Menü=high nAntwort:=UIListView(Header:=stHeader,lDialogButtons:=btnOKIcon:=iconInfo);


    Danke für deine Mühe, aber ich lerne noch


    der_iwan

  • Ich doch nochmal
    Sicher bin ich mir das das die Zeile ist, weil im Robotstudio mir ja die
    Zeilennummer angezeigt wird.
    Ausserdem: Wenn ich auf bearbeiten gehen und den Fehler doppelklicke
    springt der Cursor ja eine Zeile über die Fehlerzeile.
    Ein wenig habe ich schon gelernt.


    Übrigens: Der Meldung kommt immer noch


    der_iwan

  • Hallo, guten Morgen
    Habe deine letzte Änderung eingegeben, jetzt funktioniert es Syntaxtechnisch.
    Anbei der jetzige Stand:
    VAR num nAntwort;
    LOCAL CONST string stHeader:="Wähle das Werkzeug aus";
    LOCAL CONST listitem lDialog{7}:=[["","BL 100"],["","2:Hier 2.te Auswahl rein"],["","3:Hier 3.te Auswahl rein"],["","4:Hier 4.te Auswahl rein"],["","5:Hier 5.te Auswahl rein"],["","6:Hier 6.te Auswahl rein"],["","7:Menü beenden"]];


    proc main()!
    rMenü;
    ENDPROC
    PROC rMenü()
    VAR BOOL bExit:=FALSE;
    IF freigabe=low Return; ! beenden wenn dein Signal DI nicht vorhanden
    WHILE (NOT bExit) DO

    if freigabe=High nAntwort:=UIListView(\Header:=stHeader,lDialog\Buttons:=btnOK\Icon:=iconInfo);

    TEST nAntwort

    CASE 1: IF nAntwort=1 BL100;
    ! CASE 2: IF nAntwort=2 !Menü Werkzeug 2
    ! CASE 3: IF nAntwort=3 !Menü Werkzeug 3
    ! CASE 4: IF nAntwort=4 !Menü Werkzeug 4
    ! CASE 5: IF nAntwort=5 !Menü Werkzeug 5
    ! CASE 6: IF nAntwort=6 !Menü Werkzeug 6
    CASE 7: bExit:=TRUE;
    DEFAULT:
    ENDTEST
    ENDWHILE
    ENDPROC
    Das Problem ist jetzt aber:
    Wenn Freigabe auf low ist,sollte das Programm ja zum letzten ausgewählten Artikel springen.
    Tut es aber nicht, es passiert gar nichts.
    Wenn Freigabe auf High ist,erscheint mein Auswahlmenü.Wenn ich jetzt Punkt1 anwähle fährt
    der Roboter im Einrichtbetrieb aber kontinurierlich, nicht nur einmal.
    Obwohl es im auf Einmal eingestellt ist.
    Ist mein Wunsch realisierbar?


    der_iwan

  • Sicher macht er das kontinurierlich wolltest Du ja auch so. Er machz es so lange bis Du freigabe=high bekommst und dann die Menüabfrage kommt. Es ist auch machbar, aber ,mal ehrlich ein wenig solltest Du dir auch den Kopf zerbrechen und nicht hier alles machen lassen. Dafür sind wir hier nicht da. Also erstmal selber Gedanken machen und wenn dann Fragen aufkommen, dann Fragen.


    Gruss...

  • Vesuch es mal so.


    PROC rMenü()
    IF freigabe=High nAntwort:=UIListView(\Header:=stHeader,lDialog\Buttons:=btnOK\Icon:=iconInfo);
    TEST nAntwort
    CASE 1: BL100;
    CASE 2: !Menü Werkzeug 2
    CASE 3: !Menü Werkzeug 3
    CASE 4: !Menü Werkzeug 4
    CASE 5: !Menü Werkzeug 5
    CASE 6: !Menü Werkzeug 6
    CASE 7: Return;
    DEFAULT:
    ENDTEST
    ENDPROC


    Jetzt macht er es nur einmal bis dein Siognal wieder kommt. Den Rest solltest Du alleine hinbekommen.


    Gruss...

  • Danke, hat alles wunderbar geklappt.
    Als ich es endlich mit der Hilfe fertig hatte,kam von "oben" die Order.
    Über ein Eingangsbyte wird eine Werkzeugnummer vorgegeben.
    Mit den Ansätzen von hier habe das locker hinbekommen.


    Danke


    der_iwan

Hilfe und Support für ABB Roboter Programmierung, Konfiguration, Inbetriebnahme finden Sie hier im ABB Roboter Forum. ABB Rapid Programmierung ist einfach, die Roboterforum Community hilft sehr gerne.

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