Считайте данные асинхронно из инструмента
readasync(obj)
readasync(obj,size)
| Интерфейсный объект. |
| Количество байтов, чтобы читать из инструмента. |
readasync(obj)
инициирует асинхронную операцию чтения.
readasync(obj,size)
асинхронно чтения, самое большее, количество байтов задано size
. Если size
больше различия между InputBufferSize
значение свойства и BytesAvailable
значение свойства, ошибка возвращена.
Этот пример создает объект последовательного порта s
, подключения s
к осциллографу Tektronix® TDS 210, конфигурирует s
на машине Windows®, чтобы считать данные асинхронно, только если 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?')
Первоначально, во входном буфере нет никаких данных.
s.BytesAvailable ans = 0
Начните считывать данные асинхронно из инструмента с помощью readasync
. Когда операция чтения будет завершена, возвратите данные в использование рабочей области MATLAB® fscanf
.
readasync(s) s.BytesAvailable ans = 15 out = fscanf(s) out = 2.0399999619E0 fclose(s)
Прежде чем можно будет считать данные, необходимо соединить obj
к инструменту с fopen
функция. Связанный интерфейсный объект имеет Status
значение свойства open
. Ошибка возвращена, при попытке выполнить операцию чтения в то время как obj
не соединяется с инструментом.
Для последовательного порта, TCPIP, UDP и последовательных ВИЗОЙ объектов, необходимо использовать readasync
только, когда вы конфигурируете ReadAsyncMode
свойство к manual
readasync
проигнорирован, если используется когда ReadAsyncMode
continuous
.
TransferStatus
свойство указывает, происходят ли асинхронная операция чтения или операция записи. Для всех интерфейсных объектов вы не можете использовать readasync
в то время как операция чтения происходит. Для последовательного порта и последовательных ВИЗОЙ объектов, можно записать данные, в то время как асинхронное чтение происходит, потому что последовательные порты имеют отдельное чтение и контакты записи. Можно остановить асинхронные операции чтения и операции записи с stopasync
функция.
Можно контролировать объем данных, сохраненный во входном буфере BytesAvailable
свойство. Кроме того, можно использовать BytesAvailableFcn
свойство выполнить функцию обратного вызова, когда терминатор строки или заданный объем данных читаются.
Асинхронная операция не поддерживается для NI объекты VISA на платформе UNIX®. Таким образом, если вы используете readasync
функция с объектом NI VISA, вы получите ошибку.
Примечание
Чтобы получить список опций, можно использовать на функции, нажать клавишу Tab после ввода функции на командной строке MATLAB. Список расширяется, и можно прокрутить, чтобы выбрать свойство или значение. Для получения информации об использовании этой функции завершения вкладки "Дополнительно" смотрите Используя Заполнение клавишей Tab для Функций.
Асинхронная операция чтения с readasync
завершается, когда одно из этих условий соблюдают:
Терминатор строки читается. Для последовательного порта, TCPIP, UDP и последовательных ВИЗОЙ объектов, терминатор строки дан Terminator
свойство. Обратите внимание на то, что для объектов UDP, DatagramTerminateMode
должен быть off
.
Для всех других интерфейсных объектов кроме VISA-RSIB терминатор строки дан EOSCharCode
свойство.
Время задано Timeout
передачи свойства.
Конкретное количество байтов читается.
Входной буфер заполнен.
Дейтаграмма была получена (объекты UDP, только если DatagramTerminateMode
on
)
Линия EOI утверждается (только GPIB и инструменты VXI).
Для последовательного порта, TCPIP, UDP, и последовательных ВИЗОЙ объектов, readasync
может быть медленным, потому что это проверяет на терминатор строки. Чтобы увеличить скорость, вы можете хотеть сконфигурировать ReadAsyncMode
к continuous
и постоянно возвращайте данные во входной буфер, как только это доступно от инструмента.