📄 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; //死区(百分数表示)
BOOL m_bActive; //是否活动状态
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]
//回调接口----实现数据更新
// CAdviseSink *m_pIAdviseSink;
IDataSink20 * m_pIDataSink20; //OPC1.0[N/A] OPC2.0 OPC3.0
protected:
HTREEITEM m_hTreeItem; //在数视中的位置
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; //暂存增加项的别名,便于提示
};
#define DECIMALDIGITS_INVALID -1 //小数点位数设定无效
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; //数据项服务句柄----OPC Server给定
//数据
FILETIME m_ftTimeStamp; // timestamp attached to value
WORD m_wQuality; // quality attached to value
VARIANT m_vtValue; //数据值
BOOL m_bTimeStamped; // TRUE if the last update included a timestamp
DWORD m_dwUpdates; //更新次数
//设置
int m_unDecimalDigits; //小数点位数,针对整数型也有效
CString m_strAccessPath; // access path
CString m_strItemID; // 数据项名称
BOOL m_bActive; // active state
VARTYPE m_vtDataType; // server's canonical datatype
DWORD m_dwAccessRights; // access rights
//
CString m_strAlias; //别名----数据项名称可能太长
// threading
CCriticalSection m_csDataLock;
};
class COPCRemoteMachine : public CObject //远程机器名称----管理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); //远程机器名称
CString GetName(); //远程机器名称
void SetIPAddr(CString strIP); //远程机器IP
CString GetIPAddr(); //远程机器IP
int GetCount(); //远程机器中使用OPCSERVER的数量
void SetGUIHandle(HTREEITEM hItem);
HTREEITEM GetGUIHandle();
bool IsBeingName(CString& strName) const; //服务器是否已经被使用
protected:
HTREEITEM m_hTreeItem; //在数视中的位置
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 //每台计算机的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服务器管理
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) ; //计算机名是否已经被使用
//查询OPC Server
CMapStringToPtr* GetOPCBrowse();
void AddOPCBrowse(COPCBrowse* pOPCBrowse);
bool GetUserType(CString strPC,CString strProgID,UINT unOPCID,CString* pstrUserType);
protected:
COPCRemoteMachine* m_pSelOPCRemotePC; //当前选择项---远程计算机
COPCServer *m_pSelOPCServer; //当前选择项---OPCServer
COPCGroup* m_pSelOPCGroup; //当前选择项---OPCGroup
//
CMapStringToPtr m_cMapRemPC; //存储COPCRemoteMachine
CMapStringToPtr m_cMapOPCBrowse; //存储OPC Server PC 中的OPC Server
};
#endif // !defined(AFX_OPCDATA_H__B9A79904_B893_4FAA_A151_38CF40830929__INCLUDED_)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -