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

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

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

  • Обмотки

  • Входные параметры

  • Введите регистры

  • Регистры временного хранения информации

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

Для примера, показывающего целый рабочий процесс чтения регистра временного хранения информации на PLC, смотрите Температуру Чтения от Удаленного Датчика температуры.

Обмотки считывания по 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

Для примера, показывающего целый рабочий процесс чтения регистра временного хранения информации на PLC, смотрите Температуру Чтения от Удаленного Датчика температуры.

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

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

Опция ID сервера

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

Примечание

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

Синтаксис, чтобы задать ID сервера:

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

Этот пример читает 8 обмоток, запускающихся в адресе 1 с сервера ID 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 должен быть перечислен сначала после обязательных аргументов.

Синтаксис, чтобы задать и ID Сервера и точность:

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

Этот пример читает 8 регистров временного хранения информации, запускающихся в адресе 1 использование точности 'uint32' с сервера ID 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 значения unit16 из адреса 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);

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