| MATLAB Function Reference | ![]() |
Syntax
readasync(obj)
readasync(obj,size)
Arguments
obj |
A serial port object. |
size |
The number of bytes to read from the device. |
Description
readasync(obj)
會開始進行一個非同步的(asynchronous)讀取操作。
readasync(obj,size)
非同步地讀取參數 size 所指定的位元組資料量(至多)。若 size 大於 InputBufferSize 屬性值與 BytesAvailable 屬性值間的差距,會回傳一個錯誤。
Remarks
在你能夠讀取資料前,你必須利用 fopen 函式將 obj 與裝置連結。一個經連結的序列埠物件會有一個 open 的 Status 屬性值。當 obj 未與此裝置連結時,若你企圖執行一個讀取操作,會回傳一個錯誤。
唯有當你將 ReadAsyncMode 屬性設定為 manual 時,才必須使用 readasync 函式。當 ReadAsyncMode 為 continuous 時,若使用 readasync 會被忽略。
TransferStatus 屬性會指示出讀或寫的操作是否在進行中。在一個非同步的讀取操作進行中時,你是可以寫入資料的。因為序列埠擁有分離的讀和寫的插腳(pins)。你可以利用 stopasync 函式來停止非同步的讀及寫的操作。
你可以利用 BytesAvailable 屬性來監視儲存在輸入緩衝區(input buffer)的資料量。此外,在讀至檔案結束字元(terminator)或指定的資料量已被讀取時,你可以使用 BytesAvailableFcn 性質來執行一個 M 檔案的反應函式( callback function)。
Rules for Completing an Asynchronous Read Operation
當下列這些條件之一成立時,一個利用 readasync 函式的非同步的讀取操作已完成:
Terminator 屬性所指定的終止字元(terminator)已被讀取。Timeout 屬性所指定的時間。size)。由於 readasync 會檢查終止字元,因此該函式可能是相當慢的。為了增進速度,你可能會想要將 ReadAsyncMode 設定成 continuous,並將資料從該裝置連續地回傳至輸入緩衝區,只要該緩衝區是可使用的。
Example
這個範例建立了序列埠物件 s,並將 s 連結至一個 Tektronix TDS 210 示波器,且將 s 設定成唯有給予 readasync 命令時,才非同步地讀取資料。並設定該儀器在頻道 1 回傳訊號的峰值到峰值(peak-to-peak value)。
s = serial('COM1');
fopen(s)
s.ReadAsyncMode = 'manual';
fprintf(s,'Measurement:Meas1:Source CH1')
fprintf(s,'Measurement:Meas1:Type Pk2Pk')
fprintf(s,'Measurement:Meas1:Value?')
使用 readasync 自該儀器開始非同步地讀取資料。當該讀取操作完成時,使用 fscanf 將資料回傳至 MATLAB 的工作空間。
readasync(s)
s.BytesAvailable
ans =
15
out = fscanf(s)
out =
2.0399999619E0
fclose(s)
Functions
Properties
BytesAvailable, BytesAvailableFcn, ReadAsyncMode, Status, TransferStatus
| rcond | real | ![]() |