Этот раздел предоставляет подробную информацию и примеры, исследуя операции чтения 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
Вы используете функцию 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
.
Свойство OutputBufferSize
задает максимальное количество байтов, которые могут быть записаны в сервер целиком. По умолчанию OutputBufferSize
является 512
.
t.OutputBufferSize ans = 512
Свойство ValuesSent
указывает на общее количество значений, записанных в сервер, поскольку объект был соединен с сервером.
t.ValuesSent ans = 32
Вы используете функцию 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
Свойство InputBufferSize
задает максимальное количество байтов, которые можно считать из сервера. По умолчанию InputBufferSize
является 512
.
t.InputBufferSize ans = 512
Свойство ValuesReceived
указывает на общее количество значений, считанных из сервера, включая терминатор строки.
t.ValuesReceived ans = 32
Если вы закончены с объектом TCP/IP, отключаете его от сервера, удаляете его из памяти и удаляете его из рабочей области. Если вы используете сервер эха, выключаете его.
fclose(t); delete(t); clear t
echotcpip('off');