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

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

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

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

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

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

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

Если операция успешна, она возвращает массив типа double, каждый представляющий 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

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

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

Примечание

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

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

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

Этот пример пишет 3 регистра временного хранения информации, запускающиеся в адресе 400, и читает 4 регистра временного хранения информации, запускающиеся в адресе 52008 с сервера ID 6.

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

ans = 

   38629   84735   29456   39470

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

'writePrecision' и 'readPrecision' аргументы задают формат данных регистра, считанного из или записанный в на сервере MODBUS. Допустимыми значениями является 'uint16'int16uint32int32uint64int64единственный, и '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 с сервера ID 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')