Files
EJM_Display/DataCenter/DataCenter - 副本.h
2025-09-15 22:28:43 +08:00

74 lines
2.3 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#ifndef DATACENTER_H
#define DATACENTER_H
#include <QObject>
#include <QVariant>
#include <QTimer>
#include <QMap>
#include <QStringList>
#include "OpcUaManager.h"
#include <GlobalDefinitions/Variable.h>
#include <QMutex> // 新增:线程安全锁
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<QString, QString> 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