Запись и чтение данных

Правила для завершения записи и операций чтения

Завершение операций записи

Операция записи с помощью fprintf или fwrite завершается, когда одному из этих условий удовлетворяют:

  • Заданные данные записаны.

  • Время задано Timeout передачи свойства.

Кроме того, можно остановить асинхронную операцию записи в любое время с stopasync функция.

Инструмент определяет, завершена ли операция записи на основе EOSMode, EOIMode, и EOSCharCode значения свойств. Если EOSMode сконфигурирован к любому write или read&write, каждое вхождение \n в тексте команда заменяется символом Конца строки (EOS), заданным EOSCharCode значение. Поэтому, когда вы используете fprintf по умолчанию формат %s\n, все текстовые команды, записанные в инструмент, закончатся тем значением. EOSCharCode по умолчанию значением является LF, который соответствует символу перевода строки. Символ EOS, требуемый вашим инструментом, будет описан в его документации.

Если EOIMode on, затем линия Конца или идентифицирует (EOI) утверждается, когда последний байт записан в инструмент. Последний байт может быть частью потока двоичных данных или текстового потока данных. Если EOSMode сконфигурирован к любому write или read&write, затем последним записанным байтом является EOSCharCode значение и линия EOI утверждаются, когда инструмент получает этот байт.

Завершение операций чтения

Операция чтения с fgetlfgetsfreadfscanf, или readasync завершается, когда одному из этих условий удовлетворяют:

  • Линия EOI утверждается.

  • Терминатор строки задан EOSCharCode свойство читается. Это может произойти только когда EOSMode свойство сконфигурировано к любому read или read&write.

  • Время задано Timeout передачи свойства.

  • Конкретное количество значений читается (freadfscanf, и readasync только).

  • Входной буфер заполнен (если количество значений не задано).

В дополнение к этим правилам можно остановить асинхронную операцию чтения в любое время с stopasync функция.

Запись и чтение текстовых данных

Эти функции используются при чтении и записи текста:

ФункцияЦель
fprintfЗапишите текст в инструмент.
fscanfСчитайте данные из инструмента и отформатируйте как текст.

Эти свойства сопоставлены с чтением и записью текста:

СвойствоЦель
ValuesReceivedЗадает общее количество значений, считанных из инструмента.
ValuesSentЗадает общее количество значений, отправленных в инструмент.
InputBufferSizeЗадает общее количество байтов, которые могут быть поставлены в очередь во входном буфере одновременно.
OutputBufferSizeЗадает общее количество байтов, которые могут быть поставлены в очередь в буфере вывода одновременно.
EOSModeКонфигурирует режим завершения Конца Строки.
EOSCharCodeЗадает терминатор строки Конца Строки.
EOIModeВключает или отключает утверждение режима EOI в конце операции записи.

Примечание

Чтобы получить список опций, можно использовать на функции, нажать клавишу Tab после ввода функции на командной строке MATLAB®. Список расширяется, и можно прокрутить, чтобы выбрать свойство или значение. Для получения информации об использовании этой функции завершения вкладки "Дополнительно" смотрите Используя Заполнение клавишей Tab для Функций.

Следующий пример иллюстрирует, как связаться с инструментом GPIB путем записи и чтения текстовых данных.

Инструментом является Tektronix® TDS 210 двухканальный осциллограф. Поэтому многие используемые команды характерны для этого инструмента. Синусоида вводится в канал 2 из осциллографа, и ваше задание должно измерить напряжение от пика к пику входного сигнала:

  1. Создайте инструментальный объект — Создают объект GPIB g сопоставленный с Национальным контроллером GPIB Instruments™ с параметром плат 0 и инструментом с первичным адресом 1.

    g = gpib('ni',0,1);
  2. Свяжите с инструментом — Подключение g к осциллографу, и возвращают значения по умолчанию для EOSMode и EOIMode свойства.

    fopen(g)
    get(g,{'EOSMode','EOIMode'})
    ans = 
        'none'    'on' 

    Используя эти значения свойств, завершаются операции записи, когда последний байт записан в инструмент и операции чтения, завершенные, когда линия EOI утверждается инструментом.

  3. Запишите и считайте данные — Запись *IDN? команда к инструментальному использованию fprintf, и затем считайте назад результат использования команды fscanf.

    fprintf(g,'*IDN?')
    idn = fscanf(g)
    idn =
    TEKTRONIX,TDS 210,0,CF:91.1CT FV:v1.16 TDS2CM:CMV:v1.04

    Определите источник измерения. Возможные источники измерения включают канал 1 и канал 2 из осциллографа.

    fprintf(g,'MEASUREMENT:IMMED:SOURCE?')
    source = fscanf(g)
    source =
    CH1

    Осциллограф сконфигурирован, чтобы возвратить измерение в канал 1. Поскольку входной сигнал соединяется с каналом 2, необходимо сконфигурировать инструмент, чтобы возвратить измерение в этот канал.

    fprintf(g,'MEASUREMENT:IMMED:SOURCE CH2')
    fprintf(g,'MEASUREMENT:IMMED:SOURCE?')
    source = fscanf(g)
    source =
    CH2

    Можно теперь сконфигурировать осциллограф, чтобы возвратить напряжение от пика к пику, запросить значение этого измерения, и затем возвратить значение напряжения к программному обеспечению IEEE® с помощью fscanf.

    fprintf(g,'MEASUREMENT:MEAS1:TYPE PK2PK')
    fprintf(g,'MEASUREMENT:MEAS1:VALUE?')
    ptop = fscanf(g)
    ptop =
    2.0199999809E0
  4. Разъединитесь и вымойтесь — Когда вам больше не будет нужен g, необходимо отключить его от инструмента и удалить его из памяти и из рабочей области IEEE.

    fclose(g)
    delete(g)
    clear g

Свойства записи ASCII

По умолчанию линия Конца или идентифицирует (EOI) утверждается, когда последний байт записан в инструмент. Этим поведением управляет EOIMode свойство. Когда EOIMode установлен в on, линия EOI утверждается, когда последний байт записан в инструмент. Когда EOIMode установлен в off, линия EOI не утверждается, когда последний байт записан в инструмент.

Линия EOI может также утверждаться, когда терминатор строки записан в инструмент. Терминатор строки задан EOSCharCode свойство. Когда EOSMode сконфигурирован к write или read&write, линия EOI утверждается когда EOSCharCode значение свойства записано в инструмент.

Все случаи \n в команде, записанной в инструмент, заменяются EOSCharCode значение свойства, если EOSMode установлен в write или read&write.

Чтение и запись двоичных данных

Эти функции используются при чтении и записи двоичных данных:

ФункцияЦель
freadСчитайте двоичные данные из инструмента.
fwriteЗапишите двоичные данные в инструмент.

Эти свойства сопоставлены с чтением и записью двоичных данных:

СвойствоЦель
ValuesReceivedЗадает общее количество значений, считанных из инструмента.
ValuesSentЗадает общее количество значений, отправленных в инструмент.
InputBufferSizeЗадает общее количество байтов, которые могут быть поставлены в очередь во входном буфере одновременно.
OutputBufferSizeЗадает общее количество байтов, которые могут быть поставлены в очередь в буфере вывода одновременно.
EOSModeКонфигурирует режим завершения Конца Строки.
EOSCharCodeЗадает терминатор строки Конца Строки.

Примечание

Чтобы получить список опций, можно использовать на функции, нажать клавишу Tab после ввода функции на командной строке MATLAB. Список расширяется, и можно прокрутить, чтобы выбрать свойство или значение. Для получения информации об использовании этой функции завершения вкладки "Дополнительно" смотрите Используя Заполнение клавишей Tab для Функций.

Вы используете fwrite функционируйте, чтобы записать двоичные данные в инструмент.

По умолчанию, fwrite функция действует в синхронном режиме. Это означает тот fwrite блокирует командную строку MATLAB, пока одно из следующего не происходит:

  • Все данные записаны

  • Тайм-аут происходит, как задано Timeout свойство

По умолчанию fwrite функционируйте пишут двоичные данные с помощью uchar точность. Однако другая точность может также использоваться. Для списка поддерживаемой точности смотрите страницу ссылки на функцию для fwrite.

Вы используете fread функционируйте, чтобы считать двоичные данные из инструмента.

fread функциональные блоки командная строка MATLAB до одного из следующего происходят:

  • Тайм-аут происходит, как задано Timeout свойство

  • Входной буфер заполнен

  • Конкретное количество значений читается

  • Линия EOI утверждается

  • Терминатор строки получен, как задано EOSCharCode свойство (если задано)

По умолчанию fread функционируйте считывает двоичные данные с помощью uchar точность. Однако другая точность может также использоваться. Для списка поддерживаемой точности смотрите страницу ссылки на функцию для fread.

Примечание

При выполнении операции чтения или операции записи, необходимо думать о полученных данных в терминах значений, а не байтов. Значение состоит из одного или нескольких байтов. Например, один uint32 значение состоит из четырех байтов.

Следующий пример иллюстрирует, как можно загрузить отображение на экране осциллографа TDS 210 на программное обеспечение IEEE. Данные об отображении на экране передаются программному обеспечению IEEE и сохранили использование на диск растрового формата Windows®. Эти данные обеспечивают постоянную запись вашей работы и являются простым способом зарегистрировать важный сигнал и параметры осциллографа:

  1. Создайте инструментальный объект — Создают объект GPIB g сопоставленный с контроллером GPIB National Instruments с параметром плат 0 и инструментом с первичным адресом 1.

    g = gpib('ni',0,1);
  2. Сконфигурируйте значения свойств — Конфигурируют входной буфер, чтобы принять довольно большое количество байтов и сконфигурировать значение тайм-аута к двум минутам с учетом медленной передачи данных.

    g.InputBufferSize = 50000;
    g.Timeout = 120;
  3. Свяжите с инструментом — Подключение g к осциллографу.

    fopen(g)
  4. Запишите и считайте данные — Конфигурируют осциллограф, чтобы передать отображение на экране как битовый массив.

    fprintf(g,'HARDCOPY:PORT GPIB')
    fprintf(g,'HARDCOPY:FORMAT BMP')
    fprintf(g,'HARDCOPY START')

    Асинхронно передайте данные от инструмента до входного буфера.

    readasync(g)

    Ожидайте, пока операция чтения не завершается, и затем передайте данные рабочей области IEEE как 8-битные целые числа без знака.

    g.TransferStatus
    ans =
    idle
    out = fread(g,g.BytesAvailable,'uint8');
  5. Разъединитесь и вымойтесь — Когда вам больше не будет нужен g, необходимо отключить его от инструмента и удалить его из памяти и из рабочей области IEEE.

    fclose(g)
    delete(g)
    clear g

Просмотр растровых данных

Чтобы просмотреть растровые данные, необходимо выполнить эти шаги:

  1. Откройте дисковый файл.

  2. Запишите данные в дисковый файл.

  3. Закройте дисковый файл.

  4. Считайте данные с помощью imread функция.

  5. Масштабируйте и отобразите данные с помощью imagesc функция.

Обратите внимание на то, что версии ввода-вывода программного файла MATLAB fopen, fwrite, и fclose функции используются.

fid = fopen('test1.bmp','w');
fwrite(fid,out,'uint8');
fclose(fid)
a = imread('test1.bmp','bmp');

Отобразите изображение.

imagesc(a)

Используйте серую палитру, поскольку инструмент только генерирует полутоновые изображения.

c = colormap(gray);
colormap(flipud(c));

Изображение полученного растрового изображения показывают ниже.

Парсинг Входных данных Используя scanstr

Этот пример иллюстрирует, как использовать scanstr функционируйте, чтобы проанализировать данные, которые вы считываете из осциллографа Tektronix TDS 210. scanstr особенно полезно, когда это необходимо, чтобы проанализировать строку в один или несколько элементов массива ячеек, где каждый элемент полон решимости быть или двойным или вектором символов:

  1. Создайте инструментальный объект — Создают объект GPIB g сопоставленный с контроллером GPIB National Instruments с параметром плат 0 и инструментом с первичным адресом 1.

    g = gpib('ni',0,1);
  2. Свяжите с инструментом — Подключение g к осциллографу.

    fopen(g)
  3. Запишите и считайте данные — Возвращают идентификационную информацию, чтобы разделить элементы массива ячеек с помощью разделителей по умолчанию.

    fprintf(g,'*IDN?');
    idn = scanstr(g)
    idn = 
        'TEKTRONIX'
        'TDS 210'
        [        0]
        'CF:91.1CT FV:v1.16 TDS2CM:CMV:v1.04'
  4. Разъединитесь и вымойтесь — Когда вам больше не будет нужен g, необходимо отключить его от инструмента и удалить его из памяти и из рабочего пространства MATLAB.

    fclose(g)
    delete(g)
    clear g

Понимание EOI и EOS

Этот пример иллюстрирует, как линия EOI и символ EOS используются, чтобы завершить операции чтения и операции записи, и как EOIMode, EOSMode, и EOSCharCode свойства связаны друг с другом. В большинстве случаев можно успешно связаться с инструментом путем принятия значений по умолчанию для этих свойств.

Значение по умолчанию для EOIMode on, что означает, что линия EOI утверждается, когда последний байт записан в инструмент. Значение по умолчанию для EOSMode none, что означает что EOSCharCode значение не записано в инструмент, и операции чтения не завершатся когда EOSCharCode значение читается. Поэтому, когда вы используете значения по умолчанию для EOIMode и EOSMode,

  • Операции записи завершаются, когда последний байт записан в инструмент.

  • Операции чтения завершаются, когда линия EOI утверждается инструментом.

  1. Создайте инструментальный объект — Создают объект GPIB g сопоставленный с контроллером GPIB National Instruments с параметром плат 0 и инструментом с первичным адресом 1.

    g = gpib('ni',0,1);
  2. Свяжите с инструментом — Подключение g к осциллографу.

    fopen(g)
  3. Запишите и считайте данные — Конфигурируют g так, чтобы линия EOI не утверждалась после того, как последний байт записан в инструмент, и символ EOS используется, чтобы завершить операции записи. Формат по умолчанию для fprintf %s\n, где \n заменяется символом EOS, как дано EOSCharCode.

    g.EOIMode = 'off';
    g.EOSMode = 'write';
    fprintf(g,'*IDN?')
    out = fscanf(g)
    out =
    
    TEKTRONIX,TDS 210,0,CF:91.1CT FV:v1.16 TDS2CM:CMV:v1.04

    Несмотря на то, что EOSMode сконфигурирован так, чтобы операции чтения не завершались после получения символа EOS, предыдущая операция чтения, за которой следуют, потому что линия EOI утверждалась.

    Теперь сконфигурируйте g так, чтобы символ EOS не использовался, чтобы завершить операции чтения или операции записи. Поскольку линия EOI не утверждается, и символ EOS не записан, инструмент не может интерпретировать *IDN? команда и тайм-аут происходят.

    g.EOSMode = 'none';
    fprintf(g,'*IDN?')
    out = fscanf(g)
    
    Warning: GPIB: NI: An I/O operation has been canceled mostly 
    likely due to a timeout.

    Теперь сконфигурируйте g так, чтобы операция чтения завершила работу после “X” читается символ. EOIMode свойство сконфигурировано к on так, чтобы линия EOI утверждалась после того, как последний байт записан. EOSMode свойство сконфигурировано к read так, чтобы операция чтения завершилась когда EOSCharCode значение читается.

    g.EOIMode = 'on';
    g.EOSMode = 'read';
    g.EOSCharCode = 'X';
    fprintf(g,'*IDN?')
    out = fscanf(g)
    out =
    
    TEKTRONIX

    Обратите внимание на то, что остальная часть идентификационной строки остается в аппаратном буфере инструмента. Если вы не хотите возвращать эти данные во время следующей операции чтения, необходимо очиститься, это от инструмента буферизует с clrdevice функция.

    clrdevice(g)
  4. Разъединитесь и вымойтесь — Когда вам больше не будет нужен g, необходимо отключить его от инструмента и удалить его из памяти и из рабочего пространства MATLAB.

    fclose(g)
    delete(g)
    clear g