⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 opc_user.h

📁 DCOM 上位机和嵌入式系统通信
💻 H
字号:
// OPC_USER.h : interface of the OPC user class
//
/////////////////////////////////////////////////////////////////////////////

//class CImpIAdviseSink;
//class CClientOPCItem;
//class IOPCCallback_Imp;

/////////////////////////////////////////////////////////////////////////////
// class CClientOPCGroup
class CClientOPCItem;

typedef enum {  OPC_ASYNC_NON,
                OPC_ASYNC_SUPPORTED,
                OPC_ASYNC_WAITING,
                OPC_ASYNC_CALLBACK
                } OPC_ASYNC_STATE;

class CClientOPCGroup:  public CObject
{
public:
  OPC_ASYNC_STATE   m_AsyncState;
  DWORD             m_dwRefreshID;

public:
  CImpIAdviseSink * m_pSink;

  CString           m_szAsyncInfo;

  OPCHANDLE         m_hClientGroup;
  OPCHANDLE         m_hServerGroup;

  // supported Interface OPC
  LPUNKNOWN               m_pUnk;
  IOPCGroupStateMgt     * m_pIOPCGroupStateMgt;
  IOPCItemMgt           * m_pIOPCItemMgt;
  IOPCSyncIO            * m_pIOPCSyncIO;
  IOPCAsyncIO           * m_pIOPCAsyncIO;
  IDataObject           * m_pIDataObject;
  IEnumOPCItemAttributes  * m_pIEnumOPCItemAttrb;

  // V2
  IConnectionPointContainer *m_pCPC;
	IConnectionPoint *m_pCallbackCP;
	IOPCAsyncIO2 *m_pASIO2;
	DWORD m_MyCookie;
	IOPCCallback_Imp *m_MyCallback;

  LPWSTR            m_szGroupName;
  BOOL              m_bIsReleased;

  CMapPtrToPtr      m_MapItemList;     // Key hServer
  CMapPtrToPtr      m_MapItemListBis;  // Key hClient
  OPCHANDLE         m_hLastClientHandle;

  DWORD             m_dwAdviseData;
  DWORD             m_dwAdviseDataTime;
  DWORD             m_dwAdviseWriteComplete;
  
  IOPCServer      * m_pIServer;
  IMalloc         * m_pIMalloc;

public:
  // constructor/destructor
  CClientOPCGroup(IOPCServer* pServer, IMalloc* pIMalloc);
  ~CClientOPCGroup();

  // utility
  void GroupRelease();
  void Initialize(LPCTSTR szName, OPCHANDLE hServer, OPCHANDLE hClient, LPUNKNOWN *ppUNk);
  void InitializeV2(LPCTSTR szName, OPCHANDLE hServer, OPCHANDLE hClient, LPUNKNOWN *ppUnk);

  // Called by cloneGroup, allow copy of items of the first group to the second
  void CloneItems(LPCTSTR szName, OPCHANDLE hServer, OPCHANDLE hClient, LPUNKNOWN *ppUNk);

  CString GetGroupStateInfo();
  CString GetGroupName();
  CString GetAsyncInfo();
  void    SetGroupName(LPCTSTR szNewName);
  BOOL    CanCancelRefresh();
  BOOL    CanbeRefresh();

  CClientOPCItem  * FindItemByKey(OPCHANDLE hServer);
  CClientOPCItem  * FindItemByKeyBis(OPCHANDLE hClient);

  void InsertItems(DWORD dwNumItems, OPCHANDLE *phServer);
  void InsertItem(CClientOPCItem* pItem);
  void RemoveItems(DWORD dwNumItems, OPCHANDLE *phServer);
  void RemoveItem(CClientOPCItem* pItem);

  OPCHANDLE GetNewClientHandle();

  //IO
  void ReadItems(OPCDATASOURCE dwSource, DWORD dwNumItems, OPCHANDLE* phServer, BOOL bAsync);
  void WriteItems(DWORD dwNumItems, OPCHANDLE* phServer,double dblValue,BOOL bAsync);

  void Refresh();
  void CancelRefresh();

  //OnDataChange
  void GetDataFromStorageMedium(LPFORMATETC pFE, LPSTGMEDIUM pSTM);

private:
	DWORD m_dwTransactionID;  // transaction Counter for V2
  DWORD m_dwCancelID;       // ID sent by server for V2 that allow to cancel a transaction

public:
  HRESULT GroupGetActive(BOOL* pbActive);

};


class CClientOPCItem: public CObject
{
public:
  LPUNKNOWN           m_pIOPCItem;
  
  LPWSTR      m_szAccessPath;
  LPWSTR      m_szItemID;
  BOOL        m_bActive;
  OPCHANDLE   m_hClient;
  OPCHANDLE   m_hServer;
  VARTYPE     m_vtRequestedDataType;
  VARTYPE     m_vtCanonicalDataType;
  VARIANT     m_vData;
  WORD        m_wQuality;
  FILETIME    m_ftTimeStamp;

  int         m_nImage;

  CClientOPCGroup  * m_pParentGroup;

public:
  void ItemSetClientHandle(OPCHANDLE hClientNew);
  void ItemSetActiveState(BOOL  bActive)
    { m_bActive = bActive;  };
  OPCHANDLE ItemGetKey() {  return m_hServer; };
  OPCHANDLE ItemGetKeyBis() {  return m_hClient; };
  const CClientOPCItem& operator=( const CClientOPCItem& a )
    { m_hServer = a.m_hServer; return *this; };
  BOOL operator==(CClientOPCItem a)
    { return m_hServer == a.m_hServer;  };

public:
  CClientOPCItem(CClientOPCGroup* pParent);
  ~CClientOPCItem();

  void ItemRelease();
  void ItemInitialize(OPCITEMDEF *pItemDef, OPCITEMRESULT *pItemResult);
  void ItemInitialize(OPCITEMATTRIBUTES *pItemAttrb);
  CString GetItemString();
  void SetItemData(OPCHANDLE* phClient,FILETIME* pftTimeStamp,
                    WORD* pwQuality,VARIANT* pvData,HRESULT* phError = NULL);
};

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -