The read
функция выполняет операции чтения из четырех типов целевых адресуемых областей:
Катушки
Исходные данные
Входные регистры
Хранение регистров
При выполнении чтения необходимо задать целевой тип (target
), начальный адрес (address
) и количество считываемых значений (count
). Вы также можете опционально указать адрес сервера (serverId
) для любого целевого типа и формата данных (precision
) для регистров.
Для примера, показывающего весь рабочий процесс чтения регистра удержания на ПЛК, смотрите Чтение Температуры с Удаленного Датчика Температуры.
Если целью чтения являются катушки, функция считывает значения от 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
Если целью чтения являются входы, функция считывает значения из смежных дискретных входов 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
Если целевой объект 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
Если получатель данных содержит регистры, функция считывает значения из смежных регистров хранения 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);
Использование переменных удобно, когда у вас есть много значений для чтения, и они имеют смешанные типы данных.