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

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

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

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

  • Указанные данные записываются.

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

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

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

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

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

Операция чтения с fgetl, fgets, fread, fscanf, или readasync завершает, когда одно из следующих условий удовлетворено:

  • Задана линия EOI.

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

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

  • Считалось заданное количество значений (fread, fscanf, и readasync только).

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

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

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

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

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

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

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

Примечание

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

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

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

  1. Создайте объект инструмента - Создайте объект GPIB g связанные с National Instruments ™® Контроллер GPIB с индексом платы 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

По умолчанию линия End или Identify (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, смотрите Использование заполнения клавишей Tab для функций.

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

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

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

  • Тайм-аут происходит в соответствии с Timeout свойство

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

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

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

  • Тайм-аут происходит в соответствии с Timeout свойство

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

  • Считалось заданное количество значений

  • Задана линия EOI

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

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

Примечание

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

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

  1. Создайте объект инструмента - Создайте объект GPIB g сопоставлен с National Instruments ™ контроллером GPIB с индексом платы 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 функция для анализа данных, считанных с осциллографа Tektronix TDS 210. scanstr особенно полезно, когда необходимо проанализировать строку в один или несколько элементов массива ячеек, где каждый элемент определяется как двойной или символьный вектор:

  1. Создайте объект инструмента - Создайте объект GPIB g сопоставлен с National Instruments ™ контроллером GPIB с индексом платы 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 сопоставлен с National Instruments ™ контроллером GPIB с индексом платы 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». The EOIMode свойство настроено на on так, чтобы линия EOI утверждалась после записи последнего байта. The EOSMode свойство настроено на read так, чтобы операция 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