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 |