#ifndef DATACENTER_H #define DATACENTER_H #include #include #include #include #include #include "OpcUaManager.h" #include #include // 新增:线程安全锁 class DataCenter : public QObject { Q_OBJECT public: static DataCenter* instance(QObject* parent = nullptr); // 全局唯一获取方式 // 禁止拷贝和赋值 DataCenter(const DataCenter&) = delete; DataCenter& operator=(const DataCenter&) = delete; // 添加需要监控的节点 void addMonitoredNode(const QString &nodeId, const QString &nodeName,const QString &varName,const QString &TableName,const QString &FieldName); // 开始/停止循环读取 void startCyclicRead(int intervalMs); void stopCyclicRead(); // 获取最新的节点值 QVariant getNodeValue(const QString &nodeId) const; QVariant getNodeValueByName(const QString &nodeName) const; // 获取所有节点信息 QMap getAllNodeNames() const { return gOPC_NodeName; } void InitData(); void browseRecursive(const QString &nodeId); void doBrowse(const QString &nodeId, int depth, QString prefix); signals: // 节点值更新信号(供UI层订阅) void nodeValueUpdated(const QString &nodeId, const QString &nodeName,const QString &varName, const QVariant &value); // 错误信号 void errorOccurred(const QString &errorString); private slots: // 定时器触发,执行循环读取 void onTimerTimeout(); // 处理OPC读取结果 void handleReadCompleted(const QVariant &value, const QString &nodeId); void refreshAllNodes(); private: explicit DataCenter(OpcUaManager *opcManager, QObject *parent = nullptr); // 私有构造函数 static DataCenter* m_instance; // 静态单例实例 static QMutex m_mutex; // 线程安全锁 /** @brief OPC操作实例(不负责所有权) */ OpcUaManager *m_opcManager; /** @brief 循环读取定时器 */ QTimer *m_cyclicTimer; /** @brief 当前读取索引 */ int m_currentReadIndex; //GlobalType DC_SetST; // 数据中心,给变量赋值 }; #endif // DATACENTER_H