summaryrefslogtreecommitdiffstats
path: root/examples/opcua/opcuaviewer/mainwindow.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'examples/opcua/opcuaviewer/mainwindow.cpp')
-rw-r--r--examples/opcua/opcuaviewer/mainwindow.cpp64
1 files changed, 57 insertions, 7 deletions
diff --git a/examples/opcua/opcuaviewer/mainwindow.cpp b/examples/opcua/opcuaviewer/mainwindow.cpp
index 36ba78f..a57c5f7 100644
--- a/examples/opcua/opcuaviewer/mainwindow.cpp
+++ b/examples/opcua/opcuaviewer/mainwindow.cpp
@@ -62,6 +62,8 @@
#include <QOpcUaAuthenticationInformation>
#include <QOpcUaErrorState>
+#include <QOpcUaHistoryReadRawRequest>
+
QT_BEGIN_NAMESPACE
static MainWindow *mainWindowGlobal = nullptr;
@@ -134,13 +136,13 @@ MainWindow::MainWindow(const QString &initialUrl, QWidget *parent) : QMainWindow
ui->treeView->header()->setSectionResizeMode(QHeaderView::ResizeToContents);
if (ui->opcUaPlugin->count() == 0) {
- ui->opcUaPlugin->setDisabled(true);
- ui->connectButton->setDisabled(true);
QMessageBox::critical(this, tr("No OPCUA plugins available"), tr("The list of available OPCUA plugins is empty. No connection possible."));
}
mContextMenu = new QMenu(ui->treeView);
- mContextMenuAction = mContextMenu->addAction(tr("Enable Monitoring"), this, &MainWindow::toggleMonitoring);
+ mContextMenuMonitoringAction = mContextMenu->addAction(tr("Enable Monitoring"), this, &MainWindow::toggleMonitoring);
+ mContextMenuHistorizingAction = mContextMenu->addAction(tr("Request historic data"), this, &MainWindow::showHistorizing);
+
ui->treeView->setContextMenuPolicy(Qt::CustomContextMenu);
connect(ui->treeView, &QTreeView::customContextMenuRequested, this, &MainWindow::openCustomContextMenu);
@@ -465,9 +467,13 @@ void MainWindow::openCustomContextMenu(const QPoint &point)
if (index.isValid() && index.column() == 1) {
TreeItem* item = static_cast<TreeItem *>(index.internalPointer());
if (item) {
- mContextMenuAction->setData(index);
- mContextMenuAction->setEnabled(item->supportsMonitoring());
- mContextMenuAction->setText(item->monitoringEnabled() ? tr("Disable Monitoring") : tr("Enable Monitoring"));
+ mContextMenuMonitoringAction->setData(index);
+ mContextMenuMonitoringAction->setEnabled(item->supportsMonitoring());
+ mContextMenuMonitoringAction->setText(item->monitoringEnabled() ? tr("Disable Monitoring") : tr("Enable Monitoring"));
+
+ mContextMenuHistorizingAction->setData(index);
+ QModelIndex isHistoricIndex = mOpcUaModel->index(index.row(), 7, index.parent());
+ mContextMenuHistorizingAction->setEnabled(mOpcUaModel->data(isHistoricIndex, Qt::DisplayRole).toString() == "true");
mContextMenu->exec(ui->treeView->viewport()->mapToGlobal(point));
}
}
@@ -475,7 +481,7 @@ void MainWindow::openCustomContextMenu(const QPoint &point)
void MainWindow::toggleMonitoring()
{
- QModelIndex index = mContextMenuAction->data().toModelIndex();
+ QModelIndex index = mContextMenuMonitoringAction->data().toModelIndex();
if (index.isValid()) {
TreeItem* item = static_cast<TreeItem *>(index.internalPointer());
if (item) {
@@ -484,4 +490,48 @@ void MainWindow::toggleMonitoring()
}
}
+void MainWindow::showHistorizing()
+{
+ QModelIndex modelIndex = mContextMenuHistorizingAction->data().toModelIndex();
+ QModelIndex nodeIdIndex = mOpcUaModel->index(modelIndex.row(), 4, modelIndex.parent());
+ QString nodeId = mOpcUaModel->data(nodeIdIndex, Qt::DisplayRole).toString();
+ auto request = QOpcUaHistoryReadRawRequest(
+ {QOpcUaReadItem(nodeId)},
+ QDateTime::currentDateTime(),
+ QDateTime::currentDateTime().addDays(-2),
+ 5,
+ false
+ );
+ mHistoryReadResponse.reset(mOpcUaClient->readHistoryData(request));
+
+ if (mHistoryReadResponse) {
+ QObject::connect(mHistoryReadResponse.get(), &QOpcUaHistoryReadResponse::readHistoryDataFinished,
+ this, &MainWindow::handleReadHistoryDataFinished);
+ QObject::connect(mHistoryReadResponse.get(), &QOpcUaHistoryReadResponse::stateChanged, this, [](QOpcUaHistoryReadResponse::State state) {
+ qDebug() << "History read state changed to" << state;
+ });
+ } else {
+ qWarning() << "Failed to request history data";
+ }
+}
+
+void MainWindow::handleReadHistoryDataFinished(QList<QOpcUaHistoryData> results, QOpcUa::UaStatusCode serviceResult)
+{
+ if (serviceResult != QOpcUa::UaStatusCode::Good) {
+ qWarning() << "readHistoryData request finished with bad status code: " << serviceResult;
+ return;
+ }
+
+ for (int i = 0; i < results.count(); ++i) {
+ qInfo() << "NodeId:" << results.at(i).nodeId() << "; statusCode:" << results.at(i).statusCode() << "; returned values:" << results.at(i).count();
+ for (int j = 0; j < results.at(i).count(); ++j) {
+ qInfo() << j
+ << "source timestamp:" << results.at(i).result()[j].sourceTimestamp()
+ << "server timestamp:" << results.at(i).result()[j].serverTimestamp()
+ << "value:" << results.at(i).result()[j].value();
+
+ }
+ }
+}
+
QT_END_NAMESPACE