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