ABB在视觉开发Socket接收数据如何处理的两种方法 点击:773 | 回复:4



liyanbin

    
  • 精华:0帖
  • 求助:0帖
  • 帖子:7帖 | 105回
  • 年度积分:225
  • 历史总积分:3616
  • 注册:2017年11月19日
发表于:2021-10-22 11:33: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




楼主最近还看过



liyanbin

  • 精华:0帖
  • 求助:0帖
  • 帖子:7帖 | 105回
  • 年度积分:225
  • 历史总积分:3616
  • 注册:2017年11月19日
发表于:2021-10-22 11:34:48
1楼

格式 我就懒得的改了,直接粘贴的,大家自己复制了试下即可!

fighting2021

  • [管理员]
  • 精华:4帖
  • 求助:4帖
  • 帖子:1023帖 | 7244回
  • 年度积分:1284
  • 历史总积分:18892
  • 注册:2008年11月11日
发表于:2021-10-22 14:19:37
2楼

感谢楼主的分享

嘉哥哥

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 33回
  • 年度积分:102
  • 历史总积分:104
  • 注册:2022年12月27日
发表于:2023-03-18 10:27:56
3楼

感谢楼主的分享

你的益达吖

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 18回
  • 年度积分:282
  • 历史总积分:282
  • 注册:2023年8月12日
发表于:2024-01-12 03:49:49
4楼

学习一学习一下,感谢楼主的资料。下,感谢楼主的资料。


热门招聘
相关主题

官方公众号

智造工程师