vlambda博客
学习文章列表

ABB机器人socket接受20组数据

转载请先后台留言,大家一起支持原创,推动机器人使用和发展

1. 现场通过相机,发送20组点位数据,每组数据包括x,y和旋转角度theta,用逗号分开。

2. 相机通过字符串形式发送

3. 由于ABB机器人单个字符串最大为80字符,20组数据内容的字符串远超80,机器人如何接受并存入?

4. 插入代码如下,socketReceive接受的时候,类型选择RawData(即Rawbyte,该类型最大可以接受1024byte)


 VAR string received_string;   VARrawbytes rawbyte1;   VAR pos pos10{30};  PROCmain()       SocketClose socket1;       SocketCreate socket1;       SocketConnect socket1,"127.0.0.1",8000;      WHILETRUEDO           ClearRawBytes rawbyte1;           SocketSend socket1Str:="Hello server";           SocketReceive socket1RawData:=rawbyte1;           decode2;       ENDWHILE   ERROR       SocketClose socket1;ENDPROC
PROC decode2()       VAR string s_temp; VAR string s_temp2;       VAR num count;       VAR bool flag1;       VAR num c_tmp;       VAR pos pos10{30};       c_tmp:=0;       count:=1;       FORi FROM 1 TO 30 DO           pos10{i}:=[0,0,0];           !将收到的xyz存入数组pos10中       ENDFOR       s_temp:="";       c_tmp:=0;!0,data saved in x,1,data saved in y,2,data saved in z,       FORi FROM 1 TORawBytesLen(rawbyte1) DO          !循环总次数为收到数据总长度           UnpackRawBytes rawbyte1,i,s_temp2ASCII:=1;           !每次从收到的rawbyte1中得到一位字符串,           !rawbyte1表示要unpack的数据,i表示从第几位开始,ASCII:=1表示以ASCII码形式,每次获取一位,得到的字符串存入s_temp2中           IF s_temp2<>","THEN               !如果当前字符不是”,”字符串进行拼接               s_temp:=s_temp+s_temp2;               IFi=RawBytesLen(rawbyte1) THEN                !处理最后一位字符串,因为最后一位数据之后没有分隔符                   flag1:=StrToVal(s_temp,pos10{count}.z);                   c_tmp:=0;               ENDIF           ELSE               TESTc_tmp                 !根据c_tmp值,将得到的结果存入xyz,0存入x,1存入y,2存入z               CASE 0:                   flag1:=StrToVal(s_temp,pos10{count}.x);                   ! 将得到的结果存入pos10数组的第count元素的x                     c_tmp:=1;!状态机变为1,即下次会存入y               CASE 1:                   flag1:=StrToVal(s_temp,pos10{count}.y);                   c_tmp:=2;               CASE 2:                   flag1:=StrToVal(s_temp,pos10{count}.z);                   c_tmp:=0;                   count:=count+1;                   !获取完z后,count+1               ENDTEST              s_temp:="";           ENDIF       ENDFORENDPROC


5. 通过测试软件,发送20组数据,得到结果如下


********************************

如何获取更多经典文章?

点击阅读原文,学习robotstudio仿真,获取完整教学视频

更多内容








searchL仿真工作站

pathoffset轨迹实时修正功能

撤销处理程序















更多大牛讲解视频,可以前往https://www.aiimooc.com 搜索ABB观看或者扫描以下二维码