Запись сеанса КИПиА

Введение

В этом примере показано, как записать данные и информацию о событиях с помощью осциллографа через интерфейс последовательного порта. Однако любой объект интерфейса может использоваться с командами, приведенными на протяжении всего примера. В качестве инструмента использовали осциллограф Tektronix ® TDS 210 .

Функции и свойства

Эта функция используется для записи данных и информации о событиях:

RECORD       - Record data and event information to a file.

Эти свойства связаны с записью данных и информации о событиях:

RecordDetail - Specifies the amount of information recorded.
RecordMode   - Specifies whether data and event information
               are saved to one record file or to multiple
               record files.
RecordName   - Specifies the name of the record file.
RecordStatus - Indicates if data and event information are
               saved to a record file.

Создание объекта последовательного порта

Для начала создайте объект последовательного порта, сопоставленный с COM1 портом.

s=serial('COM1')
   Serial Port Object : Serial-COM1

   Communication Settings 
      Port:               COM1
      BaudRate:           9600
      Terminator:         'LF'

   Communication State 
      Status:             closed
      RecordStatus:       off

   Read/Write State  
      TransferStatus:     idle
      BytesAvailable:     0
      ValuesReceived:     0
      ValuesSent:         0
 

Использование ЗАПИСЬ

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

Свойство RecordStatus объекта указывает, записываются ли данные и события. RecordStatus может иметь значение on или off. Значение свойства RecordStatus задано функцией RECORD.

Вы можете задать имя файла записи со свойством RecordName объекта. Значение по умолчанию является record.txt.

s.RecordStatus
ans =

off

fopen(s)
record(s)
s.RecordStatus
ans =

on

s.RecordName
ans =

record.txt

Определение объема записанной информации

Свойство RecordDetail задает объем записанной информации. Значение RecordDetail может быть задано как компактным, так и подробным.

Если для параметра RecordDetail задано значение compact, захватывается следующая информация:

  • Количество считанных значений

  • Тип данных значений read

  • Количество записанных значений

  • Тип данных записанных значений

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

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

Значение по умолчанию для свойства RecordDetail компактно.

Запись данных ASCII

Теперь запросите идентификационную информацию прибора. Поскольку запись включена, эта информация будет сохранена в файле записи.

Обратите внимание, что легенда в верхней части файла записей использует

  • > для указания данных, записанных в инструмент

  • < для указания данных, считанных с прибора

  • * чтобы указать события, которые произошли

fprintf(s, '*IDN?')
data = fscanf(s)
data =

TEKTRONIX,TDS 210,0,CF:91.1CT FV:v1.16 TDS2CM:CMV:v1.04


type record.txt
Legend: 
  * - An event occurred.
  > - A write operation occurred.
  < - A read operation occurred.
 
1      Recording on 31-May-2005 at 12:18:38.541. Binary data in little endian format.
2      > 6 ascii values.
3      < 56 ascii values.

Теперь соберем данные, записанные в инструмент, и данные, считанные с инструмента.

set(s, 'RecordDetail', 'verbose')
fprintf(s, 'Display:Contrast?')
data = fscanf(s)
data =

50


type record.txt
Legend: 
  * - An event occurred.
  > - A write operation occurred.
  < - A read operation occurred.
 
1      Recording on 31-May-2005 at 12:18:38.541. Binary data in little endian format.
2      > 6 ascii values.
3      < 56 ascii values.
4      > 18 ascii values.
       Display:Contrast?

5      < 3 ascii values.
       50


Запись двоичных данных

Двоичные данные с точностью uchar, schar, (u) int8, (u) int16 или (u) int32 записываются в файл записи в шестнадцатеричном формате.

fprintf(s, 'Display:Contrast?')
fread(s, 1, 'int16')
ans =

       12341

dec2hex(12339)
ans =

3033

fclose(s)
type record.txt
Legend: 
  * - An event occurred.
  > - A write operation occurred.
  < - A read operation occurred.
 
1      Recording on 31-May-2005 at 12:18:38.541. Binary data in little endian format.
2      > 6 ascii values.
3      < 56 ascii values.
4      > 18 ascii values.
       Display:Contrast?

5      < 3 ascii values.
       50

6      > 18 ascii values.
       Display:Contrast?

7      < 1 int16 values.
       b035 
8        Recording off.


Двоичные данные с одинарной или двойной точностью записываются согласно размещению битов IEEE ® 754 с плавающей точкой.

Это означает, что одно значение точности представлено в виде 32-битного значения, которое будет преобразовано в эквивалентное шестнадцатеричное значение. Чтобы переместить значение с одной точностью, необходимо сделать следующее (бит 1 является крайним левым битом):

    sign        = bit1 (a value of 0 is positive and a
                  value of 1 is negative).
    exp         = bit2 to bit 9
    significand = bit 10 to bit 32
    value       = (2^(exp-127))*(1.significand)

Для значений двойной точности будет использоваться следующее (бит 1 - самый левый бит):

    sign        = bit1 (a value of 0 is positive and a
                        value of 1 is negative).
    exp         = bit2 to bit 12
    significand = bit 13 to bit 64
    value       = (2^(exp-1023))*(1.significand)

Кроме того, текстовое представление значения будет представлено справа от шестигранного значения с одной точностью с помощью строки формата% g.

Добавление данных к существующему файлу

Поскольку запись была прекращена, файл записи будет перезаписан, если запись будет вновь начата. Это связано с тем, что значение по умолчанию для RecordMode является перезаписанным. Чтобы избежать перезаписи предыдущего файла записи, задайте новое значение свойства RecordName или установите свойство RecordMode для добавления.

s.RecordMode = 'append';
fopen(s);
record(s, 'on')
fprintf(s, 'RS232:BAUD?')
data = fscanf(s)
data =

9600


fclose(s)
type record.txt
Legend: 
  * - An event occurred.
  > - A write operation occurred.
  < - A read operation occurred.
 
1      Recording on 31-May-2005 at 12:18:38.541. Binary data in little endian format.
2      > 6 ascii values.
3      < 56 ascii values.
4      > 18 ascii values.
       Display:Contrast?

5      < 3 ascii values.
       50

6      > 18 ascii values.
       Display:Contrast?

7      < 1 int16 values.
       b035 
8        Recording off.

1      Recording on 31-May-2005 at 12:18:41.885. Binary data in little endian format.
2      > 12 ascii values.
       RS232:BAUD?

3      < 5 ascii values.
       9600

4        Recording off.