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

Типы данных, которые можно прочитать по MODBUS

The read функция выполняет операции чтения из четырех типов целевых адресуемых областей:

  • Катушки

  • Исходные данные

  • Входные регистры

  • Хранение регистров

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

Для примера, показывающего весь рабочий процесс чтения регистра удержания на ПЛК, смотрите Чтение Температуры с Удаленного Датчика Температуры.

Чтение катушек по MODBUS

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

Синтаксис для чтения катушек:

read(obj,'coils',address,count)

The obj параметр является именем объекта MODBUS. Примеры предполагают, что вы создали объект MODBUS, m. Дополнительные сведения о создании объекта см. в разделе Создание соединения MODBUS.

The address параметр является начальным адресом считываемых катушек, и он является двойным. The count параметр является количеством считываемых катушек, и это двойной точности. Если чтение успешно, он возвращает вектор с двойным числом, каждый со значением 1 или 0, где первое значение в векторе соответствует значению катушки по начальному адресу.

Этот пример читает 8 катушек, начиная с адреса 1.

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

ans = 

   1   1   0   1   1   0   1   0

Можно также создать переменную, которая будет считываться позже.

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

data = 

   1   1   0   1   1   0   1   0

Чтение входных параметров по MODBUS

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

Синтаксис для чтения входов:

read(obj,'inputs',address,count)

The obj параметр является именем объекта MODBUS. Примеры предполагают, что вы создали объект MODBUS, m. Дополнительные сведения о создании объекта см. в разделе Создание соединения MODBUS.

The address параметр является начальным адресом считываемых входов, и он является двойным. The count параметр является количеством считываемых входов и является двойным. Если операция read успешна, она возвращает вектор с двойным числом, каждый со 1 или 0, где первое значение в векторе соответствует входному значению в начальном адресе.

Этот пример считывает 10 дискретных входов, начиная с адреса 2.

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

ans = 

   1   1   0   1   1   0   1   0   0   1

Чтение входных регистров по MODBUS

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

Синтаксис для чтения входных регистров:

read(obj,'inputregs',address,count)

The obj параметр является именем объекта MODBUS. Примеры предполагают, что вы создали объект MODBUS, m. Дополнительные сведения о создании объекта см. в разделе Создание соединения MODBUS.

The address параметр является начальным адресом считываемых входных регистров, и он является двойным. The count параметр является количеством входа регистров, которые нужно считать, и это число double. Если операция read успешна, она возвращает вектор с двойной точностью. Каждая двойка представляет 16-битное значение регистра, где первое значение в векторе соответствует входу значению регистра по начальному адресу.

Этот пример считывает 4 входных регистра, начиная с адреса 20.

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

ans = 

   27640   60013   51918   62881

Чтение регистров холдинга по MODBUS

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

Синтаксис для чтения входов:

read(obj,'holdingregs',address,count)

The obj параметр является именем объекта MODBUS. Примеры предполагают, что вы создали объект MODBUS, m. Дополнительные сведения о создании объекта см. в разделе Создание соединения MODBUS.

The address параметр является начальным адресом считываемых регистров удержания, и он является double. The count параметр является количеством считываемых удерживающих регистров, и это число double. Если операция read успешна, она возвращает вектор с двойной точностью. Каждая двойка представляет 16-битовое значение регистра, где первое значение в векторе соответствует значению регистра удержания по начальному адресу.

Этот пример читает 4 регистра хранения, начиная с адреса 20.

read(m,'holdingregs',20,4)

ans = 

   27640   60013   51918   62881

Для примера, показывающего весь рабочий процесс чтения регистра удержания на ПЛК, смотрите Чтение Температуры с Удаленного Датчика Температуры.

Определение идентификатора и точности сервера

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

Опция идентификатора сервера

The serverId аргумент задает адрес сервера, которому нужно отправить команду read. Допустимые значения 0–247, с 0 являясь широковещательным адресом. Этот аргумент необязателен, и значение по умолчанию 1.

Примечание

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

Синтаксис идентификатора сервера:

read(obj,target,address,count,serverId)

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

read(m,'coils',1,8,3);

Опция точности

The 'precision' Аргумент задает формат данных регистра, считываемого с сервера MODBUS. Допустимые значения 'uint16', 'int16', 'uint32', 'int32', 'uint64', 'int64', 'single', и 'double'. Этот аргумент необязателен, и значение по умолчанию 'uint16'.

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

Синтаксис для определения точности:

read(obj,target,address,count,precision)

Этот пример читает 8 удерживающих регистров, начиная с адреса 1, используя точность 'uint32'.

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

Обе опции

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

Синтаксис для задания идентификатора сервера и точности:

read(obj,target,address,count,serverId,precision)

Этот пример читает 8 удерживающих регистров, начиная с адреса 1, используя точность 'uint32' с идентификатора сервера 3.

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

Чтение смешанных типов данных

Можно считать смежные значения различных типов данных (precisions) в одной операции чтения, задавая тип данных для каждого значения. Вы можете сделать это в синтаксисе read function, или настроить переменные, содержащие массивы отсчётов и прецизий. Оба метода показаны ниже.

В пределах read Синтаксис

Синтаксис 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. В этом примере он читается как 3 uint16 значения из адресных 500-502, 2 single значения из адресных 503-506, 3 double значения из адресных 507-518, и 2 int16 значения из адресных 519-520, все за одну операцию чтения.

Использование переменных

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

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

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