1. 现场通过相机,发送20组点位数据,每组数据包括x,y和旋转角度theta,用逗号分开。
2. 相机通过字符串形式发送
3. 由于ABB机器人单个字符串最大为80字符,20组数据内容的字符串远超80,机器人如何接受并存入?
4. 插入代码如下,socketReceive接受的时候,类型选择RawData(即Rawbyte,该类型最大可以接受1024byte)
VARstring 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
PROCdecode2() VAR string s_temp;VARstring 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组数据,得到结果如下
[img=415.3pt,104.25pt]https://mmbiz.qpic.cn/mmbiz_png/RZ5RadbLaf4eJTu38Zlibhbr1VzUPlSaMT1thJvRKbKpE9Lxh7xlBx6iaUo7h5TIADD9Lx0ax9l09dTgqyeaRSsA/640?wx_fmt=png[/img]
********************************
|