Hallo,
bei meinem Vorhaben, Kamera mit der KUKA KRC32 über RS232 mit 3964R Protokoll zu verbinden, bin ich jetzt bei diesem Zwischenschritt gelandet, und es geht nicht weiter:
Ich kann Daten(aktuelle Koordinaten) vom Kuka zum PC senden. Ich benutze dazu XON/XOFF Procedur, $PSER_2 konfiguriert wie folgt:
DECL SER $PSER_2={PROTO 4,PROC 2,RCO 5,BL 0,BAUD 19200,NOC 8,NOS 1,PARITY 0,TRC 0,FLP 1,LLP 60,RT 0,PT 0,DSR 0,WCCXON 0,VXON 11,VXOFF 13,WEOBC 0,VEOBC 0} ;SCHNITTSTELLE 2
Hier das Programm dazu(kennt Ihr alle bestimmt):
&ACCESS RVP
DEF XX ( )
INT HANDLE
DECL STATE_T SW_T,SC_T,SR_T
DECL MODUS_T MW_T,MR_T
DECL INT OFFSET
REAL TIMEOUT
REAL XPOS,YPOS,ZPOS,APOS,BPOS,CPOS
BAS (#INITMOV,0,"-" )
MW_T=#SYNC
MR_T=#ABS
TIMEOUT=1.0
COPEN(:SER_2,HANDLE)
LOOP
CWRITE(HANDLE,SW_T,MW_T,"%+#10.4F %+#10.4F %+#10.4F %+#10.4F %+#10.4F %+#10.4F",$POS_ACT.X,$POS_ACT.Y,$POS_ACT.Z,$POS_ACT.A,$POS_ACT.B,$POS_ACT.C)
ENDLOOP
CCLOSE(HANDLE,SC_T)
END
Alles anzeigen
Beim Versuch die Daten in die andere Richtung zu senden(zum Roboter) scheitere ich seit einigen Tagen.
Hier mein erstes Programm zum Empfangen von Daten. Dieses bleibt bei der Zeile WAIT FOR $DATA_SER2>0 stehen..
&ACCESS RVP
DEF XX1 ( )
INT HANDLE
DECL STATE_T SW_T,SC_T,SR_T
DECL MODUS_T MW_T,MR_T
DECL INT OFFSET
DECL FRAME ZWPOS
REAL TIMEOUT
REAL XPOS,YPOS,ZPOS,APOS,BPOS,CPOS
BAS (#INITMOV,0,"-" )
PTP HOME
MW_T=#SYNC
MR_T=#ABS
TIMEOUT=1.0
COPEN(:SER_2,HANDLE)
LOOP
WAIT FOR $DATA_SER2>0
OFFSET = 0
CREAD(HANDLE, SR_T, MR_T, TIMEOUT, OFFSET,"%+#10.4F %+#10.4F %+#10.4F %+#10.4F %+#10.4F %+#10.4F", XPOS, YPOS, ZPOS, APOS, BPOS, CPOS)
ZWPOS.X = XPOS
ZWPOS.Y = YPOS
ZWPOS.Z = ZPOS
ZWPOS.A = APOS
ZWPOS.B = BPOS
ZWPOS.C = CPOS
PTP ZWPOS
ENDLOOP
CCLOSE(HANDLE,SC_T)
END
Alles anzeigen
Dann wollte ich mit folgendem Programm feststelen ob überhaupt etwas ankommt. Die IF Anweisung wird immer übersprungen..
&ACCESS RVP
DEF XX2 ( )
INT HANDLE
DECL STATE_T SW_T,SC_T,SR_T
DECL MODUS_T MW_T,MR_T
DECL INT OFFSET
DECL FRAME ZWPOS
REAL TIMEOUT
REAL XPOS,YPOS,ZPOS,APOS,BPOS,CPOS
BAS (#INITMOV,0,"-" )
PTP HOME
MW_T=#SYNC
MR_T=#ABS
TIMEOUT=1.0
COPEN(:SER_2,HANDLE)
LOOP
IF $DATA_SER2>0 THEN
CWRITE(HANDLE,SW_T,MW_T,"%+#10.4F %+#10.4F %+#10.4F %+#10.4F %+#10.4F %+#10.4F",$POS_ACT.X,$POS_ACT.Y,$POS_ACT.Z,$POS_ACT.A,$POS_ACT.B,$POS_ACT.C)
ENDIF
ENDLOOP
CCLOSE(HANDLE,SC_T)
END
Alles anzeigen
Danach wollte ich mit diesem Programm die Variable $DATA_SER2 beim Datenempfang beobachten. Diese wird ja mit empfnagenen Daten inkrementiert, richtig? Also wenn ich das Program starte spuckt es Nullen raus, was auch richtig ist. Sobald ich dann etwas an den Roboter sende, blebt das Programm an der CWRITE(HANDLE,SW_T,MW_T,"%d",$DATA_SER2) Zeile stehen. Warum?
&ACCESS RVP
DEF XX3 ( )
INT HANDLE
DECL STATE_T SW_T,SC_T,SR_T
DECL MODUS_T MW_T,MR_T
DECL INT OFFSET
DECL FRAME ZWPOS
REAL TIMEOUT
REAL XPOS,YPOS,ZPOS,APOS,BPOS,CPOS
BAS (#INITMOV,0,"-" )
PTP HOME
MW_T=#SYNC
MR_T=#ABS
TIMEOUT=1.0
COPEN(:SER_2,HANDLE)
LOOP
CWRITE(HANDLE,SW_T,MW_T,"%d",$DATA_SER2)
ENDLOOP
CCLOSE(HANDLE,SC_T)
END
Alles anzeigen
Hat jemand ein Tipp wie ich bei diesem Problem vorgehen kann? Ich habe noch ein RS232 Sniffer zwischen dem PC und dem Roboter hängen, dieser schneidet die Kommunikation in beide Richtungen. Also wenn ich etwas sende, kommt es aus dem PC raus, das steht fest..
1.Ist es richtig, daß wenn ich Software Handshake XON/XOFF verwende mich dann RTS/DTS DTR/DSR nicht interessieren? Oder müssen diese trotzdem richtig belegt/gebrückt sein ?
2.Beim Empfangen von den Roboter Koordinaten am PC(erstes Programm) ist mir beim Beobachten der Daten mit dem RS232 Sniffer aufgefallen, daß da reine Daten gesendet werden. Ich habe nirgendwo XON/XOFF Flusssteurungszeichen(11hex/13hex) gesehen. Deshalb gehe ich davon aus, daß ich es auch in die andere Richtung nicht brauche.. Ist es korrekt? Oder muß ich XON/XOFF(11hex/13hex) senden? Wenn ja , dann wann?
Vielen Dank!