?? opcdata.h
字號:
BOOL Query_IOPCSyncIO(LPUNKNOWN pUnknown);
BOOL Query_IDataObject(LPUNKNOWN pUnknown);
BOOL Query_IOPCAsyncIO(LPUNKNOWN pUnknown);
BOOL Query_IOPCAsyncIO2(LPUNKNOWN pUnknown);
BOOL Query_IConnectionPointContainer(LPUNKNOWN pUnknown);
bool MapStringValToArrayVariant (CString &strValue, VARIANT *pvtSrc, VARIANT *pvtDst);
bool MapStringValToVariant (CString &strValue, VARIANT &vtVal, VARTYPE vtType);
typedef enum _tagGETARRELEMRET
{
tElement = 0,
tEndRow,
tInvalid,
tOverflow,
tDone
} GETARRELEMRET;
GETARRELEMRET GetArrayElement (LPCTSTR szInBuff, int *pnStart, LPTSTR szOutBuff, int nBuffSize);
public:
void UpdateAllViews(CDocument *pDoc);
public:
COPCServer* m_pOPCServer; //
//OPC接口
OPCHANDLE m_hServer; // server handle to the group
CString m_strName; //組名稱
//組屬性
long m_lTimeBias; //時差(時間差)
float m_fDeadband; //死區(qū)(百分?jǐn)?shù)表示)
BOOL m_bActive; //是否活動狀態(tài)
DWORD m_dwUpdateRate; //更新速率
LCID m_dwLanguageID; //語言集
//OPC接口
IOPCItemMgt * m_pIOPCItemMgt; //OPC1.0 OPC2.0 OPC3.0
IOPCGroupStateMgt * m_pIOPCGroupStateMgt; //OPC1.0 OPC2.0 OPC3.0
IOPCGroupStateMgt2 * m_pIOPCGroupStateMgt2; //OPC1.0 OPC2.0 OPC3.0
IOPCPublicGroupStateMgt * m_pIOPCPublicGroupStateMgt; //OPC1.0[O] OPC2.0[O] OPC3.0[N/A]
IOPCSyncIO * m_pIOPCSync; //OPC1.0 OPC2.0 OPC3.0
IOPCSyncIO2 * m_pIOPCSync2; //OPC1.0[N/A] OPC2.0[N/A] OPC3.0
IOPCAsyncIO * m_pIOPCAsync; //OPC1.0 OPC2.0[O]
IOPCAsyncIO2 * m_pIOPCAsync2; //OPC1.0[N/A] OPC2.0 OPC3.0
IConnectionPointContainer * m_pIConnPtContainer; //OPC1.0[N/A] OPC2.0 OPC3.0
IDataObject * m_pIDataObject; //OPC1.0 OPC2.0[O] OPC3.0[N/A]
//回調(diào)接口----實(shí)現(xiàn)數(shù)據(jù)更新
// CAdviseSink *m_pIAdviseSink;
IDataSink20 * m_pIDataSink20; //OPC1.0[N/A] OPC2.0 OPC3.0
protected:
HTREEITEM m_hTreeItem; //在數(shù)視中的位置
DWORD m_dwCookieDataSink20;
DWORD m_dwCookieRead;
DWORD m_dwCookieWrite;
BOOL m_bValid; // TRUE if successfully added to the OPC server
DWORD m_dwUpdateMethod; // update method used by this group (see globals.h)
//
// BOOL m_bConnected; //是否連接
//
CMapStringToOb m_cMapItem; //存儲COPCItem: ID
CMapStringToOb m_cMapAlias; //存儲COPCItem: Alias
//
//
CStringArray m_strItemNames; //暫存增加項(xiàng)的別名,便于提示
};
#define DECIMALDIGITS_INVALID -1 //小數(shù)點(diǎn)位數(shù)設(shè)定無效
class COPCItem : public CObject
{
public:
COPCItem();
COPCItem(COPCItem* pItem);
virtual ~COPCItem();
COPCItem* operator=(COPCItem* pItem);
DECLARE_SERIAL( COPCItem )
public:
static CString StringFromVartype(VARTYPE vtType);
static VARTYPE VartypeFromString(LPCTSTR lpszType);
void EnumDataType(CStringArray& strArrDataType);
public:
void Serialize(CArchive& ar);
void InitializeOPCData();
void SetProperty(LPCTSTR strAccessPath,LPCTSTR strItemID,BOOL bActive,VARTYPE vtType);
void UpdateData (VARIANT &vtVal, WORD wQuality, FILETIME &ftTimeStamp);
void UpdateData (VARIANT &vtVal, WORD wQuality);
BOOL IsActive();
OPCITEMDEF GetOPCITEMDEF();
void GetOPCITEMDEF(OPCITEMDEF &OPCItemDef);
WORD GetQuality();
void GetQuality(CString& strQuality);
CString GetItemID();
void SetItemID (LPCTSTR strItemID);
CString GetAlias();
void SetAlias(LPCTSTR strAlias);
VARIANT GetValue();
void GetValue(CString& strValue);
void SetValue(VARIANT& varValue);
VARTYPE GetDataType();
void GetDataType(CString& strType);
void SetDataType (VARTYPE vtType);
FILETIME GetTimeStamp();
void GetTimeStamp(CString& strTimeStamp);
void SetTimeStamp(FILETIME ftTimeStamp);
DWORD GetUpdateCount();
void GetUpdateCount(CString& strUpdateCount);
void SetUpdateCount(DWORD dwUpdateCount);
CString GetAccessPath();
void SetAccessPath (LPCTSTR strAccessPath);
void SetActive (BOOL bActive);
OPCHANDLE GetServerHandle();
void SetServerHandle (OPCHANDLE hServer);
protected:
OPCHANDLE m_hServer; //數(shù)據(jù)項(xiàng)服務(wù)句柄----OPC Server給定
//數(shù)據(jù)
FILETIME m_ftTimeStamp; // timestamp attached to value
WORD m_wQuality; // quality attached to value
VARIANT m_vtValue; //數(shù)據(jù)值
BOOL m_bTimeStamped; // TRUE if the last update included a timestamp
DWORD m_dwUpdates; //更新次數(shù)
//設(shè)置
int m_unDecimalDigits; //小數(shù)點(diǎn)位數(shù),針對整數(shù)型也有效
CString m_strAccessPath; // access path
CString m_strItemID; // 數(shù)據(jù)項(xiàng)名稱
BOOL m_bActive; // active state
VARTYPE m_vtDataType; // server's canonical datatype
DWORD m_dwAccessRights; // access rights
//
CString m_strAlias; //別名----數(shù)據(jù)項(xiàng)名稱可能太長
// threading
CCriticalSection m_csDataLock;
};
class COPCRemoteMachine : public CObject //遠(yuǎn)程機(jī)器名稱----管理COPCServer
{
public:
COPCRemoteMachine();
virtual ~COPCRemoteMachine();
DECLARE_SERIAL(COPCRemoteMachine)
public:
void UpdateAllViews(CDocument *pDoc);
void Serialize(CArchive &ar);
void AddOPCServer(COPCServer* pOPCServer);
BOOL RemoveOPCServer(COPCServer* pOPCServer);
BOOL RemoveOPCServer(CString &strName);
bool ModifyServerName(CString& strOldName,CString& strNewName);
void SetName(CString strName); //遠(yuǎn)程機(jī)器名稱
CString GetName(); //遠(yuǎn)程機(jī)器名稱
void SetIPAddr(CString strIP); //遠(yuǎn)程機(jī)器IP
CString GetIPAddr(); //遠(yuǎn)程機(jī)器IP
int GetCount(); //遠(yuǎn)程機(jī)器中使用OPCSERVER的數(shù)量
void SetGUIHandle(HTREEITEM hItem);
HTREEITEM GetGUIHandle();
bool IsBeingName(CString& strName) const; //服務(wù)器是否已經(jīng)被使用
protected:
HTREEITEM m_hTreeItem; //在數(shù)視中的位置
CMapStringToPtr m_cMapServer; //存儲COPCServer
CString m_strName;
CString m_strIP;
};
struct COPCInfo
{
CString m_strProgID;
CString m_strUserType;
CString m_strName; //用于方便記憶m_strProgID
};
class COPCBrowse : public CObject //每臺計算機(jī)的OPCServer
{
public:
COPCBrowse();
virtual ~COPCBrowse();
DECLARE_SERIAL(COPCBrowse)
public:
void SetOPCServer(CString strProgID,CString strName,CString strUserType,UINT unOPCID);
bool GetUserType(CString strProgID,UINT unOPCID,CString* pstrUserType);
public:
void Serialize(CArchive &ar);
CMapStringToPtr m_cMapOPC10; //存儲OPC10
CMapStringToPtr m_cMapOPC20; //存儲OPC20
CMapStringToPtr m_cMapOPC30; //存儲OPC30
//
CString m_strPCName;
CString m_strPCIP;
CString m_strNote;
};
//OPC服務(wù)器管理
class COPCManagement : public CObject
{
public:
COPCManagement();
virtual ~COPCManagement();
DECLARE_SERIAL(COPCManagement)
public:
void UpdateAllViews(CDocument* pDoc);
void Serialize(CArchive &ar);
void AddOPCRemPC(COPCRemoteMachine* pPC);
void AddOPCGroup(CString strGroupName,BOOL bConnected=TRUE);
BOOL DelOPCRemPC(CString* pstrPCName);
bool ModifyOPCRemPCName(CString& strOldName,CString& strNewName);
BOOL DelOPCServer(CString* pstrServerName);
BOOL DelOPCGroup(CString* pstrGroupName);
void DelAll();
void SetSelOPC(COPCRemoteMachine* pOPCRM,COPCServer *pOPCServer,COPCGroup* pOPCGroup);
COPCServer* GetSelOPCServer();
COPCGroup* GetSelOPCGroup();
COPCRemoteMachine* GetSelOPCRemotePC();
bool IsBeingRemPC(CString& strRemPCName,COPCRemoteMachine*& pRemPC) ; //計算機(jī)名是否已經(jīng)被使用
//查詢OPC Server
CMapStringToPtr* GetOPCBrowse();
void AddOPCBrowse(COPCBrowse* pOPCBrowse);
bool GetUserType(CString strPC,CString strProgID,UINT unOPCID,CString* pstrUserType);
protected:
COPCRemoteMachine* m_pSelOPCRemotePC; //當(dāng)前選擇項(xiàng)---遠(yuǎn)程計算機(jī)
COPCServer *m_pSelOPCServer; //當(dāng)前選擇項(xiàng)---OPCServer
COPCGroup* m_pSelOPCGroup; //當(dāng)前選擇項(xiàng)---OPCGroup
//
CMapStringToPtr m_cMapRemPC; //存儲COPCRemoteMachine
CMapStringToPtr m_cMapOPCBrowse; //存儲OPC Server PC 中的OPC Server
};
#endif // !defined(AFX_OPCDATA_H__B9A79904_B893_4FAA_A151_38CF40830929__INCLUDED_)
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -