Die Klammern waren die Lösung. Den Real teste ich.
Beiträge von cncandi
-
-
ich hätte 2 Fragen. Zum einen möchte ich eine OR Verzweigung verwenden.
IF STARTEL==3 OR STARTEL==0 THEN ...
Leider gibt das einen Fehler bei der zweiten == Anweisung. Wir kann man das sonst realisieren?
Zweite Frage zum $ANOUT:
VAR1=0.5
$ANOUT[1]=200*(VAR1/100) ergibt 0 ?!
Kann man die Berechnung nicht direkt in das Analogsignal schreiben?
-
Zitat
Warum private mail? Vorher Ideen sammeln und dann?
Gib uns doch ganz einfach die Patentnummer, wir können dann kontrollieren
was ist das für ein Quatsch. Was willst du kontrollieren? Dieses Thema ist 5% eines kompletten Projektes für die Ansteuerung von Druckeinheiten mit Werkzeugwechsel, Fräskopf, Druckkopf and einem Kuka Roboter.
-
das kann ich nicht mal eben erklären. Wir haben Tage in die Implementierung gesteckt. Du kannst mir eine mail zusenden und wir können Kontakt aufnehmen.
-
wir haben das Problem mittlerweile lösen können. Der 3D Extruder funktioniert am KUKA Roboter einwandfrei.
-
Eventuell stimmen meine XML Einstellungen nicht. Was steht da bei dir drin? Timeout?
-
interessanterweise wird der Fehler auch beim Kuka C# Programm ausgegeben. Nach einiger Zeit (ca. 1 Minute) wird die Verbindung einfach abgebrochen. Liegt also doch nicht an meinem Programm sondern an der Ethernet Verbindung vom Kuka.
-
vielen Dank. Das habe ich gesucht.
-
ja, die gibts auch GLOBAL. Ich denke das Problem liegt an meinem TCPListener im C# Programm. Der bricht irgendwann ab. Mit dem Kuka Listener der mitgeliefert wird geht es. Leider gibt es en nicht als Quellcode.
-
auch auf die Gefahr mit dem Thema zu nerven, muss ich noch eine Frage stelle. Alles klappt wirklich prima.
Das einzige Problem ist die Verbindungsstabilität. Nach ca. 2-3 Minuten trennt der Roboter die Verbindung mit dem Hinweis: Ethernet ist getrennt. Verursacher <EthernetKRL>
anbei sende ich mal meine Submit Datei, das Testprogramm und die XML. Das muss doch irgendwie eine Einstellung sein ?!
Code: SPS.SUB Bereich USER INIT
Alles anzeigen;FOLD USER INIT ;EKI Verbindung initialisieren ;***************************** IF($FLAG[1]) then RET = EKI_CLEAR("XmlDtrSub") RET = EKI_CLOSE("XmlDtrSub") endif RET = EKI_INIT("XmlDtrSub") RET = EKI_OPEN("XmlDtrSub") wait sec(2) ;ENDFOLD (USER INIT)
Code: SPS.SUB Bereich LOOP
Alles anzeigen;FOLD USER PLC IF($FLAG[1]) then ;Make your modifications here RET=EKI_SetReal("XmlDtrSub","Robot/Speed",speed) RET=EKI_Send("XmlDtrSub","Robot") RET=EKI_SetInt("XmlDtrSub","Robot/OV_PRO_Act",$OV_PRO) RET=EKI_Send("XmlDtrSub","Robot") RET=EKI_SetReal("XmlDtrSub","Robot/tcpspeed",$VEL_ACT) RET=EKI_Send("XmlDtrSub","Robot") RET=EKI_ClearBuffer("XmlDtrSub","Robot") else RET = EKI_INIT("XmlDtrSub") RET = EKI_OPEN("XmlDtrSub") endif
Code: Beispielprogramm.src;2D KONTUR-FRÄSEN 1 PTP {A1 -9.5, A2 -70.5, A3 112, A4 -15, A5 -42, A6 190.5, E1 0, E2 0, E3 0, E4 0, E5 0, E6 0} $VEL.CP=0.167 lm({X -25.168, Y -40.452, A -0.893, C -180, E6 0}) lm({Z 1, E6 0}) $VEL.CP=0.025 lm({Z 0, E6 1000}) lm({X -24.537, Y -39.997, E6 1000}) lm({X -23.994, Y -39.44, E6 1000}) lm({X -23.555, Y -38.798, E6 1000})
Code: lm.srcDEF lm(pp: in) E6POS pp ; Endposition DECL EKI_STATUS RET REAL speed ; Vorschub Extruder speed=pp.E6 RET=EKI_SetReal("XmlDtrSub","Robot/Speed",speed) RET=EKI_Send("XmlDtrSub","Robot") LIN (pp) C_DIS END
Code: XmlDtrSub.XML
Alles anzeigen<ETHERNETKRL> <CONFIGURATION> <EXTERNAL> <IP>192.168.2.209</IP> <PORT>59152</PORT> </EXTERNAL> <INTERNAL> <ENVIRONMENT>Submit</ENVIRONMENT> <BUFFERING Mode="FIFO" Limit="512"/> <BUFFSIZE Limit="65534"/> <TIMEOUT Connect="2000"/> <ALIVE Set_Flag="1" Ping="5000"/> </INTERNAL> </CONFIGURATION> <RECEIVE> <XML> </XML> </RECEIVE> <SEND> <XML> <ELEMENT Tag="Robot/Speed"/> <ELEMENT Tag="Robot/OV_PRO_Act"/> <ELEMENT Tag="Robot/tcpspeed"/> </XML> </SEND> </ETHERNETKRL>
-
ok, hatte es falsch gelesen. DU öffnest einmal. Also nicht im Loop.
-
ist das im Loop oder im User Init?
-
ich hänge mal die Screenshots der SPS.sub und der XML dran. Bi ich in der richtigen SPS.sub?
-
das Problem liegt darin,
dass ich eine Fehlermeldung bekommen, wenn ich EKI_init("xmlSub") unter dem Fold "User Init"
eintrage. Fehlermeldung: Name nicht als Unterprogramm vereinbart. Lieft aber als XML ab.
-
ich möchte gerne die aktuelle TCP Geschwindigkeit, sowie einen zusätzlichen globalen Parameter ständig von der SPS.sub an
den PC übertragen. Innerhalb eines lokalen Programm funktioniert es perfekt. Ich brauche aber den TCP Wert ständig. Also nicht nur
bei Abfrage.
Wenn ich die Werte in die SPS.Sub eintrage, funktioniert es aber nicht. Wo liegt der Fehler? Programme anbei.
SPS.sub
Code
Alles anzeigen&ACCESS RVO &REL 10 &COMMENT PLC on control DEF SPS ( ) ;FOLD DECLARATIONS ;FOLD BASISTECH DECL ;Automatik extern DECL STATE_T STAT DECL MODUS_T MODE ;ENDFOLD (BASISTECH DECL) ;FOLD USER DECL ; Please insert user defined declarations DECL EKI_STATUS RET ;ENDFOLD (USER DECL) ;ENDFOLD (DECLARATIONS) ;FOLD INI ;FOLD AUTOEXT INIT INTERRUPT DECL 91 WHEN $PRO_STATE1==#P_FREE DO RESET_OUT () INTERRUPT ON 91 $LOOP_MSG[]=" " MODE=#SYNC $H_POS=$H_POS ;Automatik extern IF $MODE_OP==#EX THEN CWRITE($CMD,STAT,MODE,"RUN /R1/CELL()") ENDIF ;ENDFOLD (AUTOEXT INIT) ;FOLD BACKUPMANAGER PLC INIT BM_ENABLED = FALSE BM_OUTPUTVALUE = 0 ;ENDFOLD (BACKUPMANAGER PLC INIT) ;FOLD TQM_INIT TorqueDefinitions() ;ENDFOLD (TQM_INIT) ;FOLD USER INIT ; Please insert user defined initialization commands ;ENDFOLD (USER INIT) ;ENDFOLD (INI) LOOP WAIT FOR NOT($POWER_FAIL) TORQUE_MONITORING() ;FOLD BACKUPMANAGER PLC IF BM_ENABLED THEN BM_OUTPUTSIGNAL = BM_OUTPUTVALUE ENDIF ;ENDFOLD (BACKUPMANAGER PLC) ;FOLD USER PLC ;Make your modifications here RET=EKI_Init("XmlDtrSub") RET=EKI_Open("XmlDtrSub") RET=EKI_SetReal("XmlDtrSub","Robot/TcpSpeed",Tcpspeed) RET=EKI_Send("XmlDtrSub","Robot") RET=EKI_Close("XmlDtrSub") RET=EKI_Clear("XmlDtrSub") ;ENDFOLD (USER PLC) ENDLOOP ;FOLD ;%{H} ;FOLD END ;ENDFOLD DEF RESET_OUT ( ) INT N MsgLoop(" ") IF REFLECT_PROG_NR == 1 THEN FOR N = 0 TO PGNO_LENGTH - 1 $OUT[PGNO_FBIT_REFL + N] = FALSE ENDFOR ENDIF IF (PGNO_REQ>0) THEN $OUT[PGNO_REQ]=FALSE ELSE IF (PGNO_REQ<0) THEN $OUT[-PGNO_REQ]=TRUE ENDIF ENDIF END ;FOLD USER SUBROUTINE ; Integrate your user defined subroutines ;ENDFOLD (USER SUBROUTINE) ;ENDFOLD
XmlDtrSub.xml
Code
Alles anzeigen<ETHERNETKRL> <CONFIGURATION> <EXTERNAL> <TYPE> Client </TYPE> </EXTERNAL> <INTERNAL> <ENVIRONMENT> Submit <IP>x.x.x.x</IP> //hier steht die korrekte IP <PORT>59152</PORT> </ENVIRONMENT> </INTERNAL> </CONFIGURATION> <RECEIVE> <XML> </XML> </RECEIVE> <SEND> <XML> <ELEMENT Tag="Robot/Speed"/> <ELEMENT Tag="Robot/Tcpspeed"/> </XML> </SEND> </ETHERNETKRL>
-
ja, ich denke ich habe es gefunden. Danke, war eine PTP Bewegung mit anderem Vorschub.
-
VEL_ACT ist aber doch nicht die reale Geschwindigkeit, oder? Wenn ich diese auslese bei einem
VEL.CP von 0.17 beispielweise, erhalte ich 0.095 im Schnitt.
Welche Einheit ist VEL_ACT?
-
also ich hab es jetzt hinbekommen. Aber nur mit dem Kuka Communication Interface. Wie kann ich dies in C# oder VB oder was auch immer hinbekommen? Hat dafür jemand einen Listener geschrieben?
-
Ich habe den Ethernet KRL installiert. Läuft auch soweit mit der Testanwendung.
Eigentlich möchte ich nur den Inhalt eines ANOUT Signals austauschen und der Roboter soll mir ständig seine
aktuelle Position inkl. der externen Achsen E1,E2,E3 senden.
Wer kennst sich damit aus? Wie muss die XML und das Prg aussehen um diese einfache Anweisung durchzuführen?
-
der Punktabstand muss dicht sein, da ansonsten die Kontur nicht positionsgenau ist. Bei dem Video ist das auch so. Es hat nichts mit dem Programm zu tun. Das lief schon oft mit einem Rundtisch. Es liegt an einer Einstellung am Roboter.