Считайте данные асинхронно из инструмента
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
и постоянно возвращать данные во входной буфер, как только это доступно от инструмента.
BytesAvailable
| BytesAvailableFcn
| ReadAsyncMode
| Status
| TransferStatus
| fopen
| stopasync