Nö.
Wie schon gesagt jedem das seine.
In diesem Sinne bis dann...
Nö.
Wie schon gesagt jedem das seine.
In diesem Sinne bis dann...
Kein Thema.
Liess dich erstmal durch und wenn Du dann Fragen hast,stehen wir gerne zur Verfügung.
Grüße...
Also die Werkobjektberechnung ist die gleiche wie schon vorher beschrieben.
hier mal für den Userpart.
WobjCar.uframe:=DefFrame(p_X1,p_X2,p_Y\Origin:=1);
das gleiche geht dann natürlich auch wie schon von Stromer gesagt für den Objectpart. (OFrame)
WobjCar.oframe:=DefFrame(p_X1,p_X2,p_Y\Origin:=1);
Normalerweise hat man dann aber auch immer ein Masterwerkobjekt. Was durch Kameras,Taster etc ermittelt wurde und das andere wird dann nur noch draufgeschoben.
Gibt noch so eine nette Funktion "PoseMult" für das Multiplizieren von Koordinatenverschiebungen.
Kannst Du dir ja auch mal in der Doku anschauen.
Grüße...
Hallo Alex666.
Klar kannst Du dir das Wobj mittels 3 Punkten ermitteln. Geht manuell über das Bewegungsmenü oder über das Datentypmenü. Man kann sich aber auch ein kleines Prog für schreiben was das erledigt. Muß halt einmal geteacht werden. Vorteil hierbei ist es ist später auch noch nachvollziehbar.
Ist ganz easy also hier mal ein Bsp.
PROC MessWobjTisch()
!
MoveJ RelTool(pTisch_X1,0,0,-100\Rx:=0\Ry:=0\Rz:=0),v500,z1,R1_tLance;
MoveL RelTool(pTisch_X1,0,0,-50\Rx:=0\Ry:=0\Rz:=0),v400,z1,R1_tLance;
MoveL pTisch_X1,v50,fine,R1_tLance;
Stop;
MoveL RelTool(pTisch_X1,0,0,-50\Rx:=0\Ry:=0\Rz:=0),v400,z1,R1_tLance;
MoveJ RelTool(pTisch_X1,0,0,-200\Rx:=0\Ry:=0\Rz:=0),v500,z1,R1_tLance;
MoveJ RelTool(pTisch_X2,0,0,-200\Rx:=0\Ry:=0\Rz:=0),v500,z1,R1_tLance;
MoveL RelTool(pTisch_X2,0,0,-50\Rx:=0\Ry:=0\Rz:=0),v400,z1,R1_tLance;
MoveL pTisch_X2,v50,fine,R1_tLance;
Stop;
MoveL RelTool(pTisch_X2,0,0,-50\Rx:=0\Ry:=0\Rz:=0),v400,z1,R1_tLance;
MoveL RelTool(pTisch_X2,0,0,-200\Rx:=0\Ry:=0\Rz:=0),v500,z1,R1_tLance;
MoveJ RelTool(pTisch_Y,0,0,-200\Rx:=0\Ry:=0\Rz:=0),v500,z1,R1_tLance;
MoveJ RelTool(pTisch_Y,0,0,-50\Rx:=0\Ry:=0\Rz:=0),v400,z1,R1_tLance;
MoveL pTisch_Y,v50,fine,R1_tLance;
Stop;
MoveL RelTool(pTisch_Y,0,0,-50\Rx:=0\Ry:=0\Rz:=0),v400,z1,R1_tLance;
MoveJ RelTool(pTisch_Y,0,0,-300\Rx:=0\Ry:=0\Rz:=0),v500,z1,R1_tLance;
WobjTisch.uframe:=DefFrame(pTisch_X1,pTisch_X2,pTisch_Y\Origin:=1);
WobjTisch.oframe:=[[0,0,0],[1,0,0,0]];
!
Return;
ENDPROC
Dann bräuchtest Du nur noch deine Moves auf das Werkobjekt WobjTisch beziehen.
Hoffe Du meintest das auch, wenn nicht gib einfach nochmal bescheid.
Gruß...
Gern geschehen.
Grüße und ein schönes WE...
Ach, da war es wieder, mein Lieblingsthema beim Programmieren! Es fasziniert mich immer wieder, mit welcher Verbissenheit an Dogmen festgehalten wird, ohne den Sinn zu hinterfragen!
Es zeugt immer von guter Programmierung, einen Code so einfach und überschaubar wie möglich zu halten! Wenn dabei ein GOTO Sinn macht, macht er halt Sinn!
Na ja jedem das seine und manche Sachen muß man ja auch nicht kommentieren!!
Mußt nur die Softwäreendschalter ändern.
Am besten direkt über die Variablenübersicht.
$SOFTN_END[X] = negativ
$SOFTP_END[X] = positiv
Für X die Achse eingeben.
Gruß...
Hallo $CYCFLAG,
also ich kenne niemanden und wer an seinem Job hängt der lässt das bestimmt auch sein!
Dieses Programm fällt wohl eher unter die Rubrik "Spass". Meiner Meinung nach.
In diesem Sinne...
Gruß...
Würde ich auch mit CrossConnection lösen.
Hier mal ein paar Bsp. für die S4 Klasse.
Mit UND Operator:
-Lact "E201 & E203 & E205" -Lres "viGr1Open"
Mit ODER Operator:
-Lact "E202 ! E204 ! E206" -Lres "viGr1Close"
Achso invertieren kannst Du auch in der Config.
Musst nur * vor deine Operanten stellen.
zB. so.
-Lact "*E210 & *E212" -Lres "viGr2Open"
Gruss...
Hallo thotrix,
hier erst einmal der genaue Auszug aus der Doku.
33506:Achscomputer cmd Fehler
Timeout beim Senden oder Empfangen von Bewegungsbefehlen zum Achscomputer
an Anschlußkarte %d
Kontrolle:
Neustart der Steuerung.
System neu installieren.
Achscomputer austauschen.
würde aber auch mal die Servokabel und Stecker zu den einzelnen Achsmotoren kontrollieren.
Hatte vor geraumer Zeit mal ein ähnliches Problem was dann auch auf die Servokabel zurück zuführen war.
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...
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...
Das ist wirklich ärgerlich. Wie gesagt man könnte sich den Fahrbefehl selber schreiben, aber das ist doch schon etwas mehr aufwand.
Den Encrypter wirst Du wohl nicht so einfach bzw. gar nicht bekommen. Den rückt ABB nicht raus!!!!
Gruss...
Versuche es mal so.
IF Di_Menü=high nAntwort:=UIListView(\Header:=stHeader,lDialog\Buttons:=btnOK\Icon:=iconInfo);
Habe da ein paar Sachen vergessen gehabt.
Gruss...
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!
Schliesse mich dem ohne weitere Worte an.
Gruss Robcheck01...
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...
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.
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...
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...