Основной рабочий процесс, чтобы читать и запись данных по TCP/IP

Этот пример иллюстрирует, как использовать текст и бинарные операции чтения и операции записи с объектом TCP/IP, соединенным с удаленным инструментом. В этом примере вы создаете вектор данных о форме волны в рабочей области MATLAB®, загружаете данные на инструмент, и затем читаете назад форму волны.

Инструментом является Генератор Sony/Tektronix® AWG520 Arbitrary Waveform (AWG). Его адресом является sonytekawg.yourdomain.com, и его порт 4000. IP-адрес хоста AWG 192.168.1.10 и является пользователем, конфигурируемым в инструменте. Связанное имя хоста дано вашим администратором сети. Номер порта фиксируется и найден в документации инструмента:

  1. Создайте инструментальный объект — Создают объект TCP/IP, сопоставленный с AWG.

    t = tcpip('sonytekawg.yourdomain.com',4000);
  2. Соединитесь с инструментом — Прежде, чем установить связь, OutputBufferSize должен быть достаточно большим, чтобы содержать записанные данные. В этом примере 2 577 байтов записаны в инструмент. Поэтому OutputBufferSize установлен в 3000.

    t.OutputBufferSize = 3000

    Можно теперь соединить t с инструментом.

    fopen(t)
  3. Запишите и считайте данные — Поскольку порядок байтов инструмента является прямым порядком байтов, сконфигурируйте свойство 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);
  4. Разъединитесь и вымойтесь — Когда вам больше не нужен t, необходимо отключить его от хоста и удалить его из памяти и из рабочего пространства MATLAB.

    fclose(t)
    delete(t)
    clear t