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

Введение

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

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

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

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

Recording Properties

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

Recording Properties

PropertyName Описание

RecordDetail

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

RecordMode

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

RecordName

Имя файла записи

RecordStatus

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

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

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

s = serial('COM1');
fopen(s)
s.RecordName = 'myfile.txt';
record(s)
fprintf(s,'*IDN?')
idn = fscanf(s);
fprintf(s,'RS232?')
rs232 = fscanf(s);

Закончите сеанс последовательного порта.

fclose(s)
delete(s)
clear s

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

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

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

Можно сконфигурировать RecordMode к overwrite, append или index. Если RecordMode является overwrite, файл записи перезаписывается, каждая запись времени инициируется. Если RecordMode является append, новая информация добавлена к файлу, заданному RecordMode. Если 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 битов. Значением дают

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

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

КомпонентБиты с одинарной точностьюБиты с двойной точностью

sign

1

1

exp

2–9

2–12

significand

10–32

13–64

Бит 1 является крайним левым битом, как сохранено в файле записи.

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

Этот пример иллюстрирует, как записать информацию, переданную между объектом последовательного порта и осциллографом Tektronix® TDS 210. Кроме того, структура получившегося файла записи представлена.

  1. Создайте объект последовательного порта — Создают объект последовательного порта s, сопоставленный с последовательным портом COM1.

    s = serial('COM1');
  2. Соединитесь с устройством — Подключение s к осциллографу. Поскольку значением по умолчанию для свойства ReadAsyncMode является continuous, данные асинхронно возвращены входной буфер, как только это доступно от инструмента.

    fopen(s)
  3. Сконфигурируйте значения свойств — Конфигурируют s, чтобы записать информацию к нескольким дисковым файлам с помощью многословного формата. Запись затем инициируется с первым дисковым файлом, заданным как WaveForm1.txt.

    s.RecordMode = 'index';
    s.RecordDetail = 'verbose';
    s.RecordName = 'WaveForm1.txt';
    record(s)
  4. Запишите и считайте данные — команды, записанные в инструмент, и данные, считанные из инструмента, зарегистрированы в файле записи. Для объяснения команд осциллографа смотрите Пример — Пишущие и Считывающие текстовые Данные.

    fprintf(s,'*IDN?')
    idn = fscanf(s);
    fprintf(s,'MEASUREMENT:IMMED:SOURCE CH2')
    fprintf(s,'MEASUREMENT:IMMED:SOURCE?')
    source = fscanf(s);

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

    fprintf(s,'MEASUREMENT:MEAS1:TYPE PK2PK')
    fprintf(s,'MEASUREMENT:MEAS1:VALUE?')
    ptop = fread(s,s.BytesAvailable);

    Преобразуйте напряжение от пика к пику в символьный массив.

    char(ptop)'
    ans =
    2.0199999809E0

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

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

    fclose(s)
    delete(s)
    clear s

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

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

type WaveForm1.txt

Legend: 
  * - An event occurred.
  > - A write operation occurred.
  < - A read operation occurred.
1      Recording on 22-Jan-2000 at 11:21:21.575. Binary data in... 
2    > 6 ascii values.
       *IDN?
3    < 56 ascii values.
       TEKTRONIX,TDS 210,0,CF:91.1CT FV:v1.16 TDS2CM:CMV:v1.04
4    > 29 ascii values.
       MEASUREMENT:IMMED:SOURCE CH2
5    > 26 ascii values.
       MEASUREMENT:IMMED:SOURCE?
6    < 4 ascii values.
       CH2
7    > 27 ascii values.
       MEASUREMENT:MEAS1:TYPE PK2PK
8    > 25 ascii values.
       MEASUREMENT:MEAS1:VALUE?
9    < 15 uchar values.
       32 2e 30 31 39 39 39 39 39 38 30 39 45 30 0a 
10     Recording off.