Roboterforum Willkommen Gast. Bitte einloggen oder registrieren.
Haben Sie Ihre Aktivierungs E-Mail übersehen?
18. Mai 2012, 12:55:33
Übersicht Hilfe Suche Kalender Einloggen Registrieren
News: English and international Robotsupport now on Robot Forum. Also Supported by the Moderators of the roboterforum.de

Roboterforum für Industrieroboter Anwender  |  Industrieroboter Helpcenter  |  ABB Roboter (Moderatoren: burlibua, Sven Weyer, rmac)  |  Thema: UIListView 0 Mitglieder und 1 Gast betrachten dieses Thema. « vorheriges nächstes »
Seiten: [1] 2 Nach unten Drucken
Autor Thema: UIListView  (Gelesen 2512 mal)
der_iwan
Neuling
*
Offline Offline

Beiträge: 11


« am: 01. Oktober 2008, 12:45:03 »

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
Gespeichert
Robcheck01_MJ
Special Member
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 269



« Antworten #1 am: 01. Oktober 2008, 13:03:03 »

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...
Gespeichert

„Herr, lass mich ein guter Mensch sein. Aber bitte nicht sofort.“
der_iwan
Neuling
*
Offline Offline

Beiträge: 11


« Antworten #2 am: 01. Oktober 2008, 13:59:22 »

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
Gespeichert
Robcheck01_MJ
Special Member
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 269



« Antworten #3 am: 01. Oktober 2008, 14:16:51 »

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...
Gespeichert

„Herr, lass mich ein guter Mensch sein. Aber bitte nicht sofort.“
der_iwan
Neuling
*
Offline Offline

Beiträge: 11


« Antworten #4 am: 01. Oktober 2008, 14:38:57 »

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
Gespeichert
Robcheck01_MJ
Special Member
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 269



« Antworten #5 am: 01. Oktober 2008, 14:54:50 »

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.
Gespeichert

„Herr, lass mich ein guter Mensch sein. Aber bitte nicht sofort.“
der_iwan
Neuling
*
Offline Offline

Beiträge: 11


« Antworten #6 am: 01. Oktober 2008, 15:00:33 »

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
Gespeichert
Robcheck01_MJ
Special Member
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 269



« Antworten #7 am: 01. Oktober 2008, 15:19:55 »

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...
Gespeichert

„Herr, lass mich ein guter Mensch sein. Aber bitte nicht sofort.“
der_iwan
Neuling
*
Offline Offline

Beiträge: 11


« Antworten #8 am: 01. Oktober 2008, 15:40:26 »

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
Gespeichert
Robcheck01_MJ
Special Member
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 269



« Antworten #9 am: 01. Oktober 2008, 15:46:48 »

Hä?!?

Sicher das es diese Zeile ist?

Versuch nur mal Testweise.

IF Di_Menü=high THEN
nAntwort:=UIListView(Header:=stHeader,lDialogButtons:=btnOKIcon:=iconInfo);
ENDIF

Obwohl das eigentlich nicht anders ist!!

Hab ich schon mitbekommen das Du noch lernst! Mr. Green


Gespeichert

„Herr, lass mich ein guter Mensch sein. Aber bitte nicht sofort.“
der_iwan
Neuling
*
Offline Offline

Beiträge: 11


« Antworten #10 am: 01. Oktober 2008, 16:03:18 »

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
Gespeichert
Robcheck01_MJ
Special Member
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 269



« Antworten #11 am: 01. Oktober 2008, 16:52:19 »

Versuche es mal so.

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

Habe da ein paar Sachen vergessen gehabt.  waffen100

Gruss...


Gespeichert

„Herr, lass mich ein guter Mensch sein. Aber bitte nicht sofort.“
der_iwan
Neuling
*
Offline Offline

Beiträge: 11


« Antworten #12 am: 02. Oktober 2008, 08:01:27 »

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

Gespeichert
Robcheck01_MJ
Special Member
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 269



« Antworten #13 am: 02. Oktober 2008, 09:13:15 »

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...
Gespeichert

„Herr, lass mich ein guter Mensch sein. Aber bitte nicht sofort.“
Robcheck01_MJ
Special Member
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 269



« Antworten #14 am: 02. Oktober 2008, 09:35:14 »

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...
Gespeichert

„Herr, lass mich ein guter Mensch sein. Aber bitte nicht sofort.“
Seiten: [1] 2 Nach oben Drucken 
Roboterforum für Industrieroboter Anwender  |  Industrieroboter Helpcenter  |  ABB Roboter (Moderatoren: burlibua, Sven Weyer, rmac)  |  Thema: UIListView « vorheriges nächstes »
Gehe zu:  


Einloggen mit Benutzername, Passwort und Sitzungslänge

Powered by MySQL Powered by PHP Powered by SMF 1.1.16 | SMF © 2006, Simple Machines Prüfe XHTML 1.0 Prüfe CSS