2020-11-2更:python与rs的socket链接可以参考:https://forums.robotstudio.com/discussion/comment/25528/#Comment_25528
前记:
听一首《不想病》,歌词唱开头:做什么都不对,说什么都浪费,想什么我都可悲....;感觉就是不一样,好歌!哎,,,回到正题。好多事要去做,还得挤时间去玩,,,可悲啊 :D 。这里记录一下MATLAB与Robotstudio建立简单socket的例子。至于建立通讯的意义何在,暂时不能深入探究(我想最重要的联合仿真时的数据传递,MATLAB对数据进行分析类似的吧)。
附:在建立通信之前,MATLAB必须保证安装有能进行TIP/IP通信的Instrument Control Toolbox,然后就是Robotstudio创建了系统和对应通讯的Rapid程序,MATLAB作为client,RS最为server。
1、建立Robotstudio方机器人系统和Rapid程序。
1)打开RS,界面左上角基本--->ABB模型库--->拖入机器人--->从布局建立系统--->一直点击下一步--->直到有选项--->在添加选项里加入616-1 PC interface--->完成--->等待控制器状态变绿。
2)点击RAPID,在模块中建立程序,如下:
3)rapid程序如下:
MODULE moudle1
!define variables
VAR socketdev server;
VAR socketdev client;
VAR string message;
VAR string string1:="";
VAR string string2{3}:=["","",""];
VAR num pass:=0;
VAR num X:=0;
VAR num Y:=0;
VAR num Rz:=0;
VAR bool flag1:=FALSE;
VAR rawbytes data;
CONST robtarget p10:=[[0,0,23.72],[0.00796547,0.908649,0.417482,0.0017992],[0,-1,1,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];
TASK PERS tooldata toolxi:=[TRUE,[[0,0,0],[1,0,0,0]],[-1,[0,0,0],[1,0,0,0],0,0,0]];
PROC main()
a:
!create communication
SocketCreate server;
SocketBind server,"127.0.0.1",55000;
SocketListen server;
SocketAccept server,client;
!send a meassage to the client
SocketSend client,\Str:="Hello client";
!receive a message from the client
SocketReceive client,\Str:=string1;
UnpackRawBytes data ,1,message,\ASCII:=15;
!close cmmunication
SocketClose server;
TPErase;
TPWrite string1;
WaitTime 4;
string2{1}:=StrPart(string1,1,1);
string2{2}:=StrPart(string1,2,8);
string2{3}:=StrPart(string1,2,8);
flag1:=StrToVal(string2{1},pass);
flag1:=StrToVal(string2{2},X);
flag1:=StrToVal(string2{3},Y);
IF pass = 1 AND flag1 THEN
MoveL Offs(p10,X,Y,15), v1000, fine, toolxi;
MoveL Offs(p10,X,Y,0), v1000, fine, toolxi;
WaitTime 0.5;
MoveL Offs(p10,X,Y,15), v1000, z50, toolxi;
ELSE
TPWrite "failed to get the data";
waittime 2;
GOTO a;
ENDIF
ENDPROC
ENDMODULE
2、MATLAB端程序
%%socket communication with robotstudio
tc=tcpip('127.0.0.1',55000);
%open the communication
fopen(tc);
%recive a message from the robotstudio
message=fread(tc);
%send a message to the robotstudio
fwrite(tc,'12345678921234567');
3、点击RS运行后程序指针在 22 行SocketAccept server,client;,处等待运行MATLAB程序,点击MATLAB的m文件RUN等待一会儿通信建立,并且出现如下显示:
1)机器人示教器上tpwrite写屏指令写出MATLAB发来的数字。
2)MATLAB端:
如此数据发送通讯完成。
4、后记
在实际应用中,通讯数据互相传递的过程不像上述;必须要根据实际所需传递正确的数据类型、数据类型转换、格式变化和收发等设置(在程序中加入while循环,保持持续数据的传递----这部分会在后续记录上)。在rapid程序中可以查看string1=12345678921234567(鼠标放在上面就显示了),通过StrPart和StrToVal指令将其分割转换成‘1’,‘23456789’,‘21234567’如下也可以在示教器中查看程序数据。同时X,Y的值也改变了。而接下来需要解决的就是MATLAB发送‘有用的数据’,以便用于控制机器人在工作区间运动,否则机器人运动报错(报错如最下)。