В этом примере показано, как записать данные и информацию о событиях с помощью осциллографа через интерфейс последовательного порта. Однако любой объект интерфейса может использоваться с командами, приведенными на протяжении всего примера. В качестве инструмента использовали осциллограф 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 компактно.
Теперь запросите идентификационную информацию прибора. Поскольку запись включена, эта информация будет сохранена в файле записи.
Обратите внимание, что легенда в верхней части файла записей использует
> для указания данных, записанных в инструмент
< для указания данных, считанных с прибора
* чтобы указать события, которые произошли
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.