📄 opcdata.h
字号:
// 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 + -