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

Использование записи Function

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

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

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

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

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

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

Имя свойства

Описание

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 function, the 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® Стандарт 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 каждый раз в буфере входа сохраняются 5000 байт.

    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 вызывается каждый раз, когда 5000 байт сохраняются в вход буфере. Результаты отображения показаны ниже.

    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.