void MainWindow::write_registr(int num_device, int reg, quint16 data){ if (!modbusDevice) return; QModbusDataUnit writeUnit; writeUnit.setRegisterType(QModbusDataUnit::HoldingRegisters); writeUnit.setStartAddress(reg); writeUnit.setValueCount(1); writeUnit.setValue(0,data); if (QModbusReply *lastRequest = modbusDevice->sendWriteRequest(writeUnit, num_device)){ if(!lastRequest->isFinished()){ connect(lastRequest, &QModbusReply::finished, this, [=](){ if(lastRequest->error() == QModbusDevice::ProtocolError){ //ошибка протокола ui->statusBar->showMessage("Ошибка протокола"); }else if(lastRequest->error() == QModbusDevice::TimeoutError){ //превышено время ожидания ui->statusBar->showMessage("Превышено время ожидания", 5000); }else if (lastRequest->error() != QModbusDevice::NoError){ //прочие ошибки ui->statusBar->showMessage("Ошибка"); }else if(lastRequest->error() == QModbusDevice::NoError){ //успешно ui->statusBar->showMessage("Успешно",5000); }; lastRequest->deleteLater(); }); } else lastRequest->deleteLater(); } else { //ошибка записи ui->statusBar->showMessage("Ошибка записи", 5000); };}; //Примечание: write_registr функция для записи регистра
void MainWindow::on_pushButton_write_clicked(){ write_registr(ui->spinBox_reg->value(), ui->spinBox_reg->value(), ui->spinBox_writedata->value());}
if (QModbusReply *lastRequest = modbusDevice->sendWriteRequest(writeUnit, num_device)){
C++ (Qt) QModbusReply *lastRequest = modbusDevice->sendWriteRequest(writeUnit, num_device); if (lastRequest){
C++ (Qt) QModbusDataUnit writeUnit; writeUnit.setRegisterType(QModbusDataUnit::HoldingRegisters); writeUnit.setStartAddress(reg); writeUnit.setValueCount(1); writeUnit.setValue(0,data);
C++ (Qt) QModbusDataUnit writeUnit(QModbusDataUnit::HoldingRegisters, reg, 1); writeUnit.setValue(0,data);
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);...