Этот пример иллюстрирует, как использовать текст и бинарные операции чтения и операции записи с объектом TCP/IP, соединенным с удаленным инструментом. В этом примере вы создаете вектор данных о форме волны в рабочей области MATLAB®, загружаете данные на инструмент, и затем читаете назад форму волны.
Инструментом является Генератор Sony/Tektronix® AWG520 Arbitrary Waveform (AWG). Его адресом является sonytekawg.yourdomain.com
, и его порт 4000. IP-адрес хоста AWG 192.168.1.10 и является пользователем, конфигурируемым в инструменте. Связанное имя хоста дано вашим администратором сети. Номер порта фиксируется и найден в документации инструмента:
Создайте инструментальный объект — Создают объект TCP/IP, сопоставленный с AWG.
t = tcpip('sonytekawg.yourdomain.com',4000);
Соединитесь с инструментом — Прежде, чем установить связь, OutputBufferSize
должен быть достаточно большим, чтобы содержать записанные данные. В этом примере 2 577 байтов записаны в инструмент. Поэтому OutputBufferSize
установлен в 3000
.
t.OutputBufferSize = 3000
Можно теперь соединить t
с инструментом.
fopen(t)
Запишите и считайте данные — Поскольку порядок байтов инструмента является прямым порядком байтов, сконфигурируйте свойство ByteOrder
к littleEndian
.
t.ByteOrder = 'littleEndian'
Создайте данные о синусоиде.
x = (0:499).*8*pi/500; data = sin(x); marker = zeros(length(data),1); marker(1) = 3;
Дайте инструменту команду записывать файл sin.wfm
с Форматом файла Формы волны, общей длиной 2 544 байтов, и объединенными данными и длиной маркера 2 500 байтов.
fprintf(t,'%s',['MMEMORY:DATA "sin.wfm",#42544MAGIC 1000' 13 10]) fprintf(t,'%s','#42500')
Запишите синусоиду в инструмент.
for i = 1:length(data) fwrite(t,data(i),'float32'); fwrite(t,marker(i)); end
Дайте инструменту команду использовать частоту часов 100 мс/с для формы волны.
fprintf(t,'%s',['CLOCK 1.0000000000e+008' 13 10 10])
Считайте форму волны, сохраненную в жестком диске функционального преобразователя. Форма волны содержит 2 000 байтов плюс маркеры, заголовок и информация о часах. Чтобы хранить эти данные, закройте связь и сконфигурируйте входной буфер, чтобы содержать 3 000 байтов.
fclose(t) t.InputBufferSize = 3000
Вновь откройте связь с инструментом.
fopen(t)
Считайте файл sin.wfm
из функционального преобразователя.
fprintf(t,'MMEMORY:DATA? "sin.wfm" ') data = fread(t,t.BytesAvailable);
Следующий набор команд читает ту же форму волны как массив float32
. Чтобы начаться, запишите форму волны в AWG.
fprintf(t,'MMEMORY:DATA? "sin.wfm" ')
Считайте заголовок файла как символы ASCII.
header1 = fscanf(t) header1 = #42544MAGIC 1000
Считайте следующие шесть байтов, которые задают длину данных.
header2 = fscanf(t,'%s',6) header2 = #42500
Считайте форму волны с помощью точности float32
и считайте маркеры с помощью точности uint8
. Обратите внимание на то, что одно значение float32
состоит из четырех байтов. Поэтому следующие команды читают 2 500 байтов.
data = zeros(500,1); marker = zeros(500,1); for i = 1:500 data(i) = fread(t,1,'float32'); marker(i) = fread(t,1,'uint8'); end
Считайте остающиеся данные, которые состоят из информации о часах и символов завершения.
clock = fscanf(t); cleanup = fread(t,2);
Разъединитесь и вымойтесь — Когда вам больше не нужен t
, необходимо отключить его от хоста и удалить его из памяти и из рабочего пространства MATLAB.
fclose(t) delete(t) clear t