Ограничение в размере данных QModbusTcpClient

История позади: Используя QModbusTcpClient Я пытаюсь прочитать содержимое с устройства, подключенного к Modbus/TCP сеть. Для этого я написал программу для Windows (протестированную на 7 и 10) на Qt C ++ (Qt версия 5.7.0), которая по сути вызывает QModbusClient::sendReadRequest с QModbusDataUnit::QModbusDataUnit(RegisterType type, int address, quint16 size) в качестве параметра, где тип является HoldingRegisters, адрес равно 1000 (может быть другой адрес, это не важно для этого конкретного вопроса) и размер длина желаемых данных, которые будут считаны с устройства.

Проблема: Все хорошо работает когда size меньше или равно 63 регистры. Каждая попытка выйти за пределы этого значения приводит к ошибке, которая зависит от устройства, с которым я тестирую программу, но обычно говорит о недопустимом запросе.

тесты:

  1. Я проверил это с несколькими реальными устройствами и с Modbus/TCP
    имитатор
    получить те же результаты, т.е. size <знак равно 63 -> хорошо; size >
    63 -> ошибка
  2. Modpoll с другой стороны, позволяет мне прочитать блок данных с тех же устройств и симулятора с size лучше чем 63 регистры

Некоторые исследования: Вот утверждается, что ограничение действительно есть, но оно составляет 256 байт, что равно 128 16-битным регистрам, другими словами — намного выше предела моих попыток чтения.

Мое подозрение: Похоже, что QModbusTcpClient не позволяет читать больше, чем 63 регистры.

Вопрос: Кто-нибудь сталкивался с такой проблемой, используя QModbusTcpClient и есть ли способ преодолеть это ограничение, кроме чтения данных за два прохода?

0

Решение

Что ж, решение, которое сработало в моем случае, заключается в том, чтобы взять дело в свои руки и написать свой собственный класс для связи с устройствами Modbus. Класс наследуется от QObjectТаким образом, система слотов сигналов все еще в распоряжении, однако фактическая функциональность основана на winsock2.h, Вот это пример программы, которая делает то, что мне нужно. Другие полезные источники, на которые я наткнулся, это эта книга, пример программы из ссылки Winsocket 2 и, конечно, Спецификация Modbus. Оказалось, что это не так сложно, и с небольшой помощью из источников, которые я упомянул, я смог решить проблему, с которой столкнулся.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]