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
ENDFOR
ENDPROC
5. 通过测试软件,发送给ABB机器人的20组数据,得到结果如下
更多资讯:ABB机器人