readasync

Считайте данные асинхронно из инструмента

Синтаксис

readasync(obj)
readasync(obj,size)

Аргументы

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 и постоянно возвращать данные во входной буфер, как только это доступно от инструмента.

Представлено до R2006a