exponenta event banner

Запись и чтение нескольких регистров хранения

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

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

writeRead(obj,writeAddress,values,readAddress,readCount)

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

writeAddress является начальным адресом регистров хранения для записи и является двойным. values параметр является массивом значений для записи. Первое значение в векторе записывается в writeAddress. Каждое значение должно находиться в диапазоне 0–65535.

readAddress - начальный адрес регистров хранения для чтения, и readCount - количество считываемых регистров.

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

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

writeRead(m,601,[1024 512],19250,4)

ans = 

   27640   60013   51918   62881

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

values = [1024 512];
writeRead(m,601,values,19250,4)

ans = 

   27640   60013   51918   62881

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

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

Примечание

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

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

writeRead(obj,writeAddress,values,readAddress,readCount,serverId)

В этом примере записывают 3 регистра хранения, начиная с адреса 400, и считывают 4 регистра хранения, начиная с адреса 52008, с ИД 6 сервера.

writeRead(m,400,[1024 512 680],52008,4,6)

ans = 

   38629   84735   29456   39470

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

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

Значения, передаваемые для записи, преобразуются в регистровые значения на основе заданной точности. Для значений точности 'int32', 'uint32', и 'single', каждое значение соответствует 2 регистрам и для 'uint64', 'int64' и 'double', каждое значение соответствует 4 регистрам. Для 'int16' и 'uint16'каждое значение из одного 16-битного регистра.

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

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

writeRead(obj,writeAddress,values,writePrecision,readAddress,readCount,readPrecision)

Если вы хотите использовать serverId аргумент также, он идет после readPrecision.

Этот пример записывает 3 регистра хранения, начиная с адреса 400, и считывает 4 регистра хранения, начиная с адреса 52008, из идентификатора 6 сервера. Он также определяет writePrecision из 'uint64' и readPrecision из 'uint32'.

writeRead(m,400,[1024 512 680],'uint64',52008,4,'uint32',6)

ans = 

   38629   84735   29456   39470

Этот пример считывает 2 регистра хранения, начиная с адреса 919, и записывает 3 регистра хранения, начиная с адреса 719, форматируя считывание и запись для регистров данных с одной точностью.

  values = [1.14 5.9 11.27];
  writeRead(m,719,values,'single',919,2,'single')