@@ -470,14 +470,28 @@ void ModbusMultiServer::setData(quint8 deviceId, const QModbusDataUnit& data)
470470 return ;
471471 }
472472
473+ if (!_modbusDataUnitMaps.contains (deviceId)) {
474+ emit errorOccured (deviceId, tr (" An incorrect device id was specified (%1)" ).arg (deviceId));
475+ return ;
476+ }
477+
473478 _modbusDataUnitMaps[deviceId].setData (data);
479+
480+ QString error;
474481 for (auto && s : _modbusServerList)
475482 {
476483 s->blockSignals (true );
477- s->setData (data, deviceId);
484+
485+ if (!s->setData (data, deviceId))
486+ error = s->errorString (deviceId);
487+
478488 s->blockSignals (false );
479489 }
480- emit dataChanged (deviceId, data);
490+
491+ if (error.isEmpty ())
492+ emit dataChanged (deviceId, data);
493+ else
494+ emit errorOccured (deviceId, error);
481495}
482496
483497// /
@@ -929,14 +943,16 @@ void ModbusMultiServer::on_stateChanged(QModbusDevice::State state)
929943// /
930944void ModbusMultiServer::on_errorOccurred (QModbusDevice::Error error, int deviceId)
931945{
932- if (error == QModbusDevice::ConnectionError)
933- {
934- auto server = qobject_cast<ModbusServer*>(sender ());
935- const auto errorString = server->errorString (deviceId);
946+ auto server = qobject_cast<ModbusServer*>(sender ());
947+ const auto errorString = server->errorString (deviceId);
936948
949+ if (error == QModbusDevice::ConnectionError) {
937950 server->disconnectDevice ();
938951 emit connectionError (QString (tr (" Connection error. %1" )).arg (errorString));
939952 }
953+ else {
954+ emit errorOccured (deviceId, errorString);
955+ }
940956}
941957
942958// /
0 commit comments