Название: Modbus RTU. Запись в modbus регистр. Отправлено: bv7 от Февраль 24, 2023, 17:58 Доброго всем времени суток.
qt5.15 Из приложения должен формироваться запрос — "01 06 00 00 00 05 49 C9", по факту же формируется "00 06 00 00 00 00 88 1B". Пробовал вместо spinBox->value() прописывать другие значения, например 100 или 5, все равно в запросе отправляется 0, судя по трафику. Т.к. реального контроллера нет все эксперименты провожу на виртуальных com портах. Виртуальные порты работают корректно, т.к. mobusPull и modbusSlave данные передают нормально. В чем причина? Как исправить? Запись в регистр: Код: void MainWindow::write_registr(int num_device, int reg, quint16 data){ Код: void MainWindow::on_pushButton_write_clicked() Название: Re: Modbus RTU. Запись в modbus регистр. Отправлено: sergek от Февраль 24, 2023, 20:10 Ошибка здесь:
Код: if (QModbusReply *lastRequest = modbusDevice->sendWriteRequest(writeUnit, num_device)){ Код То же самое и в read_registr. Название: Re: Modbus RTU. Запись в modbus регистр. Отправлено: bv7 от Февраль 25, 2023, 11:26 Ошибка здесь: Код: if (QModbusReply *lastRequest = modbusDevice->sendWriteRequest(writeUnit, num_device)){ Код То же самое и в read_registr. Спасибо, но не помогло :( должен отправлять 01 06 00 01 00 05 18 09. А отправляет 01 06 00 01 00 00 D8 0A Название: Re: Modbus RTU. Запись в modbus регистр. Отправлено: kambala от Февраль 25, 2023, 15:27 Ошибка здесь: и в чем тут ошибка? :)Код: if (QModbusReply *lastRequest = modbusDevice->sendWriteRequest(writeUnit, num_device)){ Код То же самое и в read_registr. Название: Re: Modbus RTU. Запись в modbus регистр. Отправлено: kambala от Февраль 25, 2023, 15:29 я не знаю что такое Modbus, но случайно нет ошибки в on_pushButton_write_clicked()? в функцию подается одно и то же значение (ui->spinBox_reg->value()) в двух разных параметрах
Название: Re: Modbus RTU. Запись в modbus регистр. Отправлено: sergek от Февраль 25, 2023, 16:28 и в чем тут ошибка? :) Согласен, был не прав, погорячился))Название: Re: Modbus RTU. Запись в modbus регистр. Отправлено: sergek от Февраль 25, 2023, 17:21 Спасибо, но не помогло :( должен отправлять 01 06 00 01 00 05 18 09. А отправляет 01 06 00 01 00 00 D8 0A Это из-за особенности (или ошибки?) QModbusDataUnit, фрагмент Код Нужно заменить на Код Почему так, не вникал, но можете почитать здесь: https://forum.qt.io/topic/90552/qmodbusdataunit-bug/4 (https://forum.qt.io/topic/90552/qmodbusdataunit-bug/4) Еще есть ошибка в слоте on_pushButton_write_clicked (там у вас вместо адреса устройства передается стартовый регистр). Нужно Код
Название: Re: Modbus RTU. Запись в modbus регистр. Отправлено: bv7 от Февраль 26, 2023, 08:55 Это из-за особенности (или ошибки?) QModbusDataUnit, фрагмент 1. Сделал по аналогии как с подключением к порту, но видимо не все подход одинаково полезны.Код Нужно заменить на Код Почему так, не вникал, но можете почитать здесь: https://forum.qt.io/topic/90552/qmodbusdataunit-bug/4 (https://forum.qt.io/topic/90552/qmodbusdataunit-bug/4) Еще есть ошибка в слоте on_pushButton_write_clicked (там у вас вместо адреса устройства передается стартовый регистр). Нужно Код
Код: ... В справке qt посмотрел, есть у класса QModbusDataUnit несколько конструкторов, буду внимательнее. Спасибо за помощь. Теперь все работает, как и положено. P.S. говорила мама, читай инструкцию, а я все методом тыка. Вот и натыкал. |