第一种方法:按位分割
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
第二种方法是基于第一种的基础改编。
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
楼主最近还看过