From a5d41f476a990cf07e9cd3db3556cecf8555fb74 Mon Sep 17 00:00:00 2001 From: suyu <1643689728@qq.com> Date: Thu, 13 Aug 2026 12:26:25 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E7=A7=BB=E9=99=A4=E7=BB=9F?= =?UTF-8?q?=E4=B8=80=E6=95=B0=E6=8D=AE=E7=82=B9=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/integrated_platform.pro | 4 - app/src/domain/data_point_model.cpp | 37 - app/src/domain/data_point_model.h | 14 - app/src/domain/project_model.cpp | 23 - app/src/domain/project_model.h | 3 - .../infrastructure/json_project_storage.cpp | 53 +- app/src/main.cpp | 3 - app/src/services/data_point_service.cpp | 170 ----- app/src/services/data_point_service.h | 51 -- app/src/services/runtime_mode_service.cpp | 4 - app/src/ui/main_window.cpp | 182 ----- app/src/ui/main_window.h | 8 - app/src/ui/main_window.ui | 687 +++++++++++++----- app/tests/data_point_service_tests.cpp | 107 --- app/tests/data_point_service_tests.pro | 29 - app/tests/domain_tests.pro | 2 - app/tests/hmi_editor_service_tests.pro | 2 - app/tests/logic_editor_service_tests.pro | 2 - app/tests/main_window_tests.cpp | 11 +- app/tests/main_window_tests.pro | 4 - app/tests/plc_runtime_tests.cpp | 13 +- app/tests/plc_runtime_tests.pro | 2 - app/tests/project_management_tests.cpp | 12 +- app/tests/project_management_tests.pro | 2 - app/tests/runtime_mode_service_tests.pro | 2 - 25 files changed, 532 insertions(+), 895 deletions(-) delete mode 100644 app/src/domain/data_point_model.cpp delete mode 100644 app/src/domain/data_point_model.h delete mode 100644 app/src/services/data_point_service.cpp delete mode 100644 app/src/services/data_point_service.h delete mode 100644 app/tests/data_point_service_tests.cpp delete mode 100644 app/tests/data_point_service_tests.pro diff --git a/app/integrated_platform.pro b/app/integrated_platform.pro index 430dd32..1d6c097 100644 --- a/app/integrated_platform.pro +++ b/app/integrated_platform.pro @@ -21,13 +21,11 @@ SOURCES += \ src/domain/register_address.cpp \ src/domain/register_repository.cpp \ src/domain/active_register_repository.cpp \ - src/domain/data_point_model.cpp \ src/domain/hmi_model.cpp \ src/domain/control_logic_model.cpp \ src/domain/project_model.cpp \ src/domain/runtime_state.cpp \ src/services/project_service.cpp \ - src/services/data_point_service.cpp \ src/services/hmi_editor_service.cpp \ src/services/logic_editor_service.cpp \ src/services/hmi_runtime_service.cpp \ @@ -46,14 +44,12 @@ HEADERS += \ src/domain/register_address.h \ src/domain/register_repository.h \ src/domain/active_register_repository.h \ - src/domain/data_point_model.h \ src/domain/hmi_model.h \ src/domain/control_logic_model.h \ src/domain/project_model.h \ src/domain/runtime_state.h \ src/domain/project_storage.h \ src/services/project_service.h \ - src/services/data_point_service.h \ src/services/hmi_editor_service.h \ src/services/logic_editor_service.h \ src/services/hmi_runtime_service.h \ diff --git a/app/src/domain/data_point_model.cpp b/app/src/domain/data_point_model.cpp deleted file mode 100644 index 207efdd..0000000 --- a/app/src/domain/data_point_model.cpp +++ /dev/null @@ -1,37 +0,0 @@ -#include "data_point_model.h" - -#include -#include - -namespace { - -bool isBlank(const std::string &value) -{ - return value.empty() - || std::all_of( - value.cbegin(), value.cend(), - [](unsigned char character) { return std::isspace(character) != 0; }); -} - -} // namespace - -bool DataPoint::validate(std::string *error) const -{ - if (!address.isValid()) - { - if (error != nullptr) - { - *error = "data point requires a valid M or D address"; - } - return false; - } - if (isBlank(name)) - { - if (error != nullptr) - { - *error = "data point name must not be empty"; - } - return false; - } - return true; -} diff --git a/app/src/domain/data_point_model.h b/app/src/domain/data_point_model.h deleted file mode 100644 index db8f7ec..0000000 --- a/app/src/domain/data_point_model.h +++ /dev/null @@ -1,14 +0,0 @@ -#pragma once - -#include "register_address.h" - -#include - -struct DataPoint -{ - RegisterAddress address; - std::string name; - std::string comment; - - bool validate(std::string *error = nullptr) const; -}; diff --git a/app/src/domain/project_model.cpp b/app/src/domain/project_model.cpp index 4a15e7b..4d6d118 100644 --- a/app/src/domain/project_model.cpp +++ b/app/src/domain/project_model.cpp @@ -52,29 +52,6 @@ bool Project::validate(std::string *error) const setError(error, "control logic ids must be unique within a project"); return false; } - for (auto current = dataPoints.cbegin(); current != dataPoints.cend(); ++current) - { - if (!current->validate(error)) - { - return false; - } - const auto duplicate = std::find_if( - current + 1, - dataPoints.cend(), - [¤t](const DataPoint &candidate) - { - return candidate.address == current->address - || candidate.name == current->name; - }); - if (duplicate != dataPoints.cend()) - { - if (error != nullptr) - { - *error = "data point addresses and names must be unique"; - } - return false; - } - } for (const HmiPage &page : hmiPages) { // 工程聚合校验会向下委托页面和控件的完整规则 diff --git a/app/src/domain/project_model.h b/app/src/domain/project_model.h index 2184712..c6aeb39 100644 --- a/app/src/domain/project_model.h +++ b/app/src/domain/project_model.h @@ -1,7 +1,6 @@ #pragma once #include "control_logic_model.h" -#include "data_point_model.h" #include "hmi_model.h" #include @@ -27,8 +26,6 @@ struct Project std::vector hmiPages; // 工程包含的控制逻辑集合 std::vector controlLogics; - // M/D 地址的工程级名称和注释定义 - std::vector dataPoints; // 校验工程配置并通过 error 返回失败原因 bool validate(std::string *error = nullptr) const; diff --git a/app/src/infrastructure/json_project_storage.cpp b/app/src/infrastructure/json_project_storage.cpp index 574a304..ebf7368 100644 --- a/app/src/infrastructure/json_project_storage.cpp +++ b/app/src/infrastructure/json_project_storage.cpp @@ -253,28 +253,6 @@ bool parseAddress( return true; } -QJsonObject serializeDataPoint(const DataPoint &data_point) -{ - QJsonObject object; - object.insert(QStringLiteral("address"), serializeAddress(data_point.address)); - object.insert(QStringLiteral("name"), fromUtf8(data_point.name)); - object.insert(QStringLiteral("comment"), fromUtf8(data_point.comment)); - return object; -} - -bool parseDataPoint( - const QJsonObject &object, - const std::string &context, - DataPoint *data_point, - ParseState *state) -{ - QJsonObject address; - return readObject(object, "address", context, &address, state) - && parseAddress(address, context + ".address", &data_point->address, state) - && readString(object, "name", context, &data_point->name, state) - && readString(object, "comment", context, &data_point->comment, state); -} - // 将 HMI 控件类型枚举转换为工程文件中的稳定字符串 QString hmiControlTypeName(HmiControlType type) { @@ -1088,19 +1066,12 @@ QJsonObject serializeProject(const Project &project) logics.append(serializeControlLogic(logic)); } - QJsonArray data_points; - for (const DataPoint &data_point : project.dataPoints) - { - data_points.append(serializeDataPoint(data_point)); - } - QJsonObject object; object.insert(QStringLiteral("formatVersion"), fromUtf8(project.metadata.formatVersion)); object.insert(QStringLiteral("id"), fromUtf8(project.metadata.id)); object.insert(QStringLiteral("name"), fromUtf8(project.metadata.name)); object.insert(QStringLiteral("hmiPages"), pages); object.insert(QStringLiteral("controlLogics"), logics); - object.insert(QStringLiteral("dataPoints"), data_points); return object; } @@ -1110,7 +1081,6 @@ bool parseProject( { QJsonArray pages; QJsonArray logics; - QJsonArray data_points; if (!readString( object, "formatVersion", @@ -1131,8 +1101,7 @@ bool parseProject( if (!readString(object, "id", "project", &project->metadata.id, state) || !readString(object, "name", "project", &project->metadata.name, state) || !readArray(object, "hmiPages", "project", &pages, state) - || !readArray(object, "controlLogics", "project", &logics, state) - || !readArray(object, "dataPoints", "project", &data_points, state)) + || !readArray(object, "controlLogics", "project", &logics, state)) { return false; } @@ -1179,26 +1148,6 @@ bool parseProject( } project->controlLogics.push_back(std::move(logic)); } - project->dataPoints.reserve(static_cast(data_points.size())); - for (int index = 0; index < data_points.size(); ++index) - { - if (!data_points.at(index).isObject()) - { - return state->fail( - ProjectStorageError::InvalidField, - "project.dataPoints items must be objects"); - } - DataPoint data_point{RegisterAddress{RegisterArea::M, 0}, {}, {}}; - if (!parseDataPoint( - data_points.at(index).toObject(), - "project.dataPoints[" + std::to_string(index) + ']', - &data_point, - state)) - { - return false; - } - project->dataPoints.push_back(std::move(data_point)); - } return true; } diff --git a/app/src/main.cpp b/app/src/main.cpp index f28577c..5fa5d07 100644 --- a/app/src/main.cpp +++ b/app/src/main.cpp @@ -13,7 +13,6 @@ #include "infrastructure/plc_register_repository.h" #include "domain/active_register_repository.h" #include "services/hmi_editor_service.h" -#include "services/data_point_service.h" #include "services/hmi_runtime_service.h" #include "services/logic_editor_service.h" #include "services/offline_simulation_service.h" @@ -31,7 +30,6 @@ int main(int argc, char *argv[]) JsonProjectStorage project_storage; ProjectService project_service(project_storage); HmiEditorService hmi_editor_service(project_service); - DataPointService data_point_service(project_service); LogicEditorService logic_editor_service(project_service); // 当前离线模式使用内存仓库,后续真机模式替换为 PLC 缓存实现 VirtualRegisterRepository virtual_register_repository; @@ -51,7 +49,6 @@ int main(int argc, char *argv[]) runtime_mode_service, project_service, hmi_editor_service, - data_point_service, logic_editor_service, hmi_runtime_service); main_window.show(); diff --git a/app/src/services/data_point_service.cpp b/app/src/services/data_point_service.cpp deleted file mode 100644 index 7b11bba..0000000 --- a/app/src/services/data_point_service.cpp +++ /dev/null @@ -1,170 +0,0 @@ -#include "data_point_service.h" - -#include "project_service.h" - -#include - -namespace { - -bool nodeUsesAddress(const LogicNode &node, const RegisterAddress &address) -{ - return std::visit( - [&address](const auto &config) { return config.address == address; }, - node.config); -} - -} // namespace - -DataPointService::DataPointService(ProjectService &project_service) - : project_service_(project_service) -{ -} - -const std::vector &DataPointService::dataPoints() const -{ - return project_service_.project().dataPoints; -} - -const DataPoint *DataPointService::find(const RegisterAddress &address) const -{ - const auto &points = dataPoints(); - const auto found = std::find_if( - points.cbegin(), points.cend(), - [&address](const DataPoint &point) { return point.address == address; }); - return found == points.cend() ? nullptr : &*found; -} - -DataPointResult DataPointService::add(const DataPoint &data_point) -{ - const DataPointResult validation = validateUnique(data_point, nullptr); - if (!validation.succeeded) - { - return validation; - } - project_service_.editProject().dataPoints.push_back(data_point); - return {true, DataPointError::None, {}}; -} - -DataPointResult DataPointService::update( - const RegisterAddress &old_address, const DataPoint &data_point) -{ - const auto existing = std::find_if( - dataPoints().cbegin(), dataPoints().cend(), - [&old_address](const DataPoint &candidate) - { - return candidate.address == old_address; - }); - if (existing == dataPoints().cend()) - { - return {false, DataPointError::NotFound, "data point was not found"}; - } - const DataPointResult validation = validateUnique(data_point, &old_address); - if (!validation.succeeded) - { - return validation; - } - if (data_point.address != old_address && !references(old_address).empty()) - { - return {false, DataPointError::AddressInUse, - "referenced data point address cannot be changed"}; - } - Project &project = project_service_.editProject(); - const auto point = std::find_if( - project.dataPoints.begin(), project.dataPoints.end(), - [&old_address](const DataPoint &candidate) - { - return candidate.address == old_address; - }); - *point = data_point; - return {true, DataPointError::None, {}}; -} - -DataPointResult DataPointService::remove(const RegisterAddress &address) -{ - if (find(address) == nullptr) - { - return {false, DataPointError::NotFound, "data point was not found"}; - } - if (!references(address).empty()) - { - return {false, DataPointError::AddressInUse, - "data point is still referenced by HMI or ladder logic"}; - } - Project &project = project_service_.editProject(); - project.dataPoints.erase( - std::remove_if( - project.dataPoints.begin(), project.dataPoints.end(), - [&address](const DataPoint &point) { return point.address == address; }), - project.dataPoints.end()); - return {true, DataPointError::None, {}}; -} - -std::vector DataPointService::references( - const RegisterAddress &address) const -{ - std::vector result; - const Project &project = project_service_.project(); - for (const HmiPage &page : project.hmiPages) - { - for (const HmiControl &control : page.controls) - { - if (control.binding.has_value() && *control.binding == address) - { - result.push_back({"HMI/" + page.name + '/' + control.id}); - } - } - } - for (const ControlLogic &logic : project.controlLogics) - { - for (const LadderRung &rung : logic.rungs) - { - if (rung.condition.has_value()) - { - std::vector nodes; - collectConditionNodes(*rung.condition, &nodes); - for (const LogicNode *node : nodes) - { - if (nodeUsesAddress(*node, address)) - { - result.push_back({"LAD/" + logic.name + '/' + rung.name + '/' + node->id}); - } - } - } - if (rung.output.has_value() && nodeUsesAddress(*rung.output, address)) - { - result.push_back({"LAD/" + logic.name + '/' + rung.name + '/' - + rung.output->id}); - } - } - } - return result; -} - -DataPointResult DataPointService::validateUnique( - const DataPoint &data_point, - const RegisterAddress *ignored_address) const -{ - std::string error; - if (!data_point.validate(&error)) - { - return {false, DataPointError::InvalidDataPoint, error}; - } - for (const DataPoint &existing : dataPoints()) - { - if (ignored_address != nullptr && existing.address == *ignored_address) - { - continue; - } - if (existing.address == data_point.address) - { - return {false, DataPointError::DuplicateAddress, - "data point address already exists"}; - } - if (existing.name == data_point.name) - { - return {false, DataPointError::DuplicateName, - "data point name already exists"}; - } - } - return {true, DataPointError::None, {}}; -} diff --git a/app/src/services/data_point_service.h b/app/src/services/data_point_service.h deleted file mode 100644 index 88fe087..0000000 --- a/app/src/services/data_point_service.h +++ /dev/null @@ -1,51 +0,0 @@ -#pragma once - -#include "domain/data_point_model.h" - -#include -#include - -class ProjectService; - -enum class DataPointError -{ - None, - InvalidDataPoint, - DuplicateAddress, - DuplicateName, - NotFound, - AddressInUse -}; - -struct DataPointResult -{ - bool succeeded = false; - DataPointError error = DataPointError::None; - std::string message; -}; - -struct DataPointReference -{ - std::string location; -}; - -class DataPointService -{ -public: - explicit DataPointService(ProjectService &project_service); - - const std::vector &dataPoints() const; - const DataPoint *find(const RegisterAddress &address) const; - DataPointResult add(const DataPoint &data_point); - DataPointResult update( - const RegisterAddress &old_address, const DataPoint &data_point); - DataPointResult remove(const RegisterAddress &address); - std::vector references(const RegisterAddress &address) const; - -private: - DataPointResult validateUnique( - const DataPoint &data_point, - const RegisterAddress *ignored_address) const; - - ProjectService &project_service_; -}; diff --git a/app/src/services/runtime_mode_service.cpp b/app/src/services/runtime_mode_service.cpp index 168802d..ba19126 100644 --- a/app/src/services/runtime_mode_service.cpp +++ b/app/src/services/runtime_mode_service.cpp @@ -180,10 +180,6 @@ PlcCommunicationResult RuntimeModeService::connectPlc( } std::vector addresses; const Project &project = project_service_.project(); - for (const DataPoint &point : project.dataPoints) - { - addresses.push_back(point.address); - } for (const HmiPage &page : project.hmiPages) { for (const HmiControl &control : page.controls) diff --git a/app/src/ui/main_window.cpp b/app/src/ui/main_window.cpp index 496caf9..a1397bb 100644 --- a/app/src/ui/main_window.cpp +++ b/app/src/ui/main_window.cpp @@ -4,7 +4,6 @@ #include "logic_editor_widget.h" #include "plc_connection_dialog.h" #include "services/hmi_editor_service.h" -#include "services/data_point_service.h" #include "services/hmi_runtime_service.h" #include "services/logic_editor_service.h" #include "services/project_service.h" @@ -15,7 +14,6 @@ #include #include #include -#include #include #include #include @@ -27,7 +25,6 @@ #include #include #include -#include #include #include #include @@ -137,7 +134,6 @@ MainWindow::MainWindow( RuntimeModeService &runtime_mode_service, ProjectService &project_service, HmiEditorService &hmi_editor_service, - DataPointService &data_point_service, LogicEditorService &logic_editor_service, HmiRuntimeService &hmi_runtime_service, QWidget *parent) @@ -146,7 +142,6 @@ MainWindow::MainWindow( runtime_mode_service_(runtime_mode_service), project_service_(project_service), hmi_editor_service_(hmi_editor_service), - data_point_service_(data_point_service), logic_editor_service_(logic_editor_service), hmi_runtime_service_(hmi_runtime_service) { @@ -154,7 +149,6 @@ MainWindow::MainWindow( configureAppearance(); configureActions(); configurePropertyEditor(); - configureDataPointEditor(); configurePlcConnection(); configureHmiEditor(); configureLogicEditor(); @@ -433,7 +427,6 @@ void MainWindow::configureHmiEditor() if (runtime_mode_service_.mode() != ApplicationMode::Editing) { hmi_editor_widget_->refreshRuntimeValues(); - refreshDataPointUi(); updateSimulationUi(false); } }); @@ -492,62 +485,9 @@ void MainWindow::configurePropertyEditor() this, &MainWindow::applySelectedControlProperties); connect(ui_->applyLogicPropertiesButton, &QPushButton::clicked, this, &MainWindow::applySelectedLogicNodeProperties); - connect(ui_->hmiDataPointComboBox, qOverload(&QComboBox::currentIndexChanged), - this, - [this](int index) - { - if (index <= 0) - { - return; - } - const QString address = ui_->hmiDataPointComboBox->currentData().toString(); - ui_->bindingAreaComboBox->setCurrentIndex(address.startsWith('M') ? 1 : 2); - ui_->bindingIndexSpinBox->setValue(address.mid(1).toInt()); - }); - connect(ui_->logicDataPointComboBox, qOverload(&QComboBox::currentIndexChanged), - this, - [this](int index) - { - if (index <= 0) - { - return; - } - ui_->logicAddressSpinBox->setValue( - ui_->logicDataPointComboBox->currentData().toString().mid(1).toInt()); - }); showControlProperties({}); } -void MainWindow::configureDataPointEditor() -{ - ui_->dataPointTable->horizontalHeader()->setSectionResizeMode( - QHeaderView::ResizeToContents); - ui_->dataPointTable->horizontalHeader()->setStretchLastSection(true); - tabifyDockWidget(ui_->outputDock, ui_->dataPointDock); - ui_->viewMenu->addAction(ui_->dataPointDock->toggleViewAction()); - - connect(ui_->addDataPointButton, &QPushButton::clicked, this, &MainWindow::addDataPoint); - connect(ui_->updateDataPointButton, &QPushButton::clicked, - this, &MainWindow::updateSelectedDataPoint); - connect(ui_->deleteDataPointButton, &QPushButton::clicked, - this, &MainWindow::deleteSelectedDataPoint); - connect(ui_->dataPointTable, &QTableWidget::itemSelectionChanged, - this, - [this] - { - const int row = ui_->dataPointTable->currentRow(); - if (row < 0) - { - return; - } - const QString address = ui_->dataPointTable->item(row, 0)->text(); - ui_->dataPointAreaComboBox->setCurrentIndex(address.startsWith('M') ? 0 : 1); - ui_->dataPointAddressSpinBox->setValue(address.mid(1).toInt()); - ui_->dataPointNameEdit->setText(ui_->dataPointTable->item(row, 2)->text()); - ui_->dataPointCommentEdit->setText(ui_->dataPointTable->item(row, 3)->text()); - }); -} - void MainWindow::configurePlcConnection() { connect(ui_->configurePlcAction, &QAction::triggered, this, &MainWindow::connectPlc); @@ -590,127 +530,6 @@ void MainWindow::refreshProjectUi() logic_root, {fromUtf8(logic.name) + suffix})); } ui_->projectTree->expandAll(); - refreshDataPointUi(); -} - -void MainWindow::refreshDataPointUi() -{ - const auto &points = data_point_service_.dataPoints(); - ui_->dataPointTable->setRowCount(static_cast(points.size())); - ui_->hmiDataPointComboBox->blockSignals(true); - ui_->logicDataPointComboBox->blockSignals(true); - ui_->hmiDataPointComboBox->clear(); - ui_->logicDataPointComboBox->clear(); - ui_->hmiDataPointComboBox->addItem(tr("手动输入")); - ui_->logicDataPointComboBox->addItem(tr("手动输入")); - for (int row = 0; row < static_cast(points.size()); ++row) - { - const DataPoint &point = points.at(static_cast(row)); - const QString address = fromUtf8(point.address.toString()); - const QString display = tr("%1 - %2").arg(address, fromUtf8(point.name)); - ui_->hmiDataPointComboBox->addItem(display, address); - ui_->logicDataPointComboBox->addItem(display, address); - QString value = QStringLiteral("-"); - if (runtime_mode_service_.mode() != ApplicationMode::Editing) - { - if (point.address.area() == RegisterArea::M) - { - const BitReadResult read = hmi_runtime_service_.readBit(point.address); - value = read.succeeded ? (read.value ? QStringLiteral("ON") : QStringLiteral("OFF")) - : tr("不可用"); - } - else - { - const WordReadResult read = hmi_runtime_service_.readWord(point.address); - value = read.succeeded ? QString::number(read.value) : tr("不可用"); - } - } - QStringList references; - for (const DataPointReference &reference : data_point_service_.references(point.address)) - { - references.push_back(fromUtf8(reference.location)); - } - const QStringList columns{ - address, - point.address.area() == RegisterArea::M ? tr("位") : tr("16 位字"), - fromUtf8(point.name), - fromUtf8(point.comment), - value, - references.join(QStringLiteral("; "))}; - for (int column = 0; column < columns.size(); ++column) - { - ui_->dataPointTable->setItem( - row, column, new QTableWidgetItem(columns.at(column))); - } - } - ui_->hmiDataPointComboBox->blockSignals(false); - ui_->logicDataPointComboBox->blockSignals(false); -} - -void MainWindow::addDataPoint() -{ - const RegisterArea area = ui_->dataPointAreaComboBox->currentIndex() == 0 - ? RegisterArea::M : RegisterArea::D; - const DataPointResult result = data_point_service_.add({ - RegisterAddress{area, ui_->dataPointAddressSpinBox->value()}, - toUtf8(ui_->dataPointNameEdit->text()), - toUtf8(ui_->dataPointCommentEdit->text())}); - if (!result.succeeded) - { - showProjectResult(tr("新增数据点"), fromUtf8(result.message), false); - return; - } - refreshProjectUi(); - statusBar()->showMessage(tr("数据点已新增"), 3000); -} - -void MainWindow::updateSelectedDataPoint() -{ - const int row = ui_->dataPointTable->currentRow(); - if (row < 0) - { - statusBar()->showMessage(tr("请先选择要更新的数据点"), 3000); - return; - } - const QString old_text = ui_->dataPointTable->item(row, 0)->text(); - const RegisterAddress old_address{ - old_text.startsWith('M') ? RegisterArea::M : RegisterArea::D, - old_text.mid(1).toInt()}; - const RegisterArea area = ui_->dataPointAreaComboBox->currentIndex() == 0 - ? RegisterArea::M : RegisterArea::D; - const DataPointResult result = data_point_service_.update( - old_address, - {RegisterAddress{area, ui_->dataPointAddressSpinBox->value()}, - toUtf8(ui_->dataPointNameEdit->text()), - toUtf8(ui_->dataPointCommentEdit->text())}); - if (!result.succeeded) - { - showProjectResult(tr("更新数据点"), fromUtf8(result.message), false); - return; - } - refreshProjectUi(); - statusBar()->showMessage(tr("数据点已更新"), 3000); -} - -void MainWindow::deleteSelectedDataPoint() -{ - const int row = ui_->dataPointTable->currentRow(); - if (row < 0) - { - statusBar()->showMessage(tr("请先选择要删除的数据点"), 3000); - return; - } - const QString address_text = ui_->dataPointTable->item(row, 0)->text(); - const DataPointResult result = data_point_service_.remove({ - address_text.startsWith('M') ? RegisterArea::M : RegisterArea::D, - address_text.mid(1).toInt()}); - if (!result.succeeded) - { - showProjectResult(tr("删除数据点"), fromUtf8(result.message), false); - return; - } - refreshProjectUi(); - statusBar()->showMessage(tr("数据点已删除"), 3000); } void MainWindow::connectPlc() @@ -1224,7 +1043,6 @@ void MainWindow::updateModeUi(const QString &message) } ui_->hmiToolBar->setEnabled(policy.allowsProjectEditing); ui_->logicToolBar->setEnabled(policy.allowsProjectEditing); - ui_->dataPointDock->setEnabled(policy.allowsProjectEditing); ui_->addButtonAction->setEnabled(policy.allowsProjectEditing); ui_->addIndicatorAction->setEnabled(policy.allowsProjectEditing); ui_->addNumericDisplayAction->setEnabled(policy.allowsProjectEditing); diff --git a/app/src/ui/main_window.h b/app/src/ui/main_window.h index c00781a..3d86cb5 100644 --- a/app/src/ui/main_window.h +++ b/app/src/ui/main_window.h @@ -31,7 +31,6 @@ class RuntimeModeService; class ProjectService; class HmiEditorService; class HmiRuntimeService; -class DataPointService; class HmiEditorWidget; class LogicEditorService; class LogicEditorWidget; @@ -58,7 +57,6 @@ public: RuntimeModeService &runtime_mode_service, ProjectService &project_service, HmiEditorService &hmi_editor_service, - DataPointService &data_point_service, LogicEditorService &logic_editor_service, HmiRuntimeService &hmi_runtime_service, QWidget *parent = nullptr); @@ -76,7 +74,6 @@ private: void configureLogicEditor(); // 创建并连接控件属性编辑表单 void configurePropertyEditor(); - void configureDataPointEditor(); void configurePlcConnection(); // 刷新工程树和当前 HMI 页面信息 void refreshProjectUi(); @@ -102,10 +99,6 @@ private: void deleteSelectedLogicObject(); // 将逻辑属性表单内容应用到当前选中节点 void applySelectedLogicNodeProperties(); - void refreshDataPointUi(); - void addDataPoint(); - void updateSelectedDataPoint(); - void deleteSelectedDataPoint(); void connectPlc(); void disconnectPlc(); // 创建新的工程并刷新编辑界面 @@ -150,7 +143,6 @@ private: */ ProjectService &project_service_; HmiEditorService &hmi_editor_service_; - DataPointService &data_point_service_; LogicEditorService &logic_editor_service_; HmiRuntimeService &hmi_runtime_service_; QActionGroup *mode_action_group_ = nullptr; diff --git a/app/src/ui/main_window.ui b/app/src/ui/main_window.ui index 25bc75b..07cc731 100644 --- a/app/src/ui/main_window.ui +++ b/app/src/ui/main_window.ui @@ -41,6 +41,9 @@ + + 0 + true @@ -214,19 +217,19 @@ 0 0 1280 - 23 + 17 文件(&F) - - - - - - + + + + + + @@ -234,10 +237,10 @@ - - - - + + + + @@ -268,36 +271,52 @@ - - - - - HMI 控件 - Qt::ToolButtonTextBesideIcon - TopToolBarArea - false - - - - - - - - 控制逻辑节点 - Qt::ToolButtonTextBesideIcon - TopToolBarArea - false - - - - - - - - - - - + + + + + + HMI 控件 + + + Qt::ToolButtonTextBesideIcon + + + TopToolBarArea + + + false + + + + + + + + + + 控制逻辑节点 + + + Qt::ToolButtonTextBesideIcon + + + TopToolBarArea + + + false + + + + + + + + + + + + @@ -327,10 +346,10 @@ - + true - + true @@ -393,86 +412,315 @@ 0 0 - 232 - 164 + 234 + 455 - - - - 当前对象 - 未选择 - - - - - - - QFormLayout::AllNonFixedFieldsGrow - 控件 ID - - 显示文本 - - X - 4000 - Y - 4000 - 宽度 - 14000 - 高度 - 14000 - 绑定区域 - - 未绑定-1 - M0 - D1 - - 绑定地址 - 4000 - 选择数据点 - - 应用属性 - + + + + + + + 当前对象 + - - - QFormLayout::AllNonFixedFieldsGrow - 节点 ID - true - 节点类型 - - 地址区域 - - 地址 - 4000 - 选择数据点 - - 工作方式 - - 比较运算 - - 等于0 - 不等于1 - 小于2 - 小于等于3 - 大于4 - 大于等于5 - - 比较常量 - -3276832767 - 应用属性 - + + + + + 未选择 + + + + + + + + + + QFormLayout::AllNonFixedFieldsGrow + + + + + 控件 ID + + + + + + + + + + 显示文本 + + + + + + + + + + X + + + + + + + 4000 + + + + + + + Y + + + + + + + 4000 + + + + + + + 宽度 + + + + + + + 1 + + + 4000 + + + + + + + 高度 + + + + + + + 1 + + + 4000 + + + + + + + 绑定区域 + + + + + + + + 未绑定 + + + + + M + + + + + D + + + + + + + + 绑定地址 + + + + + + + 4000 + + + + + + + 应用属性 + + + + + + + + + QFormLayout::AllNonFixedFieldsGrow + + + + + 节点 ID + + + + + + + true + + + + + + + 节点类型 + + + + + + + + + + + + + + 地址区域 + + + + + + + + + + + + + + 地址 + + + + + + + 4000 + + + + + + + 工作方式 + + + + + + + + + + 比较运算 + + + + + + + + 等于 + + + + + 不等于 + + + + + 小于 + + + + + 小于等于 + + + + + 大于 + + + + + 大于等于 + + + + + + + + 比较常量 + + + + + + + -32768 + + + 32767 + + + + + + + 应用属性 + + + + - - + + + - + 300 @@ -509,74 +757,161 @@ - - - 420170 - 数据点 - 8 - - - 6 - 6 - 6 - 6 - - - QAbstractItemView::SingleSelection - QAbstractItemView::SelectRows - QAbstractItemView::NoEditTriggers - 地址 - 类型 - 名称 - 注释 - 当前值 - 引用位置 - - - - - 区域 - M0D1 - 地址 - 4000 - 名称 - - 注释 - - 新增 - 更新 - 删除 - - - - - - + + 退出(&X) - - 新建工程 - 保存工程 - 工程另存为 - 加载工程 - PLC 配置配置参数并连接真实 PLC - 断开 PLC断开当前 PLC 连接 - 按钮添加按钮控件 - 指示灯添加指示灯控件 - 数值显示添加数值显示控件 - 数值输入添加数值输入控件 - 删除删除当前控件 - 新建网络在梯形图末尾新增网络 - 并联支路为画布中选中的连续节点建立并联支路 - 常开向当前网络添加常开触点 - 常闭向当前网络添加常闭触点 - 线圈设置当前网络的普通线圈 - 置位设置当前网络的置位线圈 - 复位设置当前网络的复位线圈 - D 比较向当前网络添加 D 值与常量比较 - 删除删除选中的逻辑节点或网络 + + + + 新建工程 + + + + + 保存工程 + + + + + 工程另存为 + + + + + 加载工程 + + + + + PLC 配置 + + + 配置参数并连接真实 PLC + + + + + 断开 PLC + + + 断开当前 PLC 连接 + + + + + 按钮 + + + 添加按钮控件 + + + + + 指示灯 + + + 添加指示灯控件 + + + + + 数值显示 + + + 添加数值显示控件 + + + + + 数值输入 + + + 添加数值输入控件 + + + + + 删除 + + + 删除当前控件 + + + + + 新建网络 + + + 在梯形图末尾新增网络 + + + + + 并联支路 + + + 为画布中选中的连续节点建立并联支路 + + + + + 常开 + + + 向当前网络添加常开触点 + + + + + 常闭 + + + 向当前网络添加常闭触点 + + + + + 线圈 + + + 设置当前网络的普通线圈 + + + + + 置位 + + + 设置当前网络的置位线圈 + + + + + 复位 + + + 设置当前网络的复位线圈 + + + + + D 比较 + + + 向当前网络添加 D 值与常量比较 + + + + + 删除 + + + 删除选中的逻辑节点或网络 + + true diff --git a/app/tests/data_point_service_tests.cpp b/app/tests/data_point_service_tests.cpp deleted file mode 100644 index a154dd7..0000000 --- a/app/tests/data_point_service_tests.cpp +++ /dev/null @@ -1,107 +0,0 @@ -#include "domain/project_storage.h" -#include "services/data_point_service.h" -#include "services/project_service.h" - -#include -#include - -namespace { - -class TestProjectStorage final : public ProjectStorage -{ -public: - ProjectSaveResult save(const Project &, const std::string &) override - { - return {true, ProjectStorageError::None, {}}; - } - - ProjectLoadResult load(const std::string &) override - { - return {false, {}, ProjectStorageError::FileReadFailed, {}}; - } -}; - -void require(bool condition, const std::string &message) -{ - if (!condition) - { - throw std::runtime_error(message); - } -} - -void testUniqueDataPointsAndReferences() -{ - TestProjectStorage storage; - ProjectService project_service(storage); - DataPointService service(project_service); - const RegisterAddress m0{RegisterArea::M, 0}; - const RegisterAddress m1{RegisterArea::M, 1}; - const RegisterAddress d0{RegisterArea::D, 0}; - - require(service.add({m0, "StartCommand", "启动命令"}).succeeded, - "a valid data point must be added"); - require(service.add({d0, "Temperature", "温度"}).succeeded, - "M and D data points must coexist"); - require(service.add({m0, "DuplicateAddress", {}}).error - == DataPointError::DuplicateAddress, - "duplicate data point addresses must be rejected"); - require(service.add({m1, "StartCommand", {}}).error - == DataPointError::DuplicateName, - "duplicate data point names must be rejected"); - - HmiControl button; - button.id = "start-button"; - button.type = HmiControlType::Button; - button.bounds = {0, 0, 100, 40}; - button.text = "启动"; - button.binding = m0; - HmiPage page; - page.id = "main-page"; - page.name = "主画面"; - page.controls.push_back(button); - project_service.editProject().hmiPages.push_back(page); - - LogicNode contact; - contact.id = "start-contact"; - contact.config = ContactNodeConfig{m0, ContactMode::NormallyOpen}; - LadderRung rung; - rung.id = "rung-1"; - rung.name = "网络 1"; - rung.condition = ConditionExpression::fromNode(contact); - ControlLogic logic; - logic.id = "logic-1"; - logic.name = "控制逻辑 1"; - logic.rungs.push_back(rung); - project_service.editProject().controlLogics.push_back(logic); - - const auto references = service.references(m0); - require(references.size() == 2U, - "data point references must include HMI and ladder locations"); - require(service.remove(m0).error == DataPointError::AddressInUse, - "referenced data points must not be deleted"); - require(service.update(m0, {m1, "StartCommand", "启动命令"}).error - == DataPointError::AddressInUse, - "referenced data point addresses must not change"); - require(service.update(m0, {m0, "Start", "启动命令"}).succeeded, - "referenced data point names and comments may change"); - require(service.remove(RegisterAddress{RegisterArea::D, 99}).error - == DataPointError::NotFound, - "removing an unknown data point must report not found"); -} - -} // namespace - -int main() -{ - try - { - testUniqueDataPointsAndReferences(); - } - catch (const std::exception &error) - { - std::cerr << "data point service tests failed: " << error.what() << '\n'; - return 1; - } - std::cout << "data point service tests passed\n"; - return 0; -} diff --git a/app/tests/data_point_service_tests.pro b/app/tests/data_point_service_tests.pro deleted file mode 100644 index 3713778..0000000 --- a/app/tests/data_point_service_tests.pro +++ /dev/null @@ -1,29 +0,0 @@ -TEMPLATE = app -TARGET = data_point_service_tests - -CONFIG += console c++17 testcase warn_on -CONFIG -= app_bundle qt - -INCLUDEPATH += ../src - -SOURCES += \ - data_point_service_tests.cpp \ - ../src/domain/register_address.cpp \ - ../src/domain/register_repository.cpp \ - ../src/domain/data_point_model.cpp \ - ../src/domain/hmi_model.cpp \ - ../src/domain/control_logic_model.cpp \ - ../src/domain/project_model.cpp \ - ../src/services/project_service.cpp \ - ../src/services/data_point_service.cpp - -HEADERS += \ - ../src/domain/register_address.h \ - ../src/domain/register_repository.h \ - ../src/domain/data_point_model.h \ - ../src/domain/hmi_model.h \ - ../src/domain/control_logic_model.h \ - ../src/domain/project_model.h \ - ../src/domain/project_storage.h \ - ../src/services/project_service.h \ - ../src/services/data_point_service.h diff --git a/app/tests/domain_tests.pro b/app/tests/domain_tests.pro index b89b2df..a7fca1b 100644 --- a/app/tests/domain_tests.pro +++ b/app/tests/domain_tests.pro @@ -10,7 +10,6 @@ SOURCES += \ domain_tests.cpp \ ../src/domain/register_address.cpp \ ../src/domain/register_repository.cpp \ - ../src/domain/data_point_model.cpp \ ../src/domain/hmi_model.cpp \ ../src/domain/control_logic_model.cpp \ ../src/domain/project_model.cpp \ @@ -19,7 +18,6 @@ SOURCES += \ HEADERS += \ ../src/domain/register_address.h \ ../src/domain/register_repository.h \ - ../src/domain/data_point_model.h \ ../src/domain/hmi_model.h \ ../src/domain/control_logic_model.h \ ../src/domain/project_model.h \ diff --git a/app/tests/hmi_editor_service_tests.pro b/app/tests/hmi_editor_service_tests.pro index cab5690..814ae7a 100644 --- a/app/tests/hmi_editor_service_tests.pro +++ b/app/tests/hmi_editor_service_tests.pro @@ -10,7 +10,6 @@ SOURCES += \ hmi_editor_service_tests.cpp \ ../src/domain/register_address.cpp \ ../src/domain/register_repository.cpp \ - ../src/domain/data_point_model.cpp \ ../src/domain/hmi_model.cpp \ ../src/domain/control_logic_model.cpp \ ../src/domain/project_model.cpp \ @@ -21,7 +20,6 @@ SOURCES += \ HEADERS += \ ../src/domain/register_address.h \ ../src/domain/register_repository.h \ - ../src/domain/data_point_model.h \ ../src/domain/hmi_model.h \ ../src/domain/control_logic_model.h \ ../src/domain/project_model.h \ diff --git a/app/tests/logic_editor_service_tests.pro b/app/tests/logic_editor_service_tests.pro index cb617de..a37ee79 100644 --- a/app/tests/logic_editor_service_tests.pro +++ b/app/tests/logic_editor_service_tests.pro @@ -9,7 +9,6 @@ INCLUDEPATH += ../src SOURCES += \ logic_editor_service_tests.cpp \ ../src/domain/register_address.cpp \ - ../src/domain/data_point_model.cpp \ ../src/domain/control_logic_model.cpp \ ../src/domain/project_model.cpp \ ../src/domain/hmi_model.cpp \ @@ -19,7 +18,6 @@ SOURCES += \ HEADERS += \ ../src/domain/register_address.h \ - ../src/domain/data_point_model.h \ ../src/domain/control_logic_model.h \ ../src/domain/project_model.h \ ../src/domain/hmi_model.h \ diff --git a/app/tests/main_window_tests.cpp b/app/tests/main_window_tests.cpp index 8e7b78d..08aa837 100644 --- a/app/tests/main_window_tests.cpp +++ b/app/tests/main_window_tests.cpp @@ -2,7 +2,6 @@ #include "domain/register_repository.h" #include "services/hmi_editor_service.h" #include "services/hmi_runtime_service.h" -#include "services/data_point_service.h" #include "services/logic_editor_service.h" #include "services/offline_simulation_service.h" #include "services/project_service.h" @@ -66,7 +65,6 @@ void testModeActionsControlEditingAvailability() TestProjectStorage storage; ProjectService project_service(storage); HmiEditorService editor_service(project_service); - DataPointService data_point_service(project_service); LogicEditorService logic_editor_service(project_service); VirtualRegisterRepository repository; HmiRuntimeService runtime_service(repository); @@ -76,13 +74,18 @@ void testModeActionsControlEditingAvailability() mode_service, project_service, editor_service, - data_point_service, logic_editor_service, runtime_service); window.resize(1000, 640); window.show(); QApplication::processEvents(); + require(window.findChild(QStringLiteral("dataPointDock")) == nullptr, + "the removed data point dock must not remain in the main window"); + require(window.findChild(QStringLiteral("hmiDataPointComboBox")) == nullptr + && window.findChild(QStringLiteral("logicDataPointComboBox")) == nullptr, + "HMI and ladder properties must use direct M/D address inputs"); + QAction *editing_action = requiredChild(window, "editingModeAction"); QAction *offline_action = requiredChild(window, "offlineModeAction"); QAction *online_action = requiredChild(window, "onlineModeAction"); @@ -238,7 +241,6 @@ void testPlcConfigurationUsesDialog() TestProjectStorage storage; ProjectService project_service(storage); HmiEditorService editor_service(project_service); - DataPointService data_point_service(project_service); LogicEditorService logic_editor_service(project_service); VirtualRegisterRepository repository; HmiRuntimeService runtime_service(repository); @@ -248,7 +250,6 @@ void testPlcConfigurationUsesDialog() mode_service, project_service, editor_service, - data_point_service, logic_editor_service, runtime_service); require(window.findChild(QStringLiteral("serialPortComboBox")) == nullptr, diff --git a/app/tests/main_window_tests.pro b/app/tests/main_window_tests.pro index 33e3d9d..669ff36 100644 --- a/app/tests/main_window_tests.pro +++ b/app/tests/main_window_tests.pro @@ -17,13 +17,11 @@ SOURCES += \ ../src/domain/register_address.cpp \ ../src/domain/register_repository.cpp \ ../src/domain/active_register_repository.cpp \ - ../src/domain/data_point_model.cpp \ ../src/domain/hmi_model.cpp \ ../src/domain/control_logic_model.cpp \ ../src/domain/project_model.cpp \ ../src/domain/runtime_state.cpp \ ../src/services/project_service.cpp \ - ../src/services/data_point_service.cpp \ ../src/services/hmi_editor_service.cpp \ ../src/services/logic_editor_service.cpp \ ../src/services/hmi_runtime_service.cpp \ @@ -39,14 +37,12 @@ HEADERS += \ ../src/domain/register_address.h \ ../src/domain/register_repository.h \ ../src/domain/active_register_repository.h \ - ../src/domain/data_point_model.h \ ../src/domain/hmi_model.h \ ../src/domain/control_logic_model.h \ ../src/domain/project_model.h \ ../src/domain/project_storage.h \ ../src/domain/runtime_state.h \ ../src/services/project_service.h \ - ../src/services/data_point_service.h \ ../src/services/hmi_editor_service.h \ ../src/services/logic_editor_service.h \ ../src/services/hmi_runtime_service.h \ diff --git a/app/tests/plc_runtime_tests.cpp b/app/tests/plc_runtime_tests.cpp index fd14ceb..40496a5 100644 --- a/app/tests/plc_runtime_tests.cpp +++ b/app/tests/plc_runtime_tests.cpp @@ -154,8 +154,17 @@ void testRuntimeRepositorySwitchingAndDisconnect() { TestProjectStorage storage; ProjectService project_service(storage); - project_service.editProject().dataPoints.push_back( - {{RegisterArea::M, 5}, "RunState", "运行状态"}); + HmiPage page; + page.id = "main-page"; + page.name = "Main"; + HmiControl indicator; + indicator.id = "run-state"; + indicator.type = HmiControlType::Indicator; + indicator.bounds = {0, 0, 80, 40}; + indicator.text = "Run"; + indicator.binding = RegisterAddress{RegisterArea::M, 5}; + page.controls.push_back(indicator); + project_service.editProject().hmiPages.push_back(page); VirtualRegisterRepository virtual_repository; PlcRegisterRepository plc_repository; ActiveRegisterRepository active_repository(virtual_repository); diff --git a/app/tests/plc_runtime_tests.pro b/app/tests/plc_runtime_tests.pro index 067af3d..762aa23 100644 --- a/app/tests/plc_runtime_tests.pro +++ b/app/tests/plc_runtime_tests.pro @@ -13,7 +13,6 @@ SOURCES += \ ../src/domain/register_address.cpp \ ../src/domain/register_repository.cpp \ ../src/domain/active_register_repository.cpp \ - ../src/domain/data_point_model.cpp \ ../src/domain/hmi_model.cpp \ ../src/domain/control_logic_model.cpp \ ../src/domain/project_model.cpp \ @@ -28,7 +27,6 @@ HEADERS += \ ../src/domain/register_address.h \ ../src/domain/register_repository.h \ ../src/domain/active_register_repository.h \ - ../src/domain/data_point_model.h \ ../src/domain/hmi_model.h \ ../src/domain/control_logic_model.h \ ../src/domain/project_model.h \ diff --git a/app/tests/project_management_tests.cpp b/app/tests/project_management_tests.cpp index f1b6656..ba39d8e 100644 --- a/app/tests/project_management_tests.cpp +++ b/app/tests/project_management_tests.cpp @@ -115,9 +115,6 @@ Project makeExampleProject() project.metadata = {"example-project", "Example project", "1.0"}; project.hmiPages.push_back(page); project.controlLogics.push_back(logic); - project.dataPoints = { - {RegisterAddress{RegisterArea::M, 0}, "StartCommand", "启动命令"}, - {RegisterAddress{RegisterArea::D, 2}, "Temperature", "当前温度"}}; return project; } @@ -179,9 +176,10 @@ void testExampleProjectRoundTrip() require(saved_json.contains("\"rungs\"") && saved_json.contains("\"condition\"") && saved_json.contains("\"children\"") - && saved_json.contains("\"dataPoints\"") && saved_json.contains("\"output\""), - "saved project must use structured ladder expressions and data points"); + "saved project must use structured ladder expressions"); + require(!saved_json.contains("\"dataPoints\""), + "saved project must not contain the removed data point model"); require(!saved_json.contains("\"stages\"") && !saved_json.contains("\"branches\""), "current project format must not contain the removed stage model"); @@ -226,10 +224,6 @@ void testExampleProjectRoundTrip() rung.condition->children.at(1).node->config); require(compare.address.index() == 2 && compare.value == 100, "comparison configuration must survive round trip"); - require(project.dataPoints.size() == 2 - && project.dataPoints.front().name == "StartCommand", - "data points must survive round trip"); - require(service.saveAs(second_path.toStdString()).succeeded, "save as must succeed after load"); require(readBytes(first_path) == readBytes(second_path), diff --git a/app/tests/project_management_tests.pro b/app/tests/project_management_tests.pro index 5225ce8..dccd1c9 100644 --- a/app/tests/project_management_tests.pro +++ b/app/tests/project_management_tests.pro @@ -12,7 +12,6 @@ SOURCES += \ project_management_tests.cpp \ ../src/domain/register_address.cpp \ ../src/domain/register_repository.cpp \ - ../src/domain/data_point_model.cpp \ ../src/domain/hmi_model.cpp \ ../src/domain/control_logic_model.cpp \ ../src/domain/project_model.cpp \ @@ -23,7 +22,6 @@ SOURCES += \ HEADERS += \ ../src/domain/register_address.h \ ../src/domain/register_repository.h \ - ../src/domain/data_point_model.h \ ../src/domain/hmi_model.h \ ../src/domain/control_logic_model.h \ ../src/domain/project_model.h \ diff --git a/app/tests/runtime_mode_service_tests.pro b/app/tests/runtime_mode_service_tests.pro index ce46d4b..1278410 100644 --- a/app/tests/runtime_mode_service_tests.pro +++ b/app/tests/runtime_mode_service_tests.pro @@ -13,7 +13,6 @@ SOURCES += \ ../src/domain/register_address.cpp \ ../src/domain/register_repository.cpp \ ../src/domain/active_register_repository.cpp \ - ../src/domain/data_point_model.cpp \ ../src/domain/hmi_model.cpp \ ../src/domain/control_logic_model.cpp \ ../src/domain/project_model.cpp \ @@ -27,7 +26,6 @@ HEADERS += \ ../src/domain/register_address.h \ ../src/domain/register_repository.h \ ../src/domain/active_register_repository.h \ - ../src/domain/data_point_model.h \ ../src/domain/hmi_model.h \ ../src/domain/control_logic_model.h \ ../src/domain/project_model.h \