Отладка: Запись информации к диску

Используя Функцию записи

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

  • Количество значений записано в инструмент, количество значений, считанных из инструмента и типа данных значений

  • Данные, записанные в инструмент и данные, считанные из инструмента

  • Информация о событии

Вы записываете информацию к дисковому файлу с функцией record. Свойства, сопоставленные с записью информации к диску, приведены ниже.

Recording Properties

PropertyName

Описание

RecordDetail

Задайте объем информации, сохраненный в файл записи.

RecordMode

Задайте, сохранены ли данные и информация о событии в один файл записи или в несколько файлов записи.

RecordName

Задайте имя файла записи.

RecordStatus

Укажите, сохранены ли данные и информация о событии в файл записи.

Введение в запись информации

Этот пример создает объект GPIB g, записывает количество значений, переданных между g и инструментом, и хранит информацию к тексту файла myfile.txt.

g = gpib('ni',0,1);
g.RecordName = 'myfile.txt';
fopen(g)
record(g)
fprintf(g,'*IDN?')
out = fscanf(g);

Закончите инструментальный сеанс управления.

fclose(g)
delete(g)
clear g

Используйте команду type, чтобы отобразить myfile.txt в командной строке.

Создание нескольких файлов записи

Когда вы инициируете запись с функцией record, свойство RecordMode определяет, создается ли новый файл записи или если новая информация добавлена к существующему файлу записи.

Можно сконфигурировать RecordMode к overwrite, append или index. Если RecordMode является overwrite, то файл записи перезаписывается, каждая запись времени инициируется. Если RecordMode является append, то новая информация добавлена к файлу, заданному RecordName. Если RecordMode является index, различный дисковый файл создается, каждая запись времени инициируется. Правила для определения имени файла записи обсуждены в Определении Имени файла.

Определение имени файла

Вы задаете имя файла записи со свойством RecordName. Можно задать любое значение для RecordName, включая путь к каталогу, если имя файла поддерживается операционной системой. Кроме того, если RecordMode является index, то имя файла следует этим правилам:

  • Индексируемые имена файлов идентифицированы номером. Это число предшествует расширению файла и увеличено 1 для последовательных файлов записи.

  • Если никакой номер не задан как часть начального имени файла, то первому файлу записи не сопоставили номер с ним. Например, если RecordName является myfile.txt, то myfile.txt является именем первого файла записи, myfile01.txt является именем второго файла записи и так далее.

  • RecordName обновляется после того, как файл записи закрывается.

  • Если заданное имя файла уже существует, то существующий файл перезаписывается.

Формат файла записи

Файлом записи является ASCII-файл, который содержит запись одного или нескольких инструментальных сеансов управления. Вы задаете объем информации, сохраненный в файл записи со свойством RecordDetail.

RecordDetail может быть compact или verbose. Компактный файл записи содержит количество значений, записанных в инструмент, количество значений, считанных из инструмента, типа данных значений и информации о событии. Многословный файл записи содержит предыдущую информацию, а также данные, переданные и от инструмента.

Двоичные данные с точностью, данной uchar, schar, (u) int8, (u) int16 или (u) int32, зарегистрированы как шестнадцатеричные значения. Например, если целочисленное значение 255 читается из инструмента как 16-битное целое число, шестнадцатеричное значение 00FF сохранено в файле записи. Один - и числа с плавающей запятой с двойной точностью зарегистрированы как десятичные значения с помощью формата %g, и как шестнадцатеричных значений с помощью формата, заданного IEEE® Standard 754-1985 для Бинарной Арифметики С плавающей точкой.

IEEE формат с плавающей точкой включает три компонента — знаковый бит, поле экспоненты и значительное поле. Значения с плавающей точкой с одинарной точностью состоят из 32 битов, и значением дают

value = (-1)sign(2exp-127)(1.significand)

Значения с плавающей точкой с двойной точностью состоят из 64 битов, и значением дают

value = (-1)sign(2exp-1023)(1.significand)

Компонент формата с плавающей точкой и связанные биты с двойной точностью и с одинарной точностью приведены ниже.

Компонент формата

Биты с одинарной точностью

Биты с двойной точностью

sign

1

1

exp

2-9

2-12

significand

10-32

13-64

Например, предположите, что вы записываете десятичное значение 4,25 использования формата с одинарной точностью. Хранилища файлов записи 4.25 как шестнадцатеричное значение 40880000, который вычисляется от IEEE формат с плавающей точкой с одинарной точностью. Чтобы восстановить исходное значение, преобразуйте шестнадцатеричное значение в десятичное значение с помощью hex2dec:

dval = hex2dec('40880000')
dval =
    1.082654720000000e+009

Преобразуйте десятичное значение в двоичное значение с помощью dec2bin:

bval = dec2bin(dval,32)
bval =
01000000100010000000000000000000

Интерпретация bval дана предыдущей таблицей. Левый большая часть бита указывает на значение, положителен потому что (-1) 0 = 1. Следующие 8 битов соответствуют экспоненте, которой дают

exp = bval(2:9)
exp =
10000001

Десятичное значение exp 27+20 = 129. Остающиеся биты соответствуют значительному, которым дают

significand = bval(10:32)
significand =
00010000000000000000000

Десятичное значение significand 2-4 = 0.0625. Вы восстанавливаете исходное значение путем включения десятичных значений exp и significand в формулу для одиночных игр IEEE:

value = (-1)0(2129 - 127)(1.0625)
value = 4.25

Запись информации к диску

Этот пример расширяет Чтение и Запись Двоичных данных путем записи связанной информации к файлу записи. Кроме того, структура получившегося файла записи представлена:

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

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

    g.InputBufferSize = 50000;
    g.Timeout = 120;

    Сконфигурируйте g, чтобы выполнить функцию обратного вызова instrcallback каждый раз, когда 5 000 байтов хранятся во входном буфере.

    g.BytesAvailableFcnMode = 'byte';
    g.BytesAvailableFcnCount = 5000;
    g.BytesAvailableFcn = @instrcallback;

    Сконфигурируйте g, чтобы записать информацию к нескольким дисковым файлам с помощью многословного формата. Первый дисковый файл задан как WaveForm1.txt.

    g.RecordMode = 'index';
    g.RecordDetail = 'verbose';
    g.RecordName = 'WaveForm1.txt';
  3. Соединитесь с инструментом — Подключение g к осциллографу.

    fopen(g)
  4. Запишите и считайте данные — Инициируют запись.

    record(g)

    Сконфигурируйте осциллограф, чтобы передать отображение на экране как битовый массив.

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

    Инициируйте асинхронную операцию чтения и начните генерировать события.

    readasync(g)

    instrcallback называется каждый раз, когда 5 000 байтов хранятся во входном буфере. Получившиеся отображения показывают ниже.

    BytesAvailable event occurred at 09:04:33 for the object: GPIB0-1.
    BytesAvailable event occurred at 09:04:42 for the object: GPIB0-1.
    BytesAvailable event occurred at 09:04:51 for the object: GPIB0-1.
    BytesAvailable event occurred at 09:05:00 for the object: GPIB0-1.
    BytesAvailable event occurred at 09:05:10 for the object: GPIB0-1.
    BytesAvailable event occurred at 09:05:19 for the object: GPIB0-1.
    BytesAvailable event occurred at 09:05:28 for the object: GPIB0-1.

    Ожидайте, пока все данные не хранятся во входном буфере, и затем передайте данные рабочей области MATLAB® как 8-битные целые числа без знака.

    out = fread(g,g.BytesAvailable,'uint8');

    Переключите состояние записи от on до off. Поскольку значением RecordMode является index, имя файла записи автоматически обновляется.

    record(g)
    g.RecordStatus
    ans =
    off
    g.RecordName
    ans =
    WaveForm2.txt
  5. Разъединитесь и вымойтесь — Когда вам больше не нужен g, необходимо отключить его от инструмента и удалить его из памяти и из рабочего пространства MATLAB.

    fclose(g)
    delete(g)
    clear g

Содержимое файла записи

Чтобы отобразить содержимое WaveForm1.txt записывают файл,

type WaveForm1.txt

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

Legend:
  * - An event occurred.
  > - A write operation occurred.
  < - A read operation occurred.
 
1     Recording on 18-Jun-2000 at 09:03:53.529. Binary data in 
      little endian format.
2   > 18 ascii values.
      HARDCOPY:PORT GPIB
3   > 19 ascii values.
      HARDCOPY:FORMAT BMP
4   > 14 ascii values.
      HARDCOPY START
5   * BytesAvailable event occurred at 18-Jun-2000 at 09:04:33.334
6   * BytesAvailable event occurred at 18-Jun-2000 at 09:04:41.775
7   * BytesAvailable event occurred at 18-Jun-2000 at 09:04:50.805
8   * BytesAvailable event occurred at 18-Jun-2000 at 09:04:00.266
9   * BytesAvailable event occurred at 18-Jun-2000 at 09:05:10.306
10  * BytesAvailable event occurred at 18-Jun-2000 at 09:05:18.777
11  * BytesAvailable event occurred at 18-Jun-2000 at 09:05:27.778
12  < 38462 uint8 values.
      42 4d cf 03 00 00 00 00 00 00 3e 00 00 00 28 00 
      00 00 80 02 00 00 e0 01 00 00 01 00 01 00 00 00 
      00 00 00 96 00 00 00 00 00 00 00 00 00 00 00 00 
      .
      .
      .
      ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
      ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
      ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
13  Recording off.