奥特QT DDS 插件库
Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.

AQTSampleMachinePlug.hpp 4.4KB

5 miesięcy temu
5 miesięcy temu
5 miesięcy temu
5 miesięcy temu
5 miesięcy temu
5 miesięcy temu
5 miesięcy temu
5 miesięcy temu
5 miesięcy temu
5 miesięcy temu
5 miesięcy temu
5 miesięcy temu
5 miesięcy temu
5 miesięcy temu
5 miesięcy temu
5 miesięcy temu
5 miesięcy temu
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. #pragma once
  2. #include <QObject>
  3. #include <QtPlugin>
  4. #include <QQmlEngine>
  5. #include <QQuickWindow>
  6. #include "interfaces/plugin_interface.hpp"
  7. #include <fastdds/dds/domain/DomainParticipant.hpp>
  8. #include <fastdds/dds/publisher/Publisher.hpp>
  9. #include <fastdds/dds/publisher/DataWriter.hpp>
  10. #include <fastdds/dds/subscriber/Subscriber.hpp>
  11. #include <fastdds/dds/subscriber/DataReader.hpp>
  12. #include <fastdds/dds/topic/Topic.hpp>
  13. #include "DDSSampleMachine.hpp"
  14. #include "DDSSampleMachinePubSubTypes.hpp"
  15. #include "include/Snap7.h"
  16. // 导出宏定义
  17. #ifdef AQTSAMPLEMACHINEPLUG_LIBRARY
  18. #define AQTSAMPLEMACHINEPLUG_EXPORT Q_DECL_EXPORT
  19. #else
  20. #define AQTSAMPLEMACHINEPLUG_EXPORT Q_DECL_IMPORT
  21. #endif
  22. using namespace eprosima::fastdds::dds;
  23. using namespace SampleModule;
  24. /**
  25. * @brief 采样机DDS插件类
  26. *
  27. * 实现采样机的DDS通信功能,包括:
  28. * - 采样机控制命令的发送
  29. * - 采样机状态的接收
  30. * - 数据点信息的管理
  31. */
  32. class AQTSAMPLEMACHINEPLUG_EXPORT AQTSampleMachinePlug : public QObject, public AuseftDDSPluginInterface, public DataReaderListener
  33. {
  34. Q_OBJECT
  35. Q_PLUGIN_METADATA(IID AuseftDDSPluginInterface_iid FILE "AQTSampleMachinePlug.json")
  36. Q_INTERFACES(AuseftDDSPluginInterface)
  37. public:
  38. /**
  39. * @brief 构造函数
  40. * @param parent 父对象指针
  41. */
  42. explicit AQTSampleMachinePlug(QObject *parent = nullptr);
  43. /**
  44. * @brief 析构函数
  45. * 负责清理DDS资源
  46. */
  47. ~AQTSampleMachinePlug();
  48. // 实现插件接口
  49. /**
  50. * @brief 初始化插件
  51. * @param domainId DDS域ID
  52. * @param domainName DDS域名称
  53. * @return 初始化是否成功
  54. */
  55. Q_INVOKABLE bool init(uint32_t domainId, const QString& domainName) override;
  56. /**
  57. * @brief 获取所有数据点信息
  58. * @return 数据点信息列表
  59. */
  60. Q_INVOKABLE QList<DataPointInfo> getDataPoints() override;
  61. /**
  62. * @brief 发布数据到DDS网络
  63. * @param dataList 要发布的数据列表
  64. * @return 发布是否成功
  65. */
  66. Q_INVOKABLE bool publishData(const QList<DataItem>& dataList) override;
  67. //调用配置参数
  68. Q_INVOKABLE bool config() override;
  69. // 实现 DataReaderListener 接口
  70. void on_data_available(DataReader* reader) override;
  71. // PLC 相关方法
  72. bool connectPLC(const QString& ipAddress, int rack = 0, int slot = 1);
  73. bool disconnectPLC();
  74. bool readPLCData(int dbNumber, int start, int size, QByteArray& data);
  75. bool writePLCData(int dbNumber, int start, const QByteArray& data);
  76. private:
  77. // DDS 实体
  78. DomainParticipant* participant_; ///< DDS参与者
  79. Publisher* publisher_; ///< DDS发布者
  80. Subscriber* subscriber_; ///< DDS订阅者
  81. Topic* commandTopic_; ///< 命令主题
  82. DataWriter* commandWriter_; ///< 命令写入器
  83. TypeSupport commandType_; ///< 命令类型支持
  84. Topic* statusTopic_; ///< 状态主题
  85. DataReader* statusReader_; ///< 状态读取器
  86. TypeSupport statusType_; ///< 状态类型支持
  87. Topic* configTopic_; ///< 配置主题
  88. DataWriter* configWriter_; ///< 配置写入器
  89. TypeSupport configType_; ///< 配置类型支持
  90. Topic* pointsTopic_; ///< 采样点主题
  91. DataWriter* pointsWriter_; ///< 采样点写入器
  92. DataReader* pointsReader_; ///< 采样点读取器
  93. TypeSupport pointsType_; ///< 采样点类型支持
  94. // QML配置窗口相关
  95. QQuickWindow* m_configWindow; ///< QML配置窗口
  96. void createConfigWindow(); ///< 创建配置窗口
  97. // 初始化辅助函数
  98. /**
  99. * @brief 初始化DDS实体
  100. * @return 初始化是否成功
  101. */
  102. bool initDDSEntities();
  103. /**
  104. * @brief 清理DDS实体
  105. */
  106. void cleanupDDSEntities();
  107. // 数据转换辅助函数
  108. SampleConfig dataItemsToConfig(const QList<DataItem>& items);
  109. SampleCommand dataItemsToCommand(const QList<DataItem>& items);
  110. SamplePoints dataItemsToPoints(const QList<DataItem>& items);
  111. QList<DataItem> infoToDataItems(const SampleMachineInfo& infos);
  112. // PLC 客户端
  113. TS7Client * plcClient_;
  114. bool plcConnected_;
  115. };