Matlab - 串口操作_數據采集(轉)


matlab功能強大,串口操作也很簡單,相信看過以下兩個實驗你就能掌握咯!開始吧!

實驗1:

從電腦COM2口讀取數據,並將數據保存在TXT文件中,方便數據分析,下面是M腳本:

  1. %名 稱:Matlab串口-Lab1  
  2. %描 述:串口讀,並寫入txt文件中  
  3. s=serial('com2');  
  4. s.BytesAvailableFcnMode='byte';  % 串口設置  
  5. s.InputBufferSize=4096;  
  6. s.OutputBufferSize=1024;  
  7. s.BytesAvailableFcnCount=100;  
  8. s.ReadAsyncMode='continuous';  
  9. s.Terminator='CR';  
  10. fopen(s);                  %打開串口  
  11. out=fread(s,10,'uint8');   %一次讀出10個字符    
  12. fprintf('%3c',out);        %一個字符占三位輸出,%c字符,%d整型  
  13.   
  14. fid=fopen('serial_data.txt','w+'); % 'a+'讀寫方式打開,將文件指針指向文件末尾。如果文件不存在則嘗試創建之  
  15. fprintf(fid,'%3c',out);            % 寫入文件中          
  16. fclose(fid);  
  17.   
  18. fclose(s);  
  19. delete(s);  

實驗2:

 

同樣的功能,用函數寫更規范,代碼如下:

  1. % 打開串口  
  2. function scom = OpenSerial(sname, HReadFcn)  
  3. scom = serial(sname);  
  4. scom.BytesAvailableFcnMode = 'terminator';  
  5. scom.Terminator = '.';  
  6. scom.BytesAvailableFcn = HReadFcn;  
  7. try  
  8. fopen(scom);  
  9. catch err  
  10. fprintf('%s打開失敗。\n', sname);  
  11. end  
  12. fprintf('%s成功打開。\n', sname);  
  13. end  
  14. % 寫串口  
  15. function WriteSerial(scom, str)  
  16. fprintf(scom, str ,'async'); % 異步方式  
  17. end  
  18. % 讀串口回調函數  
  19. function ReadFcn_Com2(obj, ~)  
  20. n = get(obj, 'BytesAvailable');  
  21. if n  
  22. a = fread(obj, n, 'uchar');  
  23. c = char(a');  
  24. fprintf('%s\n', c);  
  25. end  
  26. end  
  27. % 關閉串口  
  28. function CloseSerial(scom)  
  29. try  
  30. fclose(scom);  
  31. catch err  
  32. fprintf('%s關閉失敗。', scom.Name);  
  33. return  
  34. end  
  35. delete(scom);  
  36. end  

 

仿真如下,使用虛擬串口連接串口2和3,打開串口調試助手,以默認方式打開com3

在matlab命令框中如下輸入命令打開串口com2

>> scom =OpenSerial('com2', @ReadFcn_Com2);

com2成功打開。

    向com2寫

>>WriteSerial(scom, 'Hello!');

串口調試助手收到信息

 

用串口調試助手回復matlab,點上圖中的手動發送(發送的信息已英文句號.結束),matlab中收到信息

Hello, Matlab.

>> 

    關閉串口

>> CloseSerial(scom)

部分參考:http://blog.sina.com.cn/s/blog_6163bdeb0102e8qc.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM