@@ -638,18 +638,19 @@ void ModbusMultiServer::writeDouble(QModbusDataUnit::RegisterType pointType, qui
638638void ModbusMultiServer::writeRegister (QModbusDataUnit::RegisterType pointType, const ModbusWriteParams& params)
639639{
640640 QModbusDataUnit data;
641+ const auto addr = params.Address - (params.ZeroBasedAddress ? 0 : 1 );
641642 if (params.Value .userType () == qMetaTypeId<QVector<quint16>>())
642643 {
643644 switch (pointType)
644645 {
645646 case QModbusDataUnit::Coils:
646647 case QModbusDataUnit::DiscreteInputs:
647- data = createDataUnit (pointType, params. Address - 1 , params.Value .value <QVector<quint16>>(), params.Order );
648+ data = createDataUnit (pointType, addr , params.Value .value <QVector<quint16>>(), params.Order );
648649 break ;
649650
650651 case QModbusDataUnit::InputRegisters:
651652 case QModbusDataUnit::HoldingRegisters:
652- data = createDataUnit (pointType, params. Address - 1 , params.Value .value <QVector<quint16>>(), params.Order );
653+ data = createDataUnit (pointType, addr , params.Value .value <QVector<quint16>>(), params.Order );
653654 break ;
654655
655656 default :
@@ -662,7 +663,7 @@ void ModbusMultiServer::writeRegister(QModbusDataUnit::RegisterType pointType, c
662663 {
663664 case QModbusDataUnit::Coils:
664665 case QModbusDataUnit::DiscreteInputs:
665- data = createDataUnit (pointType, params. Address - 1 , params.Value .toBool (), params.Order );
666+ data = createDataUnit (pointType, addr , params.Value .toBool (), params.Order );
666667 break ;
667668
668669 case QModbusDataUnit::InputRegisters:
@@ -673,39 +674,39 @@ void ModbusMultiServer::writeRegister(QModbusDataUnit::RegisterType pointType, c
673674 case DataDisplayMode::Decimal:
674675 case DataDisplayMode::Integer:
675676 case DataDisplayMode::Hex:
676- data = createDataUnit (pointType, params. Address - 1 , params.Value .toUInt (), params.Order );
677+ data = createDataUnit (pointType, addr , params.Value .toUInt (), params.Order );
677678 break ;
678679 case DataDisplayMode::FloatingPt:
679- data = createFloatDataUnit (pointType, params. Address - 1 , params.Value .toFloat (), params.Order , false );
680+ data = createFloatDataUnit (pointType, addr , params.Value .toFloat (), params.Order , false );
680681 break ;
681682 case DataDisplayMode::SwappedFP:
682- data = createFloatDataUnit (pointType, params. Address - 1 , params.Value .toFloat (), params.Order , true );
683+ data = createFloatDataUnit (pointType, addr , params.Value .toFloat (), params.Order , true );
683684 break ;
684685 case DataDisplayMode::DblFloat:
685- data = createDoubleDataUnit (pointType, params. Address - 1 , params.Value .toDouble (), params.Order , false );
686+ data = createDoubleDataUnit (pointType, addr , params.Value .toDouble (), params.Order , false );
686687 break ;
687688 case DataDisplayMode::SwappedDbl:
688- data = createDoubleDataUnit (pointType, params. Address - 1 , params.Value .toDouble (), params.Order , true );
689+ data = createDoubleDataUnit (pointType, addr , params.Value .toDouble (), params.Order , true );
689690 break ;
690691
691692 case DataDisplayMode::Int32:
692693 case DataDisplayMode::UInt32:
693- data = createInt32DataUnit (pointType, params. Address - 1 , params.Value .toInt (), params.Order , false );
694+ data = createInt32DataUnit (pointType, addr , params.Value .toInt (), params.Order , false );
694695 break ;
695696
696697 case DataDisplayMode::SwappedInt32:
697698 case DataDisplayMode::SwappedUInt32:
698- data = createInt32DataUnit (pointType, params. Address - 1 , params.Value .toInt (), params.Order , true );
699+ data = createInt32DataUnit (pointType, addr , params.Value .toInt (), params.Order , true );
699700 break ;
700701
701702 case DataDisplayMode::Int64:
702703 case DataDisplayMode::UInt64:
703- data = createInt64DataUnit (pointType, params. Address - 1 , params.Value .toLongLong (), params.Order , false );
704+ data = createInt64DataUnit (pointType, addr , params.Value .toLongLong (), params.Order , false );
704705 break ;
705706
706707 case DataDisplayMode::SwappedInt64:
707708 case DataDisplayMode::SwappedUInt64:
708- data = createInt64DataUnit (pointType, params. Address - 1 , params.Value .toLongLong (), params.Order , true );
709+ data = createInt64DataUnit (pointType, addr , params.Value .toLongLong (), params.Order , true );
709710 break ;
710711 }
711712 break ;
0 commit comments