Advertisement
Guest User

client

a guest
Jan 16th, 2017
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MatLab 6.90 KB | None | 0 0
  1. classdef robot_class
  2.     %ROBOT_CLASS Summary of this class goes here
  3.     %   Detailed explanation goes here
  4.    
  5.     properties
  6.         socket = tcpip('192.168.2.100',50131,'NetworkRole','client','TransferDelay','off');
  7.         com_status = robot_enum.error;
  8.         detection_mode_MC = false;
  9.         robots_max_quantity = 10;
  10.         robots_control_quantity = 0;
  11.         detect_list = struct('id',0,'detect',0,'x',0,'y',0,'ang',0);
  12.         control_id;
  13.         control_list;
  14.     end
  15.    
  16.     methods
  17.         function obj = robot_class(ip,port,max,caunt,mode) %konstruktor
  18.             if nargin > 0
  19.                 obj.socket = tcpip(ip,uint16(port),'NetworkRole','client','TransferDelay','off');
  20.                 obj.robots_max_quantity = double(uint8(max));
  21.                 obj.robots_control_quantity = double(uint8(caunt));
  22.                 obj.detection_mode_MC = mode;
  23.             end
  24.         end
  25.        
  26.         function obj = disconnect(obj) %roz��czenie
  27.             try
  28.                 fwrite(obj.socket,0,'uint8');
  29.             catch
  30.                 obj.com_status = robot_enum.error;
  31.             end
  32.             obj.com_status = robot_enum.error;
  33.             fclose(obj.socket);
  34.         end
  35.        
  36.         function obj = connect(obj) %po��czenie
  37.             try
  38.                 fopen(obj.socket);
  39.                 if obj.robots_control_quantity == 0
  40.                     data = int8([1 2 0]);
  41.                 elseif obj.detection_mode_MC == true
  42.                     data = int8([1 1 obj.robots_control_quantity]);
  43.                 else
  44.                     data = int8([1 0 obj.robots_control_quantity]);
  45.                 end
  46.                 fwrite(obj.socket,data,'uint8');
  47.  
  48.                 if fread(obj.socket,1,'uint8') == 2
  49.                     temp_status = fread(obj.socket,1,'uint8');
  50.                     switch temp_status
  51.                         case 17 %monitor
  52.                             if obj.robots_control_quantity == 0
  53.                                 obj.com_status = robot_enum.mode_M;
  54.                                 obj.control_id = 0;
  55.                             else
  56.                                 obj.com_status = robot_enum.error;
  57.                                 obj.disconnect;
  58.                             end
  59.                         case 33 %sterowanie
  60.                             if obj.robots_control_quantity == 0
  61.                                 obj.com_status = robot_enum.error;
  62.                                 obj.disconnect;
  63.                             elseif obj.detection_mode_MC == true
  64.                                 obj.com_status = robot_enum.error;
  65.                                 obj.disconnect;
  66.                             else
  67.                                 obj.com_status = robot_enum.mode_C;
  68.                                 data = fread(obj.socket,obj.robots_control_quantity,'uint8');
  69.                                 obj.control_id = data;
  70.                             end
  71.                         case 49 %monitor i sterowanie
  72.                             if obj.robots_control_quantity == 0
  73.                                 obj.com_status = robot_enum.error;
  74.                                 obj.disconnect;
  75.                             elseif obj.detection_mode_MC == true
  76.                                 obj.com_status = robot_enum.mode_MC;
  77.                                 data = fread(obj.socket,obj.robots_control_quantity,'uint8');
  78.                                 obj.control_id = data;
  79.                             else
  80.                                 obj.com_status = robot_enum.error;
  81.                                 obj.disconnect;
  82.                             end
  83.                         otherwise
  84.                             obj.com_status = robot_enum.error;
  85.                             obj.disconnect;
  86.                     end
  87.                 else
  88.                     obj.com_status = robot_enum.error;
  89.                     obj.disconnect;
  90.                 end
  91.             catch
  92.                 obj.com_status = robot_enum.error;
  93.                 obj.disconnect;
  94.             end
  95.         end
  96.        
  97.         function obj = get_detect(obj) %pobranie po�o�enia robot�w
  98.             try
  99.                 fwrite(obj.socket,3,'uint8');
  100.                 if fread(obj.socket,1,'uint8') == 4
  101.                     switch obj.com_status
  102.                         case {robot_enum.mode_M,robot_enum.mode_MC}
  103.                             data = fread(obj.socket,obj.robots_max_quantity*14,'uint8');
  104.                             for i=1:1:obj.robots_max_quantity
  105.                                 obj.detect_list(i).id = data(1+(i-1)*14);
  106.                                 obj.detect_list(i).detect = data(2+(i-1)*14);
  107.                                 obj.detect_list(i).x = double(typecast(uint8(data(3+(i-1)*14:6+(i-1)*14)),'single'));
  108.                                 obj.detect_list(i).y = double(typecast(uint8(data(7+(i-1)*14:10+(i-1)*14)),'single'));
  109.                                 obj.detect_list(i).ang = double(typecast(uint8(data(11+(i-1)*14:14+(i-1)*14)),'single'));
  110.                             end
  111.                         case robot_enum.mode_C
  112.                             data = fread(obj.socket,obj.robots_control_quantity*14,'uint8');
  113.                             for i=1:1:obj.robots_control_quantity
  114.                                 obj.detect_list(i).id = data(1+(i-1)*14);
  115.                                 obj.detect_list(i).detect = data(2+(i-1)*14);
  116.                                 obj.detect_list(i).x = double(typecast(uint8(data(3+(i-1)*14:6+(i-1)*14)),'single'));
  117.                                 obj.detect_list(i).y = double(typecast(uint8(data(7+(i-1)*14:10+(i-1)*14)),'single'));
  118.                                 obj.detect_list(i).ang = double(typecast(uint8(data(11+(i-1)*14:14+(i-1)*14)),'single'));
  119.                             end
  120.                     end
  121.                 else
  122.                     obj.com_status = robot_enum.error;
  123.                     obj.disconnect;
  124.                 end
  125.             catch
  126.                 obj.com_status = robot_enum.error;
  127.                 obj.disconnect;
  128.             end
  129.         end
  130.        
  131.         function obj = set_motion(obj) %wys�anie sterowania
  132.             try
  133.                 switch obj.com_status
  134.                     case {robot_enum.mode_C,robot_enum.mode_MC}
  135.                         temp1 = reshape(obj.control_list',1,[]);
  136.                         temp2 = temp1(1:obj.robots_control_quantity*2);
  137.                         data = [uint8(5) typecast(single(temp2),'uint8')];
  138.                         fwrite(obj.socket,data,'uint8');
  139.                         if fread(obj.socket,1,'uint8') ~= 6
  140.                             obj.com_status = robot_enum.error;
  141.                             obj.disconnect;
  142.                         end
  143.                 end
  144.             catch
  145.                 obj.com_status = robot_enum.error;
  146.                 obj.disconnect;
  147.             end
  148.         end
  149.     end
  150.    
  151. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement