MATLAB与Robotstudio建立socket通信(初探)

     前记:

      听一首《不想病》,歌词唱开头:做什么都不对,说什么都浪费,想什么我都可悲....;感觉就是不一样,好歌!哎,,,回到正题。好多事要去做,还得挤时间去玩,,,可悲啊 :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发送‘有用的数据’,以便用于控制机器人在工作区间运动,否则机器人运动报错(报错如最下)。



猜你喜欢

转载自blog.csdn.net/weixin_39090239/article/details/80722959