exponenta event banner

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

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

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

  • Катушки

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

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

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

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

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

Считывание катушек по MODBUS

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

Синтаксис считывания катушек:

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

obj - это имя объекта MODBUS. В примерах предполагается, что создан объект MODBUS, m. Сведения о создании объекта см. в разделе Создание соединения MODBUS.

address параметр является начальным адресом считываемых катушек и является двойным. 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)

obj - это имя объекта MODBUS. В примерах предполагается, что создан объект MODBUS, m. Сведения о создании объекта см. в разделе Создание соединения MODBUS.

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

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

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

ans = 

   1   1   0   1   1   0   1   0   0   1

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

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

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

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

obj - это имя объекта MODBUS. В примерах предполагается, что создан объект MODBUS, m. Сведения о создании объекта см. в разделе Создание соединения MODBUS.

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

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

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

ans = 

   27640   60013   51918   62881

Считывание регистров хранения по MODBUS

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

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

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

obj - это имя объекта MODBUS. В примерах предполагается, что создан объект MODBUS, m. Сведения о создании объекта см. в разделе Создание соединения MODBUS.

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

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

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

ans = 

   27640   60013   51918   62881

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

Указание идентификатора сервера и точности

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

Параметр идентификатора сервера

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

Примечание

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

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

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

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

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

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

'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');

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

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

В пределах 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, все в одной операции чтения.

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

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

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

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