Skip to content

Commit 149dbb2

Browse files
committed
Multiserver with some modbus tcp servers
1 parent e4bd0a2 commit 149dbb2

3 files changed

Lines changed: 58 additions & 25 deletions

File tree

omodsim/controls/mainstatusbar.cpp

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ MainStatusBar::MainStatusBar(const ModbusMultiServer& server, QWidget* parent)
4545
auto label = new QLabel(this);
4646
label->setFrameShadow(QFrame::Sunken);
4747
label->setFrameShape(QFrame::Panel);
48-
label->setMinimumWidth(120);
48+
label->setMinimumWidth(80);
4949
label->setProperty("ConnectionDetails", QVariant::fromValue(cd));
5050

5151
updateConnectionInfo(label, cd);
@@ -60,9 +60,8 @@ MainStatusBar::MainStatusBar(const ModbusMultiServer& server, QWidget* parent)
6060
{
6161
if(cd == label->property("ConnectionDetails").value<ConnectionDetails>())
6262
{
63-
_labels.removeOne(label);
6463
removeWidget(label);
65-
delete label;
64+
_labels.removeOne(label);
6665

6766
break;
6867
}
@@ -107,15 +106,15 @@ void MainStatusBar::updateConnectionInfo(QLabel* label, const ConnectionDetails&
107106
switch(cd.Type)
108107
{
109108
case ConnectionType::Tcp:
110-
label->setText(QString(tr("TCP/IP %1:%2")).arg(cd.TcpParams.IPAddress, QString::number(cd.TcpParams.ServicePort)));
109+
label->setText(QString(tr("Modbus/TCP Srv %1:%2")).arg(cd.TcpParams.IPAddress, QString::number(cd.TcpParams.ServicePort)));
111110
break;
112111

113112
case ConnectionType::Serial:
114-
label->setText(QString(tr("Port %1:%2:%3:%4:%5 ")).arg(cd.SerialParams.PortName,
115-
QString::number(cd.SerialParams.BaudRate),
116-
QString::number(cd.SerialParams.WordLength),
117-
Parity_toString(cd.SerialParams.Parity),
118-
QString::number(cd.SerialParams.StopBits)));
113+
label->setText(QString(tr("Port %1:%2:%3:%4:%5")).arg(cd.SerialParams.PortName,
114+
QString::number(cd.SerialParams.BaudRate),
115+
QString::number(cd.SerialParams.WordLength),
116+
Parity_toString(cd.SerialParams.Parity),
117+
QString::number(cd.SerialParams.StopBits)));
119118
break;
120119
}
121120
}

omodsim/menuconnect.cpp

Lines changed: 48 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -13,31 +13,66 @@ MenuConnect::MenuConnect(MenuType type, ModbusMultiServer& server, QWidget *pare
1313
,_menuType(type)
1414
,_mbMultiServer(server)
1515
{
16-
addAction(tr("Modbus/TCP Srv"), ConnectionType::Tcp, QString());
17-
18-
for(auto&& port: getAvailableSerialPorts())
16+
if(type == MenuType::ConnectMenu)
1917
{
20-
const auto text = QString(tr("Port %1")).arg(port);
21-
addAction(text, ConnectionType::Serial, port);
18+
addAction(tr("Modbus/TCP Srv"), ConnectionType::Tcp, QString());
19+
for(auto&& port: getAvailableSerialPorts())
20+
{
21+
const auto text = QString(tr("Port %1")).arg(port);
22+
addAction(text, ConnectionType::Serial, port);
23+
}
2224
}
2325

24-
connect(&_mbMultiServer, &ModbusMultiServer::connected, this, [&](const ConnectionDetails&)
26+
connect(&_mbMultiServer, &ModbusMultiServer::connected, this, [&](const ConnectionDetails& cd)
2527
{
26-
for(auto&& a : actions())
28+
if(_menuType == MenuType::DisconnectMenu)
2729
{
28-
const auto data = a->data().value<QPair<ConnectionType, QString>>();
29-
const bool isConnected = _mbMultiServer.isConnected(data.first, data.second);
30-
a->setEnabled(_menuType == ConnectMenu ? !isConnected : isConnected);
30+
switch(cd.Type)
31+
{
32+
case ConnectionType::Tcp:
33+
{
34+
const auto port = QString("%1:%2").arg(cd.TcpParams.IPAddress, QString::number(cd.TcpParams.ServicePort));
35+
addAction(QString(tr("Modbus/TCP Srv %1")).arg(port), ConnectionType::Tcp, port);
36+
}
37+
break;
38+
39+
case ConnectionType::Serial:
40+
addAction(QString(tr("Port %1")).arg(cd.SerialParams.PortName), ConnectionType::Serial, cd.SerialParams.PortName);
41+
break;
42+
}
43+
}
44+
else
45+
{
46+
for(auto&& a : actions())
47+
{
48+
const auto data = a->data().value<QPair<ConnectionType, QString>>();
49+
const bool isConnected = _mbMultiServer.isConnected(data.first, data.second);
50+
a->setEnabled(_menuType == ConnectMenu ? !isConnected : isConnected);
51+
}
3152
}
3253
});
3354

34-
connect(&_mbMultiServer, &ModbusMultiServer::disconnected, this, [&](const ConnectionDetails&)
55+
connect(&_mbMultiServer, &ModbusMultiServer::disconnected, this, [&](const ConnectionDetails& cd)
3556
{
3657
for(auto&& a : actions())
3758
{
3859
const auto data = a->data().value<QPair<ConnectionType, QString>>();
39-
const bool isConnected = _mbMultiServer.isConnected(data.first, data.second);
40-
a->setEnabled(_menuType == ConnectMenu ? !isConnected : isConnected);
60+
if(_menuType == MenuType::DisconnectMenu)
61+
{
62+
const auto port = (data.first == ConnectionType::Tcp) ?
63+
QString("%1:%2").arg(cd.TcpParams.IPAddress, QString::number(cd.TcpParams.ServicePort)) :
64+
cd.SerialParams.PortName;
65+
66+
if(data.first == cd.Type && data.second == port)
67+
{
68+
removeAction(a);
69+
}
70+
}
71+
else
72+
{
73+
const bool isConnected = _mbMultiServer.isConnected(data.first, data.second);
74+
a->setEnabled(_menuType == ConnectMenu ? !isConnected : isConnected);
75+
}
4176
}
4277
});
4378
}
@@ -140,5 +175,4 @@ void MenuConnect::addAction(const QString& text, ConnectionType type, const QStr
140175

141176
const auto data = QPair<ConnectionType, QString>(type, port);
142177
action->setData(QVariant::fromValue(data));
143-
action->setEnabled(_menuType == ConnectMenu);
144178
}

omodsim/modbusmultiserver.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -94,8 +94,8 @@ QSharedPointer<QModbusServer> ModbusMultiServer::findModbusServer(ConnectionType
9494
for(auto&& s : _modbusServerList)
9595
{
9696
const auto cd = s->property("ConnectionDetails").value<ConnectionDetails>();
97-
if((cd.Type == ConnectionType::Tcp && type == ConnectionType::Tcp) ||
98-
(cd.Type == ConnectionType::Serial && type == ConnectionType::Serial && cd.SerialParams.PortName == port))
97+
if((cd.Type == ConnectionType::Tcp && type == ConnectionType::Tcp && port == QString("%1:%2").arg(cd.TcpParams.IPAddress, QString::number(cd.TcpParams.ServicePort))) ||
98+
(cd.Type == ConnectionType::Serial && type == ConnectionType::Serial && port == cd.SerialParams.PortName))
9999
{
100100
return s;
101101
}

0 commit comments

Comments
 (0)