The writeRead
Функция предназначена для выполнения комбинации одной операции записи и одной операции чтения групп регистров хранения в одной транзакции MODBUS. Операция записи всегда выполняется перед чтением. Область значений адресов для чтения и область значений адресов для записи должны быть непрерывными, но каждый указан независимо и может или не перекрываться.
Синтаксис операции чтения и записи для хранения регистров:
writeRead(obj,writeAddress,values,readAddress,readCount)
The obj
параметр является именем объекта MODBUS. Примеры предполагают, что вы создали объект MODBUS, m
. Дополнительные сведения о создании объекта см. в разделе Создание соединения MODBUS.
The writeAddress
- начальный адрес удерживающих регистров, в которые нужно записать, и это двойной адрес. The values
параметр является массивом значений для записи. Первое значение в векторе записывается в writeAddress
. Каждое значение должно быть в области значений 0–65535
.
The 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
Опция идентификатора сервера
The serverId
аргумент задает адрес сервера, которому нужно отправить команду read. Допустимые значения 0–247
, с 0
являясь широковещательным адресом. Этот аргумент необязателен, и значение по умолчанию 1
.
Примечание
Что некоторые устройства называют slaveID
свойство, может работать как serverID
свойство в интерфейсе MODBUS. Для некоторых производителей slave ID иногда упоминается как ID сервера. Если ваше устройство использует 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
Опция точности
The 'writePrecision'
и 'readPrecision'
аргументы определяют формат данных регистра, считываемого или записываемого на сервере MODBUS. Допустимые значения 'uint16'
, 'int16'
, 'uint32'
, 'int32'
, 'uint64'
, 'int64'
, 'single'
, и 'double'
. Этот аргумент необязателен, и значение по умолчанию 'uint16'
.
Значения, переданные для записи, преобразуются в значения регистров на основе указанной точности. Для значений точности 'int32'
, 'uint32'
, и 'single'
, каждое значение соответствует 2 регистрам, и для 'uint64'
, 'int64'
и 'double'
каждое значение соответствует 4 регистрам. Для 'int16'
и 'uint16'
каждое значение получено из одного 16-битного регистра.
Обратите внимание, что точность задает, как интерпретировать или преобразовать данные регистра, а не тип возврата операции read. Возвращенные данные всегда имеют тип double.
Синтаксис для обозначения точности записи или чтения:
writeRead(obj,writeAddress,values,writePrecision,readAddress,readCount,readPrecision)
Если вы хотите использовать serverId
аргумент также, он идет после readPrecision
.
Этот пример записывает 3 регистра хранения, начиная с адреса 400, и считывает 4 регистра хранения, начиная с адреса 52008, с идентификатора 6 сервера. Это также задает writePrecision
от 'uint64'
и a 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')