Hi Leute,
bin noch ein ziemlicher Neuling auf dem Gebiet der Roboterprogrammierung,
ich darf jetzt eine Anlage mit Kameraerkennung in Betrieb nehmen,
nun stehe ich vor dem Problem,
das ich zwar ein Beispiel bekommen haben,
nur leider weiß ich nicht wie ich mache Daten definieren muss,
hier mal das Bsp.
MODULE CameraModul
VAR socketdev clientsocket;
VAR socketstatus socketstat;
VAR rawbytes raw_send;
VAR rawbytes raw_receive;
PROC main()
VAR signaldi plcalive;
AliasIO dicomms_alive,plcalive;
WHILE plcalive=0 DO
waittime 5;
set docommserror;
IF (diforcestop=1) stop;
ENDWHILE
reset docommserror;
clearrawbytes raw_send;
clearrawbytes raw_receive;
socketclose clientsocket;
socketstat:=socketgetstatus(clientsocket);
WHILE NOT(socketstat=socket_connected)DO
waittime 2;
socketclose clientsocket;
waittime 2;
IF (plcalive=0) exitcycle;
connecttoserver "192.168.1.1",1025;
socketstat:=socketgetstatus(clientsocket);
ENDWHILE
WHILE (socketstat=socket_connected)DO
IF (plcalive=0) exitcycle;
senddata;
receivedata;
ENDWHILE
ENDPROC
PROC connecttoserver(string ipadress, num portno)
VAR num retryno:=0;
socketcreate clientsocket;
socketconnect clientsocket,ipadress,portno;
tperase;
tpwrite "connection succesful";
ERROR
IF ERRNO=err_sock_timeout THEN
waittime 1;
retryno:=retryno+1;
IF retryno>=3 THEN
errwrite\i, "connection failed","trying to connect to server (plc) failed,"\rl2:="pp goes to main to check if plc alice."\rl3:="retries is reset.";
tpwrite "socket connection failed after 3 retries";
retryno:=0;
waittime 5;
exitcycle;
ELSE
RETRY;
ENDIF
ELSEIF errno=err_sock_closed THEN
waittime 5;
exitcycle;
ELSE
tpwrite "errno = "\num:=errno;
stop;
ENDIF
ENDPROC
PROC senddata()
clearrawbytes raw_send;
packet_send.x:=packet_receive.x;
packet_send.y:=packet_receive.y;
packet_send.z:=packet_receive.z;
packet_send.rx:=packet_receive.rx;
packet_send.ry:=packet_receive.ry;
packet_send.rz:=packet_receive.rz;
!packet_send.status:=packet_receive.status;
packrawbytes packet_send.x,raw_send,(rawbyteslen(raw_send)+1)\float4;
packrawbytes packet_send.y,raw_send,(rawbyteslen(raw_send)+1)\float4;
packrawbytes packet_send.z,raw_send,(rawbyteslen(raw_send)+1)\float4;
packrawbytes packet_send.rx,raw_send,(rawbyteslen(raw_send)+1)\float4;
packrawbytes packet_send.ry,raw_send,(rawbyteslen(raw_send)+1)\float4;
packrawbytes packet_send.rz,raw_send,(rawbyteslen(raw_send)+1)\float4;
!packrawbytes packet_send.status,raw_send,(rawbyteslen(raw_send)+1)\intx:=1;
socketsend clientsocket \rawdata:=raw_send;
ERROR
IF errno=err_sock_closed THEN
tpwrite "socket closed during sending data";
exitcycle;
ENDIF
ENDPROC
PROC receivedata()
clearrawbytes raw_receive;
socketreceive clientsocket \rawdata:=raw_receive\time:=10;
unpackrawbytes raw_receive,1,packet_receive.x\float4;
unpackrawbytes raw_receive,5,packet_receive.y\float4;
unpackrawbytes raw_receive,9,packet_receive.z\float4;
unpackrawbytes raw_receive,13,packet_receive.rx\float4;
unpackrawbytes raw_receive,17,packet_receive.ry\float4;
unpackrawbytes raw_receive,21,packet_receive.rz\float4;
!unpackrawbytes raw_receive,25,packet_receive.status\intx:=1;
socketstat:=socketgetstatus(clientsocket);
ERROR
IF errno=err_sock_timeout OR errno=err_sock_closed THEN
waittime 5;
tpwrite "comms time out during receiving data";
ExitCycle;
ENDIF
endproc
ENDMODULE
Alles anzeigen
nun meine Frage,
wie mus ich die Variablen packet_send und packet_receive definieren ???
Danke im Vorraus