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

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

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

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

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

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

Вы записываете информацию к дисковому файлу с 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добавление, или 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, scharUint8Uint16, или (uint32 зарегистрирован как шестнадцатеричные значения. Например, если целочисленное значение 255 читается из инструмента как 16-битное целое число, шестнадцатеричное значение 00FF сохранено в файле записи. Один - и числа с плавающей запятой с двойной точностью зарегистрированы как десятичные значения с помощью %g формат, и как шестнадцатеричные значения с помощью формата задан IEEE® Стандартные 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 сопоставленный с National 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.