Считайте и запишите данные о ASCII по TCP/IP

Этот раздел предоставляет подробную информацию и примеры, исследуя операции чтения ASCII и операции записи с объектом TCP/IP.

Примечание

Большинство настольных инструментов (осциллографы, функциональные преобразователи, и т.д.), которые обеспечивают сетевое соединение, не использует необработанную коммуникацию сокета TCP для инструментального командного пункта. Вместо этого это поддерживается через стандарт VISA. Для получения дополнительной информации об использовании VISA, чтобы связаться с вашим инструментом, см. Обзор VISA.

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

Эти функции используются при чтении и записи текста:

ФункцияЦель
fprintfЗапишите текст в сервер.
fscanfСчитайте данные из сервера и отформатируйте как текст.

Эти свойства сопоставлены с чтением и записью текста:

СвойствоЦель
ValuesReceivedЗадает общее количество значений, считанных из сервера.
ValuesSentЗадает общее количество значений, отправленных в сервер.
InputBufferSizeЗадает общее количество байтов, которые могут быть поставлены в очередь во входном буфере когда-то.
OutputBufferSizeЗадает общее количество байтов, которые могут быть поставлены в очередь в буфере вывода когда-то.
TerminatorСимвол раньше отключал команды, отправленные в сервер.

Примечание

Чтобы получить список опций, можно использовать на функции, нажать клавишу Tab после ввода функции на командной строке MATLAB®. Список расширяется, и можно прокрутить, чтобы выбрать свойство или значение. Для получения информации об использовании этой функции завершения вкладки "Дополнительно" смотрите Используя Заполнение клавишей Tab для Функций.

Конфигурирование и соединение с сервером

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

echotcpip('on', 4000)

Необходимо создать объект TCP/IP. В этом примере создайте объект TCP/IP, сопоставленный с хостом 127.0.0.1 (ваша локальная машина), порт 4000. В целом имя хоста или адрес и серверный порт будут заданы устройством и вашей конфигурацией сети.

t = tcpip('127.0.0.1', 4000);

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

fopen(t)

Если объект был успешно соединен, его свойство Status автоматически сконфигурировано к open.

t.Status
ans = 
    open

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

Вы используете функцию fprintf, чтобы записать данные о ASCII в сервер.

fprintf(t, 'Hello World 123');

По умолчанию функция fprintf действует в синхронном режиме. Это означает, что fprintf блокирует командную строку MATLAB, пока одно из следующего не происходит:

  • Все данные записаны

  • Тайм-аут происходит, как задано свойством Timeout

По умолчанию fprintf функционирует данные о ASCII записей с помощью формата %s\n. Все случаи \n в команде, записанной в сервер, заменяются значением свойства Terminator. При использовании формата по умолчанию, %s\n, все команды, записанные в сервер, закончатся символом Terminator.

Для предыдущей команды отправляется перевод строки (LF) после того, как 'Hello World 123' записан в сервер, таким образом, указав на конец команды.

Можно также задать формат команды, записанной путем обеспечения третьего входного параметра fprintf. Принятые символы преобразования формата включают: d, i, o, u, x, X, f, e, E, g, G, c, и s.

Например, команда данных, ранее показанная, может быть записана в сервер с помощью трех вызовов fprintf.

fprintf(t, '%s', 'Hello');
fprintf(t, '%s', ' World');
fprintf(t, '%s\n', ' 123');

Символ Terminator указывает на конец команды и отправляется после последней возможности в fprintf.

Свойства записи ASCII

Свойство OutputBufferSize задает максимальное количество байтов, которые могут быть записаны в сервер целиком. По умолчанию OutputBufferSize является 512.

t.OutputBufferSize
ans = 
    512

Свойство ValuesSent указывает на общее количество значений, записанных в сервер, поскольку объект был соединен с сервером.

t.ValuesSent
ans = 
    32

Чтение данных о ASCII

Вы используете функцию fscanf, чтобы считать данные о ASCII из сервера. Например, чтобы считать назад данные, возвращенные в сервер эха для нашей первой команды fprintf:

data = fscanf(t)
data = 
    Hello World 123

По умолчанию данные о чтениях функции fscanf с помощью формата '%c' и блоков командная строка MATLAB до одного из следующего происходят:

  • Терминатор строки получен, как задано свойством Terminator

  • Тайм-аут происходит, как задано свойством Timeout

  • Входной буфер заполнен

  • Конкретное количество значений читается

Можно также задать формат данных, считанных путем обеспечения второго входного параметра fscanf. Принятые символы преобразования формата включают: d, i, o, u, x, X, f, e, E, g, G, c, и s.

Следующие команды возвращают числовое значение как двойное.

Очистите что-либо все еще во входном буфере от предыдущих команд.

flushinput(t);

Отправьте данные в сервер.

fprintf(t, '0.8000');

Считайте ответ.

data = fscanf(t, '%f')
data = 
    0.8000
isnumeric(data)
ans = 
    1

Свойства чтения ASCII

Свойство InputBufferSize задает максимальное количество байтов, которые можно считать из сервера. По умолчанию InputBufferSize является 512.

t.InputBufferSize
ans = 
    512

Свойство ValuesReceived указывает на общее количество значений, считанных из сервера, включая терминатор строки.

t.ValuesReceived
ans = 
    32

Очистка

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

fclose(t);
delete(t);
clear t
echotcpip('off');