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

📄 opcdata.h

📁 OPC Client 源代码
💻 H
📖 第 1 页 / 共 2 页
字号:
// OPCData.h: interface for the COPCData class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_OPCDATA_H__B9A79904_B893_4FAA_A151_38CF40830929__INCLUDED_)
#define AFX_OPCDATA_H__B9A79904_B893_4FAA_A151_38CF40830929__INCLUDED_

#include "stdafx.h"

#include "IDataSink20.h"
//OPC Server 回调函数
#include "IShutdownSink.h"
class IShutdownSink;


#pragma comment (lib, "ole32.lib")
#pragma comment (lib, "oleaut32.lib") 

//#define VERSION_1			1
//#define CURRENT_VERSION		VERSION_1

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

//#include "OPCClient.rc"

//--------------------------------------------------------------------------------------
//////////////////////////////////////////////////////////////////////
//COPCServer:管理所有OPCGroup
//////////////////////////////////////////////////////////////////////
class  COPCRemoteMachine;
class  COPCGroup;
class  COPCItem;
struct COPCQuality;

#define LOACAL_MACHINE  _T("本地")
#define OPC_VER10  1
#define OPC_VER20  2
#define OPC_VER30  3

//typedef DWORD OPCHANDLE;


// m_arrMultiQI indices:
#define MQI_IOPCSERVER_COUNT 9
#define MQI_IOPCSERVER		0
#define MQI_IOPCCOMMON		1
#define MQI_ICONPTCON		2
#define MQI_IOPCITEMPROP	3
#define MQI_IOPCBROWSEAS	4
#define MQI_IOPCPUBLIC		5
#define MQI_IOPCBROWSE		6
#define MQI_IOPCITEMIO		7
#define MQI_IOPCPERSIST		8


class COPCServer : public CObject  
{
public:
	COPCServer();
	virtual ~COPCServer();

	DECLARE_SERIAL(COPCServer)

public:
	BOOL Connect();														//1、实例化IOPCServer接口
	int AddGroup(CString strGroupName,BOOL bConnected=TRUE);			//2、增加组
	int AddGroup(
		CString strGroupName,			//名称
		long			lBias,			//时差(时间差)
		float			fDeadband,		//死区(百分数表示)
		DWORD			dwUpdateRate,	//更新速率
		LCID			dwLanguageID,		
		BOOL			bActive,		//是否活动状态
		BOOL bConnected=TRUE);			//
	bool ModifyGroupName(CString& strOldName,CString& strNewName);
	void AddItem(CString strGroup,COPCItem& Item);						//3、增加项
	//4、读写项
	BOOL DelItem(const CString strGroup,const CString strItem);			//5、移除项
	BOOL DelGroup(const CString strGroup);								//6、移除组
public:
	COPCGroup* GetSelGroup();
	void SetSelGroup(CString& strGroup);
	void SetSelGroup(const COPCGroup* pSelGroup);
	BOOL IsConnected () {return (m_bConnected);}
	bool IsAlive();
	IOPCBrowseServerAddressSpace* GetIBrowse ();
	void RemoveGroupFromOPC (IOPCServer* pIOPCServer, OPCHANDLE hServerGroup,CString strGroupName);	//
	bool Disconnect(BOOL bShutdownRequest=FALSE );
	HRESULT GetCLSID (CLSID &clsid);
	//服务器对象回调函数:当服务器对象关闭时调用
	void ShutdownRequest (LPCTSTR lpwszReason);
public:
	void		SetRemoteMachineName(CString strRemoteMachine);
	COPCRemoteMachine* GetRemoteMachine();
	CString		GetProgID ();
	void		SetProgID(CString strProgID);
	CString		GetRemoteMachineName();
	void		SetRemoteMachine(COPCRemoteMachine* pOPCRM);
	CString		GetName();
	void		SetName(CString strName);
	HTREEITEM	GetGUIHandle();
	void		SetGUIHandle(HTREEITEM hItem);
	UINT		GetOPCVersion();
	void		SetOPCVersion(UINT unOPCVersion);

public:
	void UpdateAllViews(CDocument *pDoc);
	void Serialize(CArchive &ar);
	bool		IsBeingName(CString& strNewGroup,COPCGroup* pResGroup=NULL) const;	//组名是否已经被使用
	int			GetGroupName(CStringArray& strArray);
	HTREEITEM	m_hTreeItem;		//在数视中的位置
	//----------------------------------------------------------------------------------------------------------
	COPCRemoteMachine * m_pOPCRemPC;	//所属远程计算机
	//----------------------------------------------------------------------------------------------------------
	COPCGroup* m_pSelGroup;

	CMapStringToPtr m_cMapGroup;		//存储COPCGroup
	CString m_strName;					//服务器名称
	CString m_strProgID;				//OPC服务器ProgID
	CString m_strRemoteMachine;			//远程机器名称
	CString m_strRemoteIP;				//远程机器IP
	UINT    m_unOPCVersion;				//OPC SERVER 支持的版本:OPC_10,OPC_20,OPC_30
	BOOL	m_bConnected;				//连接状态
	//----------------------------------------------------------------------------------------------------------
	// OPC 相关接口
	MULTI_QI m_arrMultiQI [MQI_IOPCSERVER_COUNT];	// array of interfaces we will query for each server
	//interface pointers returned from CoCreateInstanceEx ()

	//1.This is the main interface to an OPC server.
	IOPCServer *					m_pIServer;				//OPC10		OPC20		OPC30 

	//2.Other OPC Servers such as alarms and events share this interface design.
	IOPCCommon *					m_pICommon;				//N/A		OPC20		OPC30 

	//3.This interface provides access to the connection point for IOPCShutdown
	IConnectionPointContainer *		m_pIConnPtContainer;	//N/A		OPC20		OPC30 

	//4.
	IOPCItemProperties *			m_pIItemProps;			//N/A		OPC20		N/A 

	//5.
	IOPCBrowseServerAddressSpace *	m_pIBrowseAddressSpace;	//Optional	OPC20		N/A

	//6.
	IOPCServerPublicGroups *		m_pIPublicGroups;		//Optional	Optional	N/A

	//7.IOPCBrowse inteface provides improved methods for browsing the server address space 
	//	and for obtaining the item properties.The methods in this interface are designed to 
	//	mirror the corresponding methods in the XML-DA interface
	//	代替IOPCBrowseServerAddressSpace
	IOPCBrowse*						m_pIBrowse;				//N/A		N/A			OPC30

	//8.The purpose of this interface is to provide an extremely easy way 
	//	for simple applications to obtain OPC data.
	IOPCItemIO*						m_pIItemIO;				//N/A		N/A			OPC30

	//9.
	IPersistFile *					m_pIPersistFile;

	//1O. OPC Server 回调接口:当OPC Server关闭时进行通知
	IShutdownSink*                  m_pIShutdownSink;	//服务器对象回调接口
	//项管理接口

	//

protected:
	//检查OPC Server 支持的接口
	BOOL Query_IOPCServer(MULTI_QI& MultiQI);
	BOOL Query_IOPCCommon(MULTI_QI& MultiQI);
	BOOL Query_IConnectionPointContainer(MULTI_QI& MultiQI);
	BOOL Query_IOPCItemProperties(MULTI_QI& MultiQI);
	BOOL Query_IOPCBrowseServerAddressSpace(MULTI_QI& MultiQI);
	BOOL Query_IOPCServerPublicGroups(MULTI_QI& MultiQI);
	BOOL Query_IOPCBrowse(MULTI_QI& MultiQI);
	BOOL Query_IOPCItemIO(MULTI_QI& MultiQI);
	BOOL Query_IPersistFile(MULTI_QI& MultiQI);
	BOOL Query_IOPCShutdown();
	//
	int  AddGroupToOPC(COPCGroup* pGroup);
//
	DWORD m_dwCookieShutdownSink;
};

class COPCGroup : public CObject  
{
public:
	COPCGroup();
	virtual ~COPCGroup();

	DECLARE_SERIAL( COPCGroup )
public:
	void AddItem(COPCItem* pItem);
	BOOL DelItem(const CString strItem);
	BOOL RemoveAllItemFromOPC();
protected:
	void AddItemToOPC(int nCount,OPCITEMDEF* pOPCItemDef,OPCHANDLE* pOPCHandle);
	void DelItemToOPC(int nCount,OPCHANDLE* phServerArray,CStringArray *pcItems);
public:
	void SetOPCServer(COPCServer* pOPCServer);
	COPCServer* GetOPCServer();
	void SetGUIHandle(HTREEITEM hItem);
	HTREEITEM GetGUIHandle();
public:
	void	DelItem();
	void	DelItem(CStringArray *pcItems);
	void	AddItem(CObArray *pcItems);
	COPCItem*       GetItem(CString& strItemName);
	CMapStringToOb* GetItem();
	void	ConnectItemToOPC();
	void	GetItem(CStringArray& cstrItemNames,CObArray &cItems);
	bool    SetItemActiveState(CStringArray& strItems,bool bActive=true);
	bool	SetItemDatatypes(CStringArray& strItems,CStringArray& strDatatypes);
public:
	COPCServer*		GetParentServer ();
	OPCHANDLE		GetServerHandle();
	void	ReadItem();
	BOOL	WriteItem(CString strItem, VARIANT& varValue);
	LCID	GetLanguageID();
	DWORD	GetUpdateRate();
	BOOL	IsActive();
	BOOL	IsConnected();
	CString	GetName ();
	float	GetDeadband ();
	long	GetTimeBias ();
	void	SetUpdateMethod (DWORD dwMethod);
	DWORD	GetUpdateMethod ();
	void	SetName (LPCTSTR lpszName);
	void	SetName (CString &strName);
	void	SetUpdateRate (DWORD dwRate);
	void	SetValid (BOOL bValid);
	void	SetActive (BOOL bActive);
	void	Initialize (LPUNKNOWN pUnknown);
	void	Uninitialize (bool bDelete = true);
	BOOL	IsBeingItem(CString &strItemID);
	BOOL	IsBeingAlias(CString &strAlias);

	void    SetState(DWORD* pRequestedUpdateRate,BOOL *pActive,LONG* pTimeBias,FLOAT* pPercentDeadband);	//设定组状态
public:
	//OPCGroup  操作
	//------------------------------------------------------------------
	//OPC 2.0
	//------------------------------------------------------------------
	void ReadAsync20 (CObArray &cItems);		//异步读数据
	void ReadAsync20 (CStringArray &cItemNames);		//异步读数据
	void RefreshAsync20 (bool bCacheRead=true);	//异步更新数据
	void WriteAsync20 (CObArray &cItems, CStringArray &cstrValues);	//异步写数据
	void WriteAsync20 (CStringArray &cItemNames, CStringArray &cstrValues);	//异步写数据
	//------------------------------------------------------------------
	void Serialize(CArchive &ar);

protected:
	BOOL Query_IOPCGroupStateMgt(LPUNKNOWN pUnknown);
	BOOL Query_IOPCPublicGroupStateMgt(LPUNKNOWN pUnknown);
	BOOL Query_IOPCItemMgt(LPUNKNOWN pUnknown);

⌨️ 快捷键说明

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