Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- classdef robot_class
- %ROBOT_CLASS Summary of this class goes here
- % Detailed explanation goes here
- properties
- socket = tcpip('192.168.2.100',50131,'NetworkRole','client','TransferDelay','off');
- com_status = robot_enum.error;
- detection_mode_MC = false;
- robots_max_quantity = 10;
- robots_control_quantity = 0;
- detect_list = struct('id',0,'detect',0,'x',0,'y',0,'ang',0);
- control_id;
- control_list;
- end
- methods
- function obj = robot_class(ip,port,max,caunt,mode) %konstruktor
- if nargin > 0
- obj.socket = tcpip(ip,uint16(port),'NetworkRole','client','TransferDelay','off');
- obj.robots_max_quantity = double(uint8(max));
- obj.robots_control_quantity = double(uint8(caunt));
- obj.detection_mode_MC = mode;
- end
- end
- function obj = disconnect(obj) %roz��czenie
- try
- fwrite(obj.socket,0,'uint8');
- catch
- obj.com_status = robot_enum.error;
- end
- obj.com_status = robot_enum.error;
- fclose(obj.socket);
- end
- function obj = connect(obj) %po��czenie
- try
- fopen(obj.socket);
- if obj.robots_control_quantity == 0
- data = int8([1 2 0]);
- elseif obj.detection_mode_MC == true
- data = int8([1 1 obj.robots_control_quantity]);
- else
- data = int8([1 0 obj.robots_control_quantity]);
- end
- fwrite(obj.socket,data,'uint8');
- if fread(obj.socket,1,'uint8') == 2
- temp_status = fread(obj.socket,1,'uint8');
- switch temp_status
- case 17 %monitor
- if obj.robots_control_quantity == 0
- obj.com_status = robot_enum.mode_M;
- obj.control_id = 0;
- else
- obj.com_status = robot_enum.error;
- obj.disconnect;
- end
- case 33 %sterowanie
- if obj.robots_control_quantity == 0
- obj.com_status = robot_enum.error;
- obj.disconnect;
- elseif obj.detection_mode_MC == true
- obj.com_status = robot_enum.error;
- obj.disconnect;
- else
- obj.com_status = robot_enum.mode_C;
- data = fread(obj.socket,obj.robots_control_quantity,'uint8');
- obj.control_id = data;
- end
- case 49 %monitor i sterowanie
- if obj.robots_control_quantity == 0
- obj.com_status = robot_enum.error;
- obj.disconnect;
- elseif obj.detection_mode_MC == true
- obj.com_status = robot_enum.mode_MC;
- data = fread(obj.socket,obj.robots_control_quantity,'uint8');
- obj.control_id = data;
- else
- obj.com_status = robot_enum.error;
- obj.disconnect;
- end
- otherwise
- obj.com_status = robot_enum.error;
- obj.disconnect;
- end
- else
- obj.com_status = robot_enum.error;
- obj.disconnect;
- end
- catch
- obj.com_status = robot_enum.error;
- obj.disconnect;
- end
- end
- function obj = get_detect(obj) %pobranie po�o�enia robot�w
- try
- fwrite(obj.socket,3,'uint8');
- if fread(obj.socket,1,'uint8') == 4
- switch obj.com_status
- case {robot_enum.mode_M,robot_enum.mode_MC}
- data = fread(obj.socket,obj.robots_max_quantity*14,'uint8');
- for i=1:1:obj.robots_max_quantity
- obj.detect_list(i).id = data(1+(i-1)*14);
- obj.detect_list(i).detect = data(2+(i-1)*14);
- obj.detect_list(i).x = double(typecast(uint8(data(3+(i-1)*14:6+(i-1)*14)),'single'));
- obj.detect_list(i).y = double(typecast(uint8(data(7+(i-1)*14:10+(i-1)*14)),'single'));
- obj.detect_list(i).ang = double(typecast(uint8(data(11+(i-1)*14:14+(i-1)*14)),'single'));
- end
- case robot_enum.mode_C
- data = fread(obj.socket,obj.robots_control_quantity*14,'uint8');
- for i=1:1:obj.robots_control_quantity
- obj.detect_list(i).id = data(1+(i-1)*14);
- obj.detect_list(i).detect = data(2+(i-1)*14);
- obj.detect_list(i).x = double(typecast(uint8(data(3+(i-1)*14:6+(i-1)*14)),'single'));
- obj.detect_list(i).y = double(typecast(uint8(data(7+(i-1)*14:10+(i-1)*14)),'single'));
- obj.detect_list(i).ang = double(typecast(uint8(data(11+(i-1)*14:14+(i-1)*14)),'single'));
- end
- end
- else
- obj.com_status = robot_enum.error;
- obj.disconnect;
- end
- catch
- obj.com_status = robot_enum.error;
- obj.disconnect;
- end
- end
- function obj = set_motion(obj) %wys�anie sterowania
- try
- switch obj.com_status
- case {robot_enum.mode_C,robot_enum.mode_MC}
- temp1 = reshape(obj.control_list',1,[]);
- temp2 = temp1(1:obj.robots_control_quantity*2);
- data = [uint8(5) typecast(single(temp2),'uint8')];
- fwrite(obj.socket,data,'uint8');
- if fread(obj.socket,1,'uint8') ~= 6
- obj.com_status = robot_enum.error;
- obj.disconnect;
- end
- end
- catch
- obj.com_status = robot_enum.error;
- obj.disconnect;
- end
- end
- end
- end
Add Comment
Please, Sign In to add comment