首页 ABB机器人 正文

回复

ABB在视觉开发Socket接收数据如何处理的两种方法

ABB机器人 浏览:987 回复:5 收藏

liyanbin  2021-10-22 11:09

第一种方法:按位分割
1.png

PROC SocketServer()

     VAR socketdev server_socket1;

     VAR socketdev client_socket1;

     VAR string client_ip:="10.70.2.240";客户端的IP地址

     VAR string receive_string;

     VAR string string_j1:=""; 定义用于分割取位后存储字符的字符串

     VAR string string_j2:="";

     VAR string string_j3:="";

     VAR string string_j4:="";

     VAR string string_j5:="";

     VAR string string_j6:="";

     VAR num num_j1:=0;定义将取位后的字符串转换成值类型的数据存储

     VAR num num_j2:=0;

     VAR num num_j3:=0;

     VAR num num_j4:=0;

     VAR num num_j5:=0;

     VAR num num_j6:=0;

     VAR bool change_ok:=false; 转换标志位

     VAR robtarget current_position_robT; 定义robtarget类型的坐标点

     VAR jointtarget current_position_jointT; 定义jointtarget类型的坐标点

               SocketClose server_socket1;

        SocketClose client_socket1;

        SocketCreate server_socket1;

        SocketBind server_socket1," 10.70.2.252",3000;机器人端IP地址和端口

        SocketListen server_socket1;

        SocketAccept server_socket1,client_socket1\ClientAddress:=client_ip\Time:=WAIT_MAX;

         WHILE TRUE DO

            SocketReceive client_socket1\str:=receive_string\Time:=WAIT_MAX;

!            TPWrite "receive_string="+receive_string;

!            SocketSend client_socket1\Str:="Hello World";

         string_j1:=StrPart(receive_string,1,6);对接收的字符串按位分割,每6位为一组坐标(例:-321.1保留两位小数,正好可以满足机器人坐标数据使用。)

         string_j2:=StrPart(receive_string,7,6);7位开始的6个字符串

         string_j3:=StrPart(receive_string,13,6); 13位开始的6个字符串

         string_j4:=StrPart(receive_string,19,6); 19位开始的6个字符串

         string_j5:=StrPart(receive_string,25,6); 25位开始的6个字符串

         string_j6:=StrPart(receive_string,31,6); 31位开始的6个字符串

         change_ok:=StrToVal(string_j1,num_j1);!j1将接收的字符串转换为值类型的数据(值可以是整数也可以是小数)

         change_ok:=StrToVal(string_j2,num_j2);!j2

         change_ok:=StrToVal(string_j3,num_j3);!j3

         change_ok:=StrToVal(string_j4,num_j4);!j4

         change_ok:=StrToVal(string_j5,num_j5);!j5

         change_ok:=StrToVal(string_j6,num_j6);!j6

         current_position_robT:= CRobT(\Tool:=tool1\wobj:=wobj1);获取当前坐标点的数据赋值给current_position_robT点位。

         current_position_jointT:=CalcJointT(current_position_robT,tool1 \WObj:=wobj1);robtarget型数据转换为jointtarget        current_position_jointT:=Absjoffs(current_position_jointT,num_j1,num_j2,num_j3,num_j4,num_j5,num_j6);赋值函数

               MoveAbsJ current_position_jointT\NoEOffs, v1000, fine, tool1;

        ENDWHILE

       ENDPROC

        FUNC jointtarget Absjoffs(jointtarget Point,num j10ffset,num j20ffset,num J30ffset,num J40ffset,num J50ffset,num J60ffset) 偏移函数

        VAR jointtarget joint_temp;

        joint_temp:=Point;

        joint_temp.robax.rax_1:=joint_temp.robax.rax_1+J10ffset;对轴数据进行赋值。

        joint_temp.robax.rax_2:=joint_temp.robax.rax_2+J20ffset;

        joint_temp.robax.rax_3:=joint_temp.robax.rax_3+J30ffset;

        joint_temp.robax.rax_4:=joint_temp.robax.rax_4+J40ffset;

        joint_temp.robax.rax_5:=joint_temp.robax.rax_5+J50ffset;

        joint_temp.robax.rax_6:=joint_temp.robax.rax_6+J60ffset;

        RETURN joint_temp;

ENDFUNC  

第二种方法是基于第一种的基础改编。

Splitstr.png

PROC SplitStr( string inputstr,string sp,inout string data{*})

字符串分割函:inputstr输入字符串,sp分割符,data{*}存入数据的数组  

              VAR string s1;

        VAR string s2;

        VAR num count:=1;

        VAR bool flag1;

        FOR i FROM 1 TO StrLen(inputstr) DO    循环遍历输入字符串

            s1:=StrPart(inputstr,i,1);            每次取一位分割符字符

            IF s1=sp THEN

               flag1:=StrToVal(s2,data{count});

如果当前字符是分隔符,则将之前的字符串转化为数据并存入data{count}

               s2:="";

               Incr count;

            ELSE

                s2:=s2+s1;          如果当前字符不是分割字符,则字符串拼接             

            ENDIF

            flag1:=StrToVal(s2,data{count});

        ENDFOR 

ENDPROC


我知道了