Send Position as a String

Hello,

I have a current RAPID program that is communicating with LabVIEW. I want the RAPID program to send LV a string of it's current position, with tool and axis configurations as well as the robtarget name, once the robot has reached a position.

This is my code:
MODULE Module1
    CONST robtarget Home:=[[374,0,630],[0.707106781,0,0.707106781,0],[0,0,0,0],[9E9,9E9,9E9,9E9,9E9,9E9]];
    CONST robtarget Target_10:=[[526.3896,0,477.5962],[0.707106781,0,0.707106781,0],[0,0,0,1],[9E9,9E9,9E9,9E9,9E9,9E9]];
    CONST robtarget Target_10_2:=[[526.3896,190.5,528.3962],[0.707106781,0,0.707106781,0],[0,0,-1,1],[9E9,9E9,9E9,9E9,9E9,9E9]];

    VAR socketdev client_socket;
    VAR socketdev RS;
    VAR num retry_no:=0;
    VAR rawbytes parse_data;
    VAR num peek_value:=0;
    VAR num bytes_available:=0;
    VAR byte command:=255;
    VAR num i;
    VAR num MoveNext:=0;

    PROC Path_10()
        SocketClose client_socket;
        Socketcreate client_socket;
        SocketConnect client_socket,"192.168.125.5",3333;
        !127.0.0.1 for self
        SocketSend client_socket\Str:="Connection Successful, you are the server, I am the client!"\NoOfBytes:=59;
        IF ERRNO=ERR_SOCK_TIMEOUT THEN
        ENDIF
        ! Clear the port of any data
        ClearRawBytes parse_data;
        i:=1;
        WHILE i=1 DO
            peek_value:=SocketPeek(client_socket);
            IF peek_value>=1 THEN

                ClearRawBytes parse_data;
                SocketReceive client_socket\RawData:=parse_data\Time:=25;
                bytes_available:=RawBytesLen(parse_data);
                SocketSend client_socket\RawData:=parse_data;
                IF bytes_available>=1 THEN
                    UnpackRawBytes parse_data,1,command\Hex1;
                    IF command=105 THEN
                        command:=0;
                        Incr MoveNext;
                        IF MoveNext=1 THEN
                            SocketSend client_socket\Str:="FALSE",\NoOfBytes:=5;
                            !                            MoveJ Home,v100,z10,tool0\WObj:=wobj0;
                            !                            WaitTime 1;
                            SocketSend client_socket\Str:="TRUE",\NoOfBytes:=4;
                        ENDIF
                        IF MoveNext=2 THEN
                            SocketSend client_socket\Str:="FALSE",\NoOfBytes:=5;
                            MoveJ Target_10,v100,z10,tool0\WObj:=wobj0;
                            WaitTime 1;
                            SocketSend client_socket\Str:="TRUE",\NoOfBytes:=4;
                            SocketSend client_socket\Data:=Current_Pos;
                        ENDIF
                        IF MoveNext=3 THEN
                            SocketSend client_socket\Str:="FALSE",\NoOfBytes:=5;
                            MoveJ Target_10_2,v100,z10,tool0\WObj:=wobj0;
                            WaitTime 1;
                            SocketSend client_socket\Str:="TRUE",\NoOfBytes:=4;
                        ENDIF
                        :
                        :
                        :
                        IF MoveNext>=27000 THEN
                            SocketSend client_socket\Str:="FALSE",\NoOfBytes:=5;
                            MoveNext:=0;
                            SocketSend client_socket\Str:="TRUE",\NoOfBytes:=4;
                        ENDIF
                        IF ERRNO>0 THEN
                            IF ERRNO=ERR_SOCK_TIMEOUT THEN
                            ELSE
                                i:=0;
                            ENDIF
                        ENDIF
                        WaitTime 1;
                    ENDIF
                ENDIF
            ENDIF
        ENDWHILE
    ENDPROC
ENDMODULE

I looked into the Cpos and CRobT functions in the manual, but it didn't really help me. Essentially I just need to take the current position, convert it to a string, and send that string to LV for each position. The problem is I have a ton of positions so I can't just go in and say "your at position # 5,267", that would take too long. If someone has done this before, I would greatly appreciate any examples or pointers!

Thanks in advance for any help!
SM
Sign In or Register to comment.

Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!