exponenta event banner

читать

Считывание данных с сервера MODBUS

Описание

read(m,target,address) считывает одно значение данных в объект MODBUS m из целевого типа target по начальному адресу address. По умолчанию функция считывает одно значение. Если требуется прочитать несколько значений, добавьте count аргумент.

пример

read(m,target,address,count) считывает данные в объект MODBUS m из целевого типа targetпо начальному адресу address использование количества считываемых значений count.

пример

read(m,target,address,count,serverId,precision) дополнительно указывает serverId, который является адресом сервера для отправки команды чтения, и precision, который является форматом данных считываемого регистра.

Примеры

свернуть все

Если целью считывания являются катушки, функция считывает значения из 1-2000 смежных катушек на удаленном сервере, начиная с указанного адреса. Катушка - это один выходной бит. Значение 1 указывает, что катушка включена, и значение 0 значит, он выключен.

Прочтите 8 катушек, начиная с адреса 1. address параметр - начальный адрес считываемых катушек, и count параметр - количество считываемых катушек.

read(m,'coils',1,8)
ans = 

   1   1   0   1   1   0   1   0

Если целью считывания являются входы, функция считывает значения с 1-2000 смежных дискретных входов на удаленном сервере, начиная с указанного адреса. Дискретный вход - это один входной бит. Значение 1 указывает, что вход включен, и значение 0 значит, он выключен.

Считайте 10 дискретных входов, начиная с адреса 2. address параметр - начальный адрес вводимых данных для чтения, и count параметр - количество вводов для чтения.

read(m,'inputs',2,10)
ans = 

   1   1   0   1   1   0   1   0   0   1

Если целью считывания являются входные регистры, функция считывает значения из 1-125 смежных входных регистров на удаленном сервере, начиная с указанного адреса. Входной регистр - это 16-битный регистр, доступный только для чтения.

Считайте 4 входных регистра, начиная с адреса 20. address параметр - начальный адрес входных регистров для чтения, и count параметр - количество входных регистров для чтения.

read(m,'inputregs',20,4)
ans = 

   27640   60013   51918   62881

Если целью считывания являются регистры хранения, функция считывает значения из 1-125 регистров непрерывного хранения на удаленном сервере, начиная с указанного адреса. Регистр хранения представляет собой 16-битный регистр чтения/записи.

Прочтите 5 регистров хранения, начиная с адреса 2. address параметр - начальный адрес регистров хранения для чтения, и count параметр - количество регистров хранения для чтения.

read(m,'holdingregs',2,5)
ans = 

   27640   60013   51918   62881   34836

Можно прочитать любой из четырех типов целевых объектов, а также указать необязательные параметры для идентификатора сервера, а также задать точность для двух типов регистров. Можно задать либо опцию самостоятельно, либо оба параметра serverId опции и precision вариант вместе. Оба параметра должны быть перечислены после требуемых аргументов.

Считывание 8 регистров хранения, начиная с адреса 1, с точностью 'uint32' от сервера с идентификатором 3.

read(m,'holdingregs',1,8,3,'uint32');

Можно считывать смежные значения различных типов данных (точности), указывая тип данных для каждого значения. Это можно сделать в синтаксисе read или настройте переменные, содержащие массивы счетчиков и исправлений. Здесь показаны оба метода.

Считывание смежных регистров одного типа данных.

read(m,'holdingregs',500,10,'uint32');

В этом примере целевой тип - хранение регистров, начальный адрес - 500, число равно 10, и точность uint32.

Если требуется, чтобы 10 значений имели смешанные типы данных, можно использовать следующий синтаксис:

read(m,'holdingregs',500,[3 2 3 2],{'uint16', 'single', 'double', 'int16'});

Массив значений в команде используется как для подсчета, так и для точности. В этом случае счетчиками являются 3, 2, 3 и 2. Команда считывает 3 значения типа данных uint16, 2 значения типа данных single, 3 значения типа данных doubleи 2 значения типа данных int16. Регистры являются смежными, начиная с адреса 500.

Вместо использования массивов внутри команды чтения, как показано на предыдущем шаге, можно также использовать массивы в качестве переменных в команде. Эквивалентный код для того же примера:

count = [3 2 3 2]
precision = {'uint16', 'single', 'double', 'int16'}
read(m,'holdingregs',500,count,precision);

Использование переменных удобно, когда имеется много значений для чтения, и они имеют смешанные типы данных.

Входные аргументы

свернуть все

Целевая область для чтения, заданная как символьный вектор или строка. Можно выполнить операцию считывания MODBUS для четырех типов целей: катушек, входов, входных регистров и регистров хранения, соответствующих значениям 'coils', 'inputs', 'inputregs', и 'holdingregs'. Цель должна быть первым аргументом после имени объекта. В этом примере считывается 8 катушек, начиная с адреса 1.

Пример: read(m,'coils',1,8)

Типы данных: char

Начальный адрес для чтения, указан как двойной. Адрес должен быть вторым аргументом после имени объекта. В этом примере считывается 10 катушек, начиная с адреса 2.

Пример: read(m,'coils',2,10)

Типы данных: double

Количество считываемых значений, указанное как двойное. Count должен быть третьим аргументом после имени объекта. Если счетчик не указан, значение по умолчанию: 1 используется. В этом примере считывается 12 катушек, начиная с адреса 2.

Пример: read(m,'coils',2,12)

Типы данных: double

Адрес сервера для отправки команды чтения, указанный как двойной. Идентификатор сервера должен быть указан после имени объекта, целевого объекта, адреса и счетчика. Если не указать serverId, значение по умолчанию 1 используется. Допустимые значения: 0-247, с 0 является адресом широковещательной передачи.

Примечание

То, что некоторые устройства называют slaveID собственность, может работать как serverID в интерфейсе MODBUS. Для некоторых производителей идентификатор подчиненного устройства иногда называется идентификатором сервера. Если устройство использует slaveID свойство, оно может работать, чтобы использовать его в качестве serverID с командой read, как описано здесь.

В этом примере считывается 8 катушек, начиная с адреса 1 с идентификатора сервера 3.

Пример: read(m,'coils',1,8,3);

Типы данных: double

Формат данных регистра, считываемого с сервера MODBUS, заданный как символьный вектор или строка. Точность должна быть указана после имени объекта, целевого объекта, адреса и счетчика. Допустимые значения: 'uint16', 'int16', 'uint32', 'int32', 'uint64', 'int64', 'single', и 'double'. Этот аргумент является необязательным, а значение по умолчанию - 'uint16'.

Обратите внимание, что precision не ссылается на возвращаемый тип, который всегда 'double'. Здесь указывается, как интерпретировать данные регистра.

В этом примере считываются 6 регистров хранения, начиная с адреса 2, с точностью 'uint32'.

Пример: read(m,'holdingregs',2,6,'uint32');

Типы данных: char

Расширенные возможности

Создание кода C/C + +
Создайте код C и C++ с помощью MATLAB ® Coder™

.
Представлен в R2017a