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