当前位置:文档之家› MATLAB串口通信

MATLAB串口通信

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%本程序主要实现串口控制三轴转台进行自动标定,%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%查找串口对象,若串口一开始被占用,需要加上这段程序释放串口,若串口没有被占用,则不需要这段程序scoms=instrfind;%%尝试停止、关闭删除串口对象stopasync(scoms);fclose(scoms);%关闭串口delete(scoms);%释放串口%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%clear all;clc;%%%%%串口配置通道1global s;s=serial('COM13');%设置串口号s.baudrate=57600;%设置波特率s.parity='none';%校验位s.stopbits=1;%停止位s.databits=7;%数据位s.timeout=2;%一次读/写的时间最长为0.5ss.InputBufferSize=1024;%输入缓冲区s.OutputBufferSize=1024;%输出缓冲区%s.BytesAvailableFcnMode='byte';%中断触发事件为'bytes-available event' %s.BytesAvailableFcnCount=8;%接收缓冲区每收到n个字节时,触发回调函数%s.BytesAvailableFcn={'cmd_rec_callback',handles};%得到回调函数句柄fopen(s);%%%%打开串口fclose(s);%%%%%串口配置通道2global s2;s2=serial('COM15');%设置串口号s2.baudrate=460800;%设置波特率s2.parity='none';%校验位s2.stopbits=1;%停止位s2.databits=8;%数据位s2.timeout=2;%一次读/写的时间最长为0.5ss2.InputBufferSize=1024;%输入缓冲区s2.OutputBufferSize=1024;%输出缓冲区%s.BytesAvailableFcnMode='byte';%中断触发事件为'bytes-available event' %s.BytesAvailableFcnCount=8;%接收缓冲区每收到n个字节时,触发回调函数%s.BytesAvailableFcn={'cmd_rec_callback',handles};%得到回调函数句柄fopen(s2);%%%%打开串口fclose(s2);%InitPos(1)=InitPos(1)+0.3%Pos1=num2str(InitPos(1)');%Pos1=['Q010',Pos1(1,:),'$'];%A=[00000000000];%fwrite(s2,A,'uint8')%AA=fread(s2,11,'uint8')%%%%%%%定义变量,存放星点位置PosX=zeros(41,51);PosY=zeros(41,51);AllX=zeros(30,2091);AllY=zeros(30,2091);n=1;InitPos=[0.30.000093.4253];Flag=0;MouseX=1354;MouseY=376;LeftC=1;global filename4;global filename5;filename4=['D:\1-3\*.bmp'];filename5=['D:\1-3\'];%%%%%%%三轴转台,自动标定for j=1:41fopen(s);for i=1:51%%%%%%%%%%%控制鼠标左键,采集图像PressMouse(MouseX,MouseY,LeftC);PressMouse(MouseX,MouseY,LeftC);pause(5);%等待整数秒%%%%%%%%%%%%%读取转台位置坐标,进行反馈控制fopen(s2);[Flag]=ReadCoor(s2,InitPos);fclose(s2);while(Flag==1)%%%%%%%%%%%%%删除上次存储的点的图片filename6=dir(filename4);%显示xxx目录下的文件和文件夹[~,index]=sortrows({filename6.date}.');%index变址向量,重新排序前的地址filename6=filename6(index);clear indexpath=[filename5];%查看或者改变路径for k=(length(filename6)-29):length(filename6)A=[path filename6(k).name];delete(A);end%%%%%%%%%%%%%向内轴发定位命令,位置:12.3456?;ASC码:Q01012.3456$;16进制数:51H30H30H31H31H32H2EH33H34H35H36H24HPos1=num2str(InitPos(1)');Pos1=['Q010',Pos1(1,:),'$'];fwrite(s,Pos1,'char')pause(2);%%%%%%%%%%%%%向中轴发定位命令,位置:12.3456?;ASC码:Q01112.3456$;16进制数:51H30H31H31H31H32H2EH33H34H35H36H24HPos2=num2str(InitPos(2)');Pos2=['Q011',Pos2(1,:),'$'];fwrite(s,Pos2,'char');pause(2);%%%%%%%%%%%%%向外轴发定位命令,位置:12.3456?;ASC码:Q01212.3456$;16进制数:51H30H32H31H31H32H2EH33H34H35H36H24HPos3=num2str(InitPos(3)');Pos3=['Q012',Pos3(1,:),'$'];fwrite(s,Pos2,'char');fclose(s);pause(2);%%%%%%%%%%%控制鼠标左键,采集图像PressMouse(MouseX,MouseY,LeftC);PressMouse(MouseX,MouseY,LeftC);pause(5);%等待整数秒%B=[01234560000000];%fwrite(s2,B,'uint8')fopen(s2);[Flag]=ReadCoor(s2,InitPos);fclose(s2);end%%%%%%%%%%中轴坐标位置一次-0.3°InitPos(2)=InitPos(2)-0.3;%%%%%%%%串口给转台发送命令,设定增量模式,中框增量-0.3°,ASC码:Q021-0.3$16进制数:513032312D302E3324fwrite(s,'Q021-0.3$','char');pause(3);%等待整数秒end%%%%%%%%%每个点找一张图存到新建文件夹filename=['D:\',num2str(j)]new_folder=filename;%new_folder保存要创建的文件夹,是绝对路径+文件夹名称mkdir(new_folder);%mkdir()函数创建文件夹filename=dir(filename5);[~,index]=sortrows({filename.date}.');%index变址向量,重新排序前的地址filename=filename(index);clear indexfor r=1:51k=30*(r-1)+1;path=[filename5];A0=imread([path filename(k).name]);imshow(A0);B=['D:\j\',num2str(r),'.bmp'];imwrite(A0,B,'bmp');endfwrite(s,'Q02115$','char');pause(5);%%%%%%%%%%计算星点坐标[x,y,x0,y0]=SigleStarPointCalibration(j,filename4,filename5);PosX(j,:)=x;PosY(j,:)=y;AllX(:,n*51-50)=x0;AllY(:,n*51-50)=y0;n=n+1;%%%%%%%%%%中轴坐标位置回到初始位置InitPos(2)=InitPos(2)+15.3;%%%%%%%%%%内轴坐标位置增量+0.3°InitPos(1)=InitPos(1)+0.3;if(InitPos(1)>360)InitPos(1)=InitPos(1)-360;end%%%%%%%%串口给转台发送命令,增量模式,内框增量-0.3°,ASC码:Q0100.3$16进制数:51303230302E3324fwrite(s,'Q0200.3$','char');pause(3);%等待整数秒fclose(s);end%%%%%%%关闭串口fclose(s);%查找串口对象scoms=instrfind;%尝试停止、关闭删除串口对象stopasync(scoms);fclose(scoms);%关闭串口delete(scoms);%释放串口。

相关主题