История: Использование QModbusTcpClient
Я пытаюсь прочитать содержимое с устройства, подключенного к сети Modbus/TCP
. Для этой цели я написал программу для Windows (проверено на 7 и 10) в Qt C++ (Qt версии 5.7.0), который по существу называет QModbusClient::sendReadRequest
с QModbusDataUnit::QModbusDataUnit(RegisterType type, int address, quint16 size)
в качестве параметра, где тип является HoldingRegisters
, адрес приравнивает к 1000
(может быть другим адресом, это не важно для данной конкретной проблемы) и размер - это длина требуемых данных, которые необходимо считывать с устройства.Ограничение в размере данных QModbusTcpClient
Вопрос: Все работает хорошо, когда size
меньше или равна 63
регистров. Каждая попытка выйти за пределы этого значения приводит к ошибке, которая зависит от устройства, с которым я тестирую программу, но обычно говорит недействительный запрос.
Тесты:
- Я испытал это с несколькими устройствами и реальными с
Modbus/TCP
simulator получения тех же результатов, т.е.size
< =63
-> в порядке;size
>63
-> ошибка Modpoll
с другой стороны позволяет мне читать порцию данных из одних и тех же устройств и симулятора сsize
больше, чем63
регистров
Некоторые исследования:Here говорится, что на самом деле существует ограничение, но это 256 байт, что равно 128 16-разрядным регистрам, другими словами - путь выше предела моих попыток чтения.
Мои подозрения: Похоже, что QModbusTcpClient
не позволяет чтение более чем 63
регистров.
Вопрос: Кто-нибудь испытал такую проблему, используя QModbusTcpClient
и есть ли способ преодолеть это ограничение, помимо чтения данных на двух проходах?