@@ -617,8 +617,9 @@ inline QXmlStreamReader& operator >>(QXmlStreamReader& xml, FormModSim* frm)
617617 if (!frm) return xml;
618618
619619 if (xml.readNextStartElement () && xml.name () == QLatin1String (" FormModSim" )) {
620+ DataDisplayMode ddm;
620621 DisplayDefinition dd;
621- QHash<quint16, quint16> map ;
622+ QHash<quint16, quint16> data ;
622623 QHash<quint16, QString> descriptions;
623624 QHash<quint16, ModbusSimulationParams> simulations;
624625
@@ -630,8 +631,7 @@ inline QXmlStreamReader& operator >>(QXmlStreamReader& xml, FormModSim* frm)
630631 }
631632
632633 if (attributes.hasAttribute (" DataDisplayMode" )) {
633- const DataDisplayMode mode = enumFromString<DataDisplayMode>(attributes.value (" DataDisplayMode" ).toString ());
634- frm->setDataDisplayMode (mode);
634+ ddm = enumFromString<DataDisplayMode>(attributes.value (" DataDisplayMode" ).toString ());
635635 }
636636
637637 if (attributes.hasAttribute (" DisplayHexAddresses" )) {
@@ -786,7 +786,7 @@ inline QXmlStreamReader& operator >>(QXmlStreamReader& xml, FormModSim* frm)
786786 if (ok) {
787787 const quint16 value = xml.readElementText ().toUShort (&ok);
788788 if (ok) {
789- map [address] = value;
789+ data [address] = value;
790790 }
791791 }
792792 } else {
@@ -799,59 +799,61 @@ inline QXmlStreamReader& operator >>(QXmlStreamReader& xml, FormModSim* frm)
799799 }
800800 }
801801
802- if (dd.PointType != QModbusDataUnit::Invalid && !simulations.isEmpty ()) {
803- QHashIterator it (simulations);
804- while (it.hasNext ()) {
805- const auto item = it.next ();
806- switch (dd.PointType ) {
807- case QModbusDataUnit::Coils:
808- case QModbusDataUnit::DiscreteInputs:
809- if (item->Mode == SimulationMode::Toggle || item->Mode == SimulationMode::Random)
810- frm->startSimulation (dd.PointType , item.key () - (dd.ZeroBasedAddress ? 0 : 1 ), item.value ());
811- break ;
812- case QModbusDataUnit::InputRegisters:
813- case QModbusDataUnit::HoldingRegisters:
814- if (item->Mode != SimulationMode::No && item->Mode != SimulationMode::Toggle)
815- frm->startSimulation (dd.PointType , item.key () - (dd.ZeroBasedAddress ? 0 : 1 ), item.value ());
816- break ;
817- default : break ;
802+ if (dd.PointType != QModbusDataUnit::Invalid) {
803+ frm->setDataDisplayMode (ddm);
804+
805+ if (!simulations.isEmpty ()) {
806+ QHashIterator it (simulations);
807+ while (it.hasNext ()) {
808+ const auto item = it.next ();
809+ switch (dd.PointType ) {
810+ case QModbusDataUnit::Coils:
811+ case QModbusDataUnit::DiscreteInputs:
812+ if (item->Mode == SimulationMode::Toggle || item->Mode == SimulationMode::Random)
813+ frm->startSimulation (dd.PointType , item.key () - (dd.ZeroBasedAddress ? 0 : 1 ), item.value ());
814+ break ;
815+ case QModbusDataUnit::InputRegisters:
816+ case QModbusDataUnit::HoldingRegisters:
817+ if (item->Mode != SimulationMode::No && item->Mode != SimulationMode::Toggle)
818+ frm->startSimulation (dd.PointType , item.key () - (dd.ZeroBasedAddress ? 0 : 1 ), item.value ());
819+ break ;
820+ default : break ;
821+ }
818822 }
819823 }
820- }
821824
822- if (dd.PointType != QModbusDataUnit::Invalid && !descriptions.isEmpty ()) {
823- QHashIterator it (descriptions);
824- while (it.hasNext ()) {
825- const auto item = it.next ();
826- frm->setDescription (dd.DeviceId , dd.PointType , item.key (), item.value ());
825+ if (!descriptions.isEmpty ()) {
826+ QHashIterator it (descriptions);
827+ while (it.hasNext ()) {
828+ const auto item = it.next ();
829+ frm->setDescription (dd.DeviceId , dd.PointType , item.key (), item.value ());
830+ }
827831 }
828- }
829832
830- if (dd.PointType != QModbusDataUnit::Invalid && !map.isEmpty ()) {
831- QVector<quint16> values (dd.Length );
832-
833- QHashIterator it (map);
834- while (it.hasNext ()) {
835- const auto item = it.next ();
836- const auto index = item.key () - dd.PointAddress ;
837- switch (dd.PointType ) {
838- case QModbusDataUnit::Coils:
839- case QModbusDataUnit::DiscreteInputs:
840- values[index] = qBound<quint16>(0 , item.value (), 1 );
841- break ;
842- case QModbusDataUnit::InputRegisters:
843- case QModbusDataUnit::HoldingRegisters:
844- values[index] = item.value ();
845- break ;
846- default : break ;
833+ if (!data.isEmpty ()) {
834+ QVector<quint16> values (dd.Length );
835+
836+ QHashIterator it (data);
837+ while (it.hasNext ()) {
838+ const auto item = it.next ();
839+ const auto index = item.key () - dd.PointAddress ;
840+ switch (dd.PointType ) {
841+ case QModbusDataUnit::Coils:
842+ case QModbusDataUnit::DiscreteInputs:
843+ values[index] = qBound<quint16>(0 , item.value (), 1 );
844+ break ;
845+ case QModbusDataUnit::InputRegisters:
846+ case QModbusDataUnit::HoldingRegisters:
847+ values[index] = item.value ();
848+ break ;
849+ default : break ;
850+ }
851+ if (index >= values.length ()) break ;
847852 }
848- if (index >= values.length ()) break ;
849- }
850853
851- frm->configureModbusDataUnit (dd.DeviceId , dd.PointType , dd.PointAddress - (dd.ZeroBasedAddress ? 0 : 1 ), values);
854+ frm->configureModbusDataUnit (dd.DeviceId , dd.PointType , dd.PointAddress - (dd.ZeroBasedAddress ? 0 : 1 ), values);
855+ }
852856 }
853-
854-
855857 }
856858 else {
857859 xml.skipCurrentElement ();
0 commit comments