引言:一般机器人与视觉主机配合实现抓取或放置时,由视觉主机拍照定位,然后发出机械坐标的偏差值给机器人,一般会存在X方向的偏差,Y方向的偏差,和角度的偏差,故视觉主机发出是一串字符串,字符串中包含X,Y ,A, 在机器人接收到之后,需要解析,把字符串解析成数字然后再加到坐标点中去 ,X,Y可以直接加到坐标中去,角度不能直接加到坐标中,需要转换成机器人的4要素才能相相。
MODULE gaowei
RECORD code !建立一个名为code的自定义数据结构
num x; !定义数据数字类型,变量名为x
num y; !定义数据数字类型,变量名为y
num a; !定义数据数字类型,变量名为a
ENDRECORD
VAR code message; !定义类型为code的message的变量名
VAR string receive_string; !定义接收到的变量名
PROC main()
Var num x;
Var num y;
Var num a;
WHILE true DO
receive_string:=“10.2,15.5,30.4,”; !给变量赋坐标初值
!假定视觉发来的数据是X轴偏移10.2 Y轴偏侈15.5,角度偏移30.4
message:=Analysis(receive_string);
!调用数据解析功能块,填入坐标数据据,用message来接收
x:=message.x;
y:=message.y;
a:=message.a;
TPWrite ''\Num:=x;
TPWrite ''\Num:=y;
TPWrite ''\Num:=a;
stop;
ENDWHILE
ENDPROC
!建立一个返回数据类型为code的功能块,传入变量是视觉主机发送的位置及角度数据;
此功能块为封装之后的,所以朋友们可以直接调用,
FUNC code Analysis(string received_string)
VAR code message;
VAR string Pos_Str{3};
VAR num m:=1;
VAR num n_arr:=1;
VAR bool bOK:=FALSE;
FOR i FROM 1 TO StrLen(received_string) DO
IF StrMemb(received_string,i,',') THEN
Pos_Str{n_arr}:=StrPart(received_string,m,i-m);
m:=i+1;
n_arr:=n_arr+1;
ENDIF
ENDFOR
bOK:=StrToVal(Pos_Str{1},message.x);
bOK:=StrToVal(Pos_Str{2},message.y);
bOK:=StrToVal(Pos_Str{3},message.a);
received_string:='';
RETURN message;
ENDFUNC
ENDMODULE
运行效果图:
联系客服