📄 opc_user.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 + -