Функция 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
Опция 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'
, '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 с сервера 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')