Считайте данные асинхронно из устройства
readasync(obj)
readasync(obj,size)
readasync(obj)
инициирует асинхронную операцию чтения на объекте последовательного порта, obj
.
readasync(obj,size)
асинхронно чтения, самое большее, количество байтов, данных size
. Если size
больше, чем различие между значением свойства InputBufferSize
и значением свойства BytesAvailable
, ошибка возвращена.
Этот пример создает объект последовательного порта s
на платформе Windows®. Это соединяет s
с осциллографом Tektronix® TDS 210, конфигурирует s
, чтобы считать данные асинхронно, только если readasync
выпущен и конфигурирует инструмент, чтобы возвратить пик к пиковому значению сигнала на канале 1.
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
. Когда операция чтения будет завершена, возвратите данные в рабочую область MATLAB® с помощью fscanf
.
readasync(s) s.BytesAvailable
ans = 15
out = fscanf(s)
out = 2.0399999619E0
fclose(s)
Прежде чем можно будет считать данные, необходимо соединить obj
с устройством с функцией fopen
. Связанный объект последовательного порта имеет значение свойства Status
open
. Ошибка возвращена, при попытке выполнить операцию чтения, в то время как obj
не соединяется с устройством.
Только используйте readasync
, чтобы сконфигурировать свойство ReadAsyncMode
к manual
. readasync
проигнорирован, если используется, когда ReadAsyncMode
является continuous
.
Свойство TransferStatus
указывает, происходят ли асинхронная операция чтения или операция записи. Можно записать данные, в то время как асинхронное чтение происходит, потому что последовательные порты имеют отдельное чтение и контакты записи. Можно остановить асинхронные операции чтения и операции записи с функцией stopasync
.
Можно контролировать объем данных, сохраненный во входном буфере свойством BytesAvailable
. Кроме того, можно использовать свойство BytesAvailableFcn
выполнить функцию обратного вызова, когда терминатор строки или заданный объем данных читаются.
Асинхронная операция чтения с readasync
завершается, когда одно из этих условий соблюдают:
Считался терминатор строки, заданный как свойство Terminator.
Прошло время, заданное как свойство Timeout.
Конкретное количество байтов читается.
Входной буфер заполнен (если size
не задан).
Поскольку проверки readasync
на терминатор строки, эта функция может быть медленной. Чтобы увеличить скорость, вы можете хотеть сконфигурировать ReadAsyncMode
к continuous
и постоянно возвращать данные во входной буфер, как только это доступно от устройства.
BytesAvailable
| BytesAvailableFcn
| ReadAsyncMode
| Status
| TransferStatus
| fopen
| stopasync