Этот раздел предоставляет подробную информацию и примеры, исследуя бинарные операции чтения и операции записи с объектом TCP/IP.
Большинство настольных инструментов (осциллографы, функциональные преобразователи, и т.д.), которые обеспечивают сетевое соединение, не использует необработанную коммуникацию сокета TCP в инструментальном командном пункте. Вместо этого это поддерживается через стандарт VISA. Для получения дополнительной информации об использовании VISA, чтобы связаться с вашим инструментом, см. Обзор VISA.
Эти функции используются при чтении и записи двоичных данных:
Функция | Цель |
---|---|
fread | Считайте двоичные данные из сервера. |
fwrite | Запишите двоичные данные в сервер. |
Эти свойства сопоставлены с чтением и записью двоичных данных:
Свойство | Цель |
---|---|
ValuesReceived | Задает общее количество значений, считанных из сервера. |
ValuesSent | Задает общее количество значений, отправленных в сервер. |
InputBufferSize | Задает общее количество байтов, которые могут быть поставлены в очередь во входном буфере одновременно. |
OutputBufferSize | Задает общее количество байтов, которые могут быть поставлены в очередь в буфере вывода одновременно. |
ByteOrder | Задает порядок байтов сервера. |
Чтобы получить список опций, можно использовать на функции, нажать клавишу Tab после ввода функции на командной строке MATLAB®. Список расширяется, и можно прокрутить, чтобы выбрать свойство или значение. Для получения информации об использовании этой функции завершения вкладки "Дополнительно" смотрите Используя Заполнение клавишей Tab для Функций.
В данном примере мы будем использовать сервер эха, которому предоставляют тулбокс. Сервер эха позволяет вам экспериментировать с основной функциональностью объектов TCP/IP, не связывая с существующим устройством. Сервер эха является сервисом, который возвращается к адресу и порту отправителя, те же байты, которые это получает от отправителя.
echotcpip('on', 4000)
Необходимо создать объект TCP/IP. В этом примере создайте объект TCP/IP, сопоставленный с хостом 127.0.0.1 (ваша локальная машина), порт 4000. В общем случае имя хоста или адрес и серверный порт будут заданы устройством и вашей конфигурацией сети.
t = tcpip('127.0.0.1', 4000);
Вы, возможно, должны сконфигурировать OutputBufferSize
из объекта TCP/IP. OutputBufferSize
свойство задает максимальное количество байтов, которые могут быть записаны в сервер целиком. По умолчанию, OutputBufferSize
512
.
t.OutputBufferSize ans = 512
Если команда задана в fwrite
содержит больше чем 512 байтов, ошибка возвращена, и никакие данные не записаны в сервер. В этом примере 4 000 байтов будут записаны в сервер. Поэтому OutputBufferSize
увеличен до 4000
.
t.OutputBufferSize = 4000; t.OutputBufferSize ans = 4000
Вы, возможно, должны сконфигурировать ByteOrder
из объекта TCP/IP. ByteOrder
свойство задает порядок байтов сервера. ByteOrder
по умолчанию
bigEndian
.
t.ByteOrder ans = 'bigEndian'
Если порядок байтов сервера является прямым порядком байтов, ByteOrder
свойство объекта может быть сконфигурировано к littleEndian
:
t.ByteOrder = 'littleEndian' t.ByteOrder ans = 'littleEndian'
Прежде чем можно будет выполнить операцию чтения или операцию записи, необходимо соединить объект TCP/IP с сервером с fopen
функция.
fopen(t)
Если объект был успешно соединен, его Status
свойство автоматически сконфигурировано к open
.
t.Status ans = open
Вы используете fwrite
функционируйте, чтобы записать двоичные данные в сервер. Например, следующая команда отправит синусоиду в сервер.
Создайте синусоиду, которая будет записана в сервер.
x = (0:999) .* 8 * pi / 1000; data = sin(x);
Запишите синусоиду в сервер.
fwrite(t, data, 'float32');
По умолчанию, fwrite
функция действует в синхронном режиме. Это означает тот fwrite
блокирует командную строку MATLAB, пока одно из следующего не происходит:
Все данные записаны
Тайм-аут происходит, как задано Timeout
свойство
По умолчанию fwrite
функционируйте пишут двоичные данные с помощью uchar
точность. Однако другая точность может также использоваться. Для списка поддерживаемой точности смотрите страницу ссылки на функцию для fwrite
.
При выполнении операции записи необходимо думать о передаваемых данных в терминах значений, а не байтов. Значение состоит из одного или нескольких байтов. Например, один uint32
значение состоит из четырех байтов.
ValuesSent
свойство указывает на общее количество значений, записанных в сервер, поскольку объект был соединен с сервером.
t.ValuesSent ans = 1000
InputBufferSize
свойство задает максимальное количество байтов, которые можно считать из сервера. По умолчанию, InputBufferSize
512
.
t.InputBufferSize ans = 512
Затем форма волны, сохраненная в памяти функционального преобразователя, будет считана. Форма волны содержит 4 000 байтов. Сконфигурируйте InputBufferSize
содержать 4 000 байтов. Отметьте, InputBufferSize
может быть сконфигурирован только, когда объект не соединяется с сервером.
fclose(t); t.InputBufferSize = 4000; t.InputBufferSize ans = 4000
Теперь, когда свойство сконфигурировано правильно, можно вновь открыть связь с сервером:
fopen(t);
Вы используете fread
функционируйте, чтобы считать двоичные данные из сервера.
fread
функциональные блоки командная строка MATLAB до одного из следующего происходят:
Тайм-аут происходит, как задано Timeout
свойство
Конкретное количество значений читается
InputBufferSize
количество значений читается
По умолчанию fread
функционируйте считывает двоичные данные с помощью uchar
точность. Однако другая точность может также использоваться. Для списка поддерживаемой точности смотрите страницу ссылки на функцию для fread
.
При выполнении операции чтения необходимо думать о полученных данных в терминах значений, а не байтов. Значение состоит из одного или нескольких байтов. Например, один uint32
значение состоит из четырех байтов.
Для чтения float32
двоичные данные, отправьте форму волны снова. Закрытие объекта очищает любые доступные данные из более ранних записей.
fwrite(t, data, 'float32');
Теперь считайте ту же форму волны как float32
массив.
data = fread(t, 1000, 'float32');
ValuesReceived
свойство указывает на общее количество значений, считанных из сервера.
t.ValuesReceived ans = 1000
Если вы закончены с объектом TCP/IP, отключаете его от сервера, удаляете его из памяти и удаляете его из рабочей области. Если вы используете сервер эха, выключаете его.
fclose(t); delete(t); clear t
echotcpip('off');