#pragma once #include "Common.h" /// /// 反序列化时用于临时存储读取的link信息 /// typedef struct _tagDocLinkInfo { QString strSrcInf; QString strDesInf; LINK_MODE linkMode; QVector lines; _tagDocLinkInfo() { linkMode = LINK_MODE::LINK_NORMAL; } } DOC_LINK_INFO; /// /// 反序列化时用于临时存储工具的绑定信息(Port和Goto工具) /// typedef struct _tagDocBindToolInfo { QString strSrcPou; // 源Pou的名称 QString strSourceTool; // 源Tool的实例名 QString strDestPou; // 绑定对象所在的Pou QString strDestInf; // 绑定对象的接口全名 // 2022-3-2 增加,此处需要保存一个绑定接口的类型,绑定的Pou和绑定的Gvl处理方式是不一样的 TOOL_TYPE infType; // 序列化 friend QDataStream& operator<<(QDataStream& out, const _tagDocBindToolInfo& info); // 反序列化 friend QDataStream& operator>>(QDataStream& in, _tagDocBindToolInfo& info); _tagDocBindToolInfo() { infType = TOOL_TYPE::TOOL_TYPE_UNKNOWN; } } DOC_BIND_TOOL_INFO; /// /// 反序列化时用于临时存储需要额外还原动作的工具信息(例如Parallel工具) /// typedef struct _tagDocToolInfo { QString strPouName; // 源Pou的名称 QString strToolInstanceName; // 源Tool的实例名 _tagDocToolInfo() { } } DOC_TOOL_INFO; /// /// 完成存档文件加载和保存 /// class Document { public: Document(); ~Document(); // 执行存档文件保存 bool Save(const QString& strFullPath); // 2022-2-24,执行硬件组态数据保存 bool saveHdw(const QString& strFullPath); // 执行存档文件加载 bool Load(const QString& strFullPath); // 2022-2-24增加,加载硬件组态存档数据 bool loadHdw(const QString& strFullPath); // 导出单个Pou(pou、tool、link、variables) bool saveSinglePou(const QString& strPouFullPath, const QString& strPouName); // 导入单个Pou(pou、tool、link、variables) bool loadSinglePou(const QString& strPouFullPath); // 单个Pou重置(包括页面和数据结构) void pouReset(const QString& strPouName); // 整个系统重置(包括界面和UI) void systemReset(); protected: // 写入当前版本号 bool saveVersion(QDataStream& out, int major, int minor); // 写入当前版本号 bool saveHdwVersion(QDataStream& out, int major, int minor); // 读取并且检查当前版本号 bool loadAndCheckVersion(QDataStream& in, int major, int minor); // 读取并且检查当前版本号 bool loadAndCheckHdwVersion(QDataStream& in, int major, int minor); // 写入系统配置区段 bool saveConfig(QDataStream& out); // 读取系统配置区段 bool loadConfig(QDataStream& in); // 写入全局和局部变量区段 bool saveVariables(QDataStream& out); // 写入单组变量 bool saveGVL(const QString strVarName, QDataStream& out); // 读取全局和局部变量区段 bool loadVariables(QDataStream& in); // 读取单组的变量信息 bool loadGVL(QDataStream& in, const QString& strLoadName = "", bool bLoadName = true); // 写入Pou区段 bool savePous(QDataStream& out); // 写入单个Pou相关信息 bool savePou(const QString strPouName, QDataStream& out); // 读取Pou区段 bool loadPous(QDataStream& in); // 读取单组的Pou相关信息 bool loadPou(QDataStream& in, const QString& strLoadName = "", bool bLoadName = true); // 写入Tool信息 bool saveTool(QDataStream& out, const TOOL* pTool); // 读入Tool信息 bool loadTool(QDataStream& in, TOOL*& pNewTool); // 写入所有的Interface信息 bool saveToolInterfaces(QDataStream& out, const TOOL* pTool); // 写入单个Interface信息 bool saveInterface(QDataStream& out, const _INTERFACE* inf); // 读取所有的Interface信息 bool loadToolInterfaces(QDataStream& in, TOOL*& pNewTool, TOOL*& pTool_Dll, int nInfCount); // 读取Interface信息 bool loadInterface(QDataStream& in, _INTERFACE*& inf); // 写入Port的绑定关系 bool savePortBindInfo(QDataStream& out, const TOOL* pTool); // 读取Port信息 bool loadPortBindInfo(QDataStream& in, const QString& strLoadName = "", bool bLoadName = true); // 还原Port绑定关系 bool restorePortBindInfo(); // 写入Goto的绑定关系 bool saveGotoBindInfo(QDataStream& out, const TOOL* pTool); // 读取Goto的绑定关系 bool loadGotoBindInfo(QDataStream& in); // 还原Goto绑定关系 bool restoreGotoBindInfo(); // 写入WaitTool的配置参数信息 bool saveWaitToolSettings(QDataStream& out, POU* pPou, TOOL*& pTool); // 读取WaitTool的配置参数信息 bool loadWaitToolSettings(QDataStream& in, POU* pPou, TOOL*& pNewTool); // 保存Link信息 bool saveLinks(QDataStream& out); // 保存单组Pou中的Link信息 bool saveLink(QDataStream& out, POU* pou); // 读取Link信息 bool loadLinks(QDataStream& in); // 读取单组Pou中的Link信息 bool loadLink(QDataStream& in, const int& linkCount); //// 读取Link信息 //bool loadLinks( // QDataStream& in, // const QString& strDstInf, // QWidget* pView = nullptr, // bool bSave = true, // LINK_MODE linkMode = LINK_MODE::LINK_NORMAL //); //// 还原Link信息 //bool restoreLinks(); // 读取并行工具的配置信息 bool loadParallelInfos(QDataStream& in, TOOL*& pNewTool); // 还原并行工具相关信息(由于并行母线的长度需要所有的Tool和Link全部恢复之后才可以判定) void restoreParallelInfos(); // 从Tool的Dll中反序列化 void loadFromToolDll(QDataStream& in, TOOL*& pNewTool); // 保存Task区段 bool saveTasks(QDataStream& out); // 读取Task区段 bool loadTasks(QDataStream& in); //// 写入硬件区段 //bool saveHardwares(QDataStream& out); //// 读入硬件区段 //bool loadHardwares(QDataStream& in); // 写入UI区段 bool saveUIs(QDataStream& out); // 读取UI区段 bool loadUIs(QDataStream& in); // 压缩 bool compress(QString strPath); // 解压缩 bool uncompress(QString& strPath); // 2022-3-25 检查接口是否还有效(防止Port端绑定对象无效后,依旧链接的问题) bool checkInfValid(const QString& infGroupName, const QString& infFullName); // 检查硬件组态与文档是否匹配 bool checkHWAndDocConfigID(QString strDocID, QString strHardwareID); // 根据硬件组态的工具实例名有工具名字生成一个ID。此ID后面会保存进硬件组态的数据中 QString getHWAndDocConfigID(); private: // QMultiHash m_Links; // 当前储存的link信息(以及对应的页面指针) QVector m_PortBindInfos; // Port工具的绑定信息 QVector m_GotoBindInfos; // Goto工具的绑定信息 // QVector m_ParallelBindInfos; // Parallel工具的绑定信息 QVector m_ParallelInfos; // Parallel工具的绑定信息(用于Link还原完成之后,重新设定并行母线的长度使用) QString m_strHdwConfigID; QByteArray m_bufferHdw; // 硬件组态文件的缓冲区 };