Skip to content

Commit c0f18f9

Browse files
committed
Correct FormModSim xml import
1 parent db3cb50 commit c0f18f9

4 files changed

Lines changed: 67 additions & 54 deletions

File tree

omodsim/formmodsim.cpp

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -297,7 +297,18 @@ void FormModSim::stopTextCapture()
297297
///
298298
void FormModSim::setDataDisplayMode(DataDisplayMode mode)
299299
{
300-
ui->outputWidget->setDataDisplayMode(mode);
300+
const auto dd = displayDefinition();
301+
switch(dd.PointType) {
302+
case QModbusDataUnit::Coils:
303+
case QModbusDataUnit::DiscreteInputs:
304+
ui->outputWidget->setDataDisplayMode(DataDisplayMode::Binary);
305+
break;
306+
case QModbusDataUnit::InputRegisters:
307+
case QModbusDataUnit::HoldingRegisters:
308+
ui->outputWidget->setDataDisplayMode(mode);
309+
break;
310+
default: break;
311+
}
301312
}
302313

303314
///

omodsim/formmodsim.h

Lines changed: 51 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -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();

omodsim/translations/omodsim_ru.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1187,7 +1187,7 @@ Length: %2</source>
11871187
<translation type="vanished">Указана недопустимая длина данных</translation>
11881188
</message>
11891189
<message>
1190-
<location filename="../formmodsim.cpp" line="462"/>
1190+
<location filename="../formmodsim.cpp" line="473"/>
11911191
<source>Address Base: %1
11921192
Start Address: %2
11931193
Length: %3</source>
@@ -1196,7 +1196,7 @@ Length: %3</source>
11961196
Количество: %3</translation>
11971197
</message>
11981198
<message>
1199-
<location filename="../formmodsim.cpp" line="465"/>
1199+
<location filename="../formmodsim.cpp" line="476"/>
12001200
<source>Device Id: %1
12011201
MODBUS Point Type:
12021202
%2</source>

omodsim/translations/omodsim_zh.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1187,7 +1187,7 @@ Length: %2</source>
11871187
<translation type="vanished">Указана недопустимая длина данных</translation>
11881188
</message>
11891189
<message>
1190-
<location filename="../formmodsim.cpp" line="462"/>
1190+
<location filename="../formmodsim.cpp" line="473"/>
11911191
<source>Address Base: %1
11921192
Start Address: %2
11931193
Length: %3</source>
@@ -1196,7 +1196,7 @@ Length: %3</source>
11961196
长度: %3</translation>
11971197
</message>
11981198
<message>
1199-
<location filename="../formmodsim.cpp" line="465"/>
1199+
<location filename="../formmodsim.cpp" line="476"/>
12001200
<source>Device Id: %1
12011201
MODBUS Point Type:
12021202
%2</source>

0 commit comments

Comments
 (0)