exponenta event banner

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

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

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

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

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

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

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

Инструмент определяет, завершена ли операция записи на основе EOSMode, EOIMode, и EOSCharCode значения свойств. Если EOSMode настроен на write или read&write, каждое возникновение \n в текстовой команде заменяется символом конца строки (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 ®. Список расширяется, и можно выполнить прокрутку для выбора свойства или значения. Сведения об использовании этой расширенной функции завершения вкладки см. в разделе Использование функции завершения вкладки для функций.

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

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

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

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

Вы используете 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