Это из-за особенности (или ошибки?) QModbusDataUnit, фрагмент
Еще есть ошибка в слоте on_pushButton_write_clicked (там у вас вместо адреса устройства передается стартовый регистр). Нужно
1. Сделал по аналогии как с подключением к порту, но видимо не все подход одинаково полезны.Код
Нужно заменить наC++ (Qt)QModbusDataUnit writeUnit;
writeUnit.setRegisterType(QModbusDataUnit::HoldingRegisters);
writeUnit.setStartAddress(reg);
writeUnit.setValueCount(1);
writeUnit.setValue(0,data);
Код
Почему так, не вникал, но можете почитать здесь: https://forum.qt.io/topic/90552/qmodbusdataunit-bug/4C++ (Qt)QModbusDataUnit writeUnit(QModbusDataUnit::HoldingRegisters, reg, 1);
writeUnit.setValue(0,data);
Еще есть ошибка в слоте on_pushButton_write_clicked (там у вас вместо адреса устройства передается стартовый регистр). Нужно
Код
C++ (Qt)void MainWindow::on_pushButton_write_clicked()
{
write_registr(ui->spinBox_addr->value(), ui->spinBox_reg->value(), ui->spinBox_writedata->value());//ui->spinBox_writedata->value()
}
Код:
...
modbusDevice->setConnectionParameter(QModbusDevice::SerialPortNameParameter,port_name);
modbusDevice->setConnectionParameter(QModbusDevice::SerialParityParameter,parity);
...
В справке qt посмотрел, есть у класса QModbusDataUnit несколько конструкторов, буду внимательнее.
Спасибо за помощь. Теперь все работает, как и положено.
P.S. говорила мама, читай инструкцию, а я все методом тыка. Вот и натыкал.