亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? opcserver.cpp

?? opc client 工業自動化控制過程的客戶端
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
			info->m_clsid,
			NULL,
			CLSCTX_ALL,
			IID_IUnknown,
			(LPVOID*)&punknown);
		
		if(FAILED(hr) || punknown == NULL){	//創建失敗
			CString msg;
			msg.Format(_T("CoCreateInstance %s failed:"), info->m_ProgID.GetBuffer(0));
			theDoc->ReportError(msg, hr);

			return false;
		}
	}
	else{		//遠程對象
		COSERVERINFO	si;
		MULTI_QI	qi;

		si.dwReserved1 = 0;
		si.pAuthInfo = NULL;
		si.pwszName = T2OLE(info->m_NodeName.GetBuffer(0));
		si.dwReserved2 = 0;

		qi.pIID = &IID_IOPCServer;
		qi.pItf = NULL;
		qi.hr = 0;
		
		hr = CoCreateInstanceEx(
			info->m_clsid,
			NULL,
			CLSCTX_REMOTE_SERVER,
			&si,
			1,
			&qi);
		if(FAILED(hr)){
			CString msg(_T("CoCreateInstanceEx failed: "));
			theDoc->ReportError(msg, hr);

			return false;
		}
		if(FAILED(qi.hr) || (qi.pItf == NULL)){
			CString msg(_T("MULTI_QI failed: "));
			theDoc->ReportError(msg, qi.hr);

			return false;
		}

		punknown = qi.pItf;
	}

	hr = opc_server.Attach(punknown);
	punknown->Release();	//釋放IUnknown接口
	punknown = NULL;

	if(FAILED(hr)){
		CString msg(_T("OPC Server Attach failed:"));
		if(theDoc)
			theDoc->ReportError(msg, hr);
	}

	//是否實現了IShutdown接口
	hr = AtlAdvise(
		opc_server,
		shut_down->GetUnknown(),
		IID_IOPCShutdown,
		&shut_down_connection
		);
	if(FAILED(hr)){
		CString msg;
		msg.Format(_T("%s: %s can't support IOPCShutdown interface."),
			info->m_NodeName,
			info->m_ProgID);
		if(theDoc)
			theDoc->ReportError(msg.GetBuffer(0));
	}
	
	//添加所有組
	/*
	POSITION group_pos = groups.GetHeadPosition();
	while(group_pos){
		COPCGroup* group = groups.GetNext(group_pos);
		if(!group)
			continue;

		group = add_group(group);
		if(group){		//添加所有點
			POSITION item_pos = group->items.GetHeadPosition();
			while(item_pos){
				Item* item = group->items.GetNext(item_pos);
				if(!item)
					continue;

				item = group->add_item(item);
			}
		}
	}
	*/
	return true;
}

//斷開OPCServer
bool COPCServer::disconnect()
{
	if(!is_connected())
		return false;

	HRESULT hr = S_OK;
	if(shut_down_connection){
		hr = AtlUnadvise(
			opc_server,
			IID_IOPCShutdown,
			shut_down_connection);
		shut_down_connection = 0;

		if(FAILED(hr)){
			CString msg(_T("AtlUnadvise IOPCShutdown failed."));
			if(theDoc)
				theDoc->ReportError(msg.GetBuffer(0), hr);
		}
	}

	//斷開所有Group,并刪除
	/*.....*/
	
	current_group =  NULL;
	while(!groups.IsEmpty())
		delete groups.RemoveHead();

	opc_server.Detach();
	
	return true;
}

//連接狀態
bool COPCServer::is_connected()
{
	return opc_server.IsOk() ? true : false;
}

//獲取錯誤信息
HRESULT COPCServer::GetErrorString(
				   HRESULT	dwError,
				   LCID		dwLocale,
				   LPWSTR*	ppString)
{
	return opc_server.GetErrorString(dwError, dwLocale, ppString);
}

OPCServerInfo* const COPCServer::get_server_info()
{
	return server_info;
}

//添加點
COPCGroup* COPCServer::add_group(COPCGroup *group)
{
	USES_CONVERSION;

	if(!group)
		return 0;
	
	OPCServerInfo* info = server_info;
	//add group
	LPCWSTR	group_name = T2OLE(group->get_name().GetBuffer(0));
	BOOL	active = group->get_active();
	ULONG	update_rate = group->get_update_rate();
	long	time_bias = group->get_time_bias();
	float	dead_band = group->get_dead_band();
	DWORD	local_id = group->get_local_id();
	DWORD	rate;
	
	HRESULT hr = opc_server.AddGroup(
		L"WuLiangFeng",
		active,
		update_rate,
		(OPCHANDLE)group,
		&time_bias,
		&dead_band,
		local_id,
		&group->group_handle,
		&rate,
		IID_IOPCGroupStateMgt,
		group->opc_group);
     //       CString ss;
	//		ss.Format("group id=%d",group->group_handle);
	//		AfxMessageBox(ss);
	if(FAILED(hr)){
		CString msg;
		msg.Format(_T("Add Group: %s failed."), group_name);
		theDoc->ReportError(msg.GetBuffer(0), hr);

		return 0;
	}

#ifdef FULL_TEST
	IOPCGroupStateMgt* pTest=NULL;
	hr = opc_server.GetGroupByName( 
		L"WuLiangFeng", 
		IID_IOPCGroupStateMgt, 
		(LPUNKNOWN*)&pTest );
	if( SUCCEEDED(hr) )
	{
		ASSERT( pTest == (IOPCGroupStateMgt*)group->opc_group );	// should get the same
		hr = pTest->SetName( group_name );				// set new name
		pTest->Release();
		if( FAILED(hr) )
		{
			theDoc->ReportError( _T("IOPCGroupStateMgt::SetName: "), hr );
		}
		else
		{
			// should now go by this new name
			hr = opc_server.GetGroupByName( 
				group_name, 
				IID_IOPCGroupStateMgt, 
				(LPUNKNOWN*)&pTest );
			if( SUCCEEDED(hr) )
			{
				ASSERT( pTest == (IOPCGroupStateMgt*)group->opc_group );
				pTest->Release();
			}
		}
	}
#endif//FULL_TEST

	//OPC 2.0 connection point
	hr = AtlAdvise(
		group->opc_group,
		group->call_back->GetUnknown(),
		IID_IOPCDataCallback,
		&group->call_back_connection);
	if(SUCCEEDED(hr))
		group->use_cp = true;
		
	if(!group->use_cp){		//不支持連接點
		CString msg;
		msg.Format(_T("%s: %s can't support IOPCDataCallback interface."),
			info->m_NodeName,
			info->m_ProgID);
		theDoc->ReportError(msg.GetBuffer(0), hr);
		
		//opc 1.0 data advise format
		FORMATETC format_etc;
		format_etc.tymed =  TYMED_HGLOBAL;
		format_etc.ptd = NULL;
		format_etc.dwAspect = DVASPECT_CONTENT;
		format_etc.lindex = -1;
		
		// IAdviseSink is an interface on OUR object that is passed to
		// the server for callbacks
		IAdviseSink *pAdviseSink = NULL;
		hr = group->advise_sink->QueryInterface(IID_IAdviseSink, (LPVOID *)&pAdviseSink);
		if( FAILED(hr) )
		{
			msg = _T("IAdviseSink: ");
			theDoc->ReportError(msg.GetBuffer(0), hr);

			group->opc_group.Detach();
			//opc_server.Detach();
			return 0;
		}
		
		// Get an IDataObject interface on the group
		DataObject dataObject;
		hr = dataObject.Attach( group->opc_group );
		if(FAILED(hr) || !dataObject.IsOk() )
		{
			//some servers don't do this, so don't quit altogether
			msg = _T("IDataObject not supported by this server\nNo data notifications will take place");
			theDoc->ReportError(msg.GetBuffer(0));
			
			return 0;
		}
		
		// Register our IAdvise with the group
		// Need to register both formats: data change, and write complete
		format_etc.cfFormat = OPCSTMFORMATWRITECOMPLETE ;
		hr = dataObject.DAdvise(&format_etc,
			ADVF_PRIMEFIRST,    // ADVF flag
			pAdviseSink,
			&group->connection2);
		if( FAILED(hr) )
		{
			msg = _T("IDataObject::DAdvise: : ");
			theDoc->ReportError(msg.GetBuffer(0), hr);
			
			return 0;
		}
		
			
		#ifdef DATATIMEFORMAT
			format_etc.cfFormat = OPCSTMFORMATDATATIME ;
		#else
			format_etc.cfFormat = OPCSTMFORMATDATA ;
		#endif // DATATIMEFORMAT

		hr = dataObject.DAdvise(&format_etc,
			ADVF_PRIMEFIRST,    // ADVF flag
			pAdviseSink,
			&group->connection1);
		pAdviseSink->Release();
		if( FAILED(hr) )
		{
			msg = _T("IDataObject::DAdvise: : ");
			theDoc->ReportError(msg.GetBuffer(0), hr);
			
			return 0;
		}
	}
	
	groups.AddTail(group);
	current_group = group;

	theDoc->UpdateAllViews(NULL, ADD_GROUP, (CObject*)group);
	return current_group;
}

//獲取當前組
COPCGroup* COPCServer::get_current_group()
{
	return current_group;
}

//獲取父服務器
COPCServer* COPCGroup::get_parent() const
{
	return parent;
}

OPCServer& COPCServer::get_opc_server()
{
	return opc_server;
}

COPCGroup* COPCServer::set_current_group(COPCGroup *group)
{
	if(group)
		current_group = group;
	
	return group;
}

//保存
void COPCServer::Serialize(CArchive &ar)
{
	CWaitCursor wait_cursor;
	//Lock wait(&item_cs);

	if(ar.IsStoring()){
		if(server_info){
			ar << server_info->m_ProgID;
			ar << server_info->m_NodeName;
			ar << server_info->m_Description;
			ar << server_info->m_clsid.Data1;
			ar << server_info->m_clsid.Data2;
			ar << server_info->m_clsid.Data3;
			
			int times = sizeof(server_info->m_clsid.Data4) / sizeof(BYTE);
			for(int i = 0; i < times; i++){
				ar << server_info->m_clsid.Data4[i];
			}
		}

		int group_count = groups.GetCount();
		ar << group_count;
		POSITION group_pos = groups.GetHeadPosition();
		while(group_pos){
			COPCGroup* group = groups.GetNext(group_pos);
			if(group)
				group->Serialize(ar);
		}
	}
	else{
		if(server_info)
			delete server_info;

		server_info = new OPCServerInfo;
		if(server_info){
			ar >> server_info->m_ProgID;
			ar >> server_info->m_NodeName;
			ar >> server_info->m_Description;
			ar >> server_info->m_clsid.Data1;
			ar >> server_info->m_clsid.Data2;
			ar >> server_info->m_clsid.Data3;

			int times = sizeof(server_info->m_clsid.Data4) / sizeof(BYTE);
			for(int i = 0; i < times; i++){
				ar >> server_info->m_clsid.Data4[i];
			}
		}

		if(!is_connected())		//連接OPC Server
			connect();		

		while(!groups.IsEmpty())
			delete groups.RemoveHead();
		
		int group_count = 0;
		ar >> group_count;
		while(group_count--){
			COPCGroup* group = new COPCGroup;
			if(group){
				group->parent = this;
				group->Serialize(ar);

				//add_group(group);
				//groups.AddTail(group);
			}	
		}
	}
}

//刪除點
void COPCGroup::remove_item()
{
	if(current_item == NULL)
		return;

	OPCItemMgt item_mgt;
	HRESULT hr = item_mgt.Attach(opc_group);
	if(SUCCEEDED(hr)){
		HRESULT* errors = NULL;
		hr = item_mgt.RemoveItems(
			1,
			&current_item->hServerHandle,
			&errors);
		if(SUCCEEDED(hr))
			CoTaskMemFree(errors);

		EnterCriticalSection(&item_cs);
		
		POSITION pos = items.Find(current_item);
		if(pos)
			items.RemoveAt(pos);
		
		delete current_item;
		current_item = NULL;
		
		LeaveCriticalSection(&item_cs);
		
		theDoc->SetModifiedFlag(TRUE);
		theDoc->UpdateAllViews(NULL, UPDATE_GROUP, (CObject*)this);
	}
}

void COPCServer::remove_group(COPCGroup *group)
{
	Lock wait(&item_cs);
	if(group == NULL){
		group = current_group;
		current_group = 0;
	}

	POSITION group_pos = groups.Find(group);
	if(group_pos){
		groups.RemoveAt(group_pos);
		delete group;
	}

	theDoc->UpdateAllViews(NULL, UPDATE_SERVER, (CObject*)this);
}

//讀取點
void COPCGroup::read_item(Item *item)
{
	
}

void COPCGroup::write_item(BOOL async, CString value, Item *item)
{

}


void COPCGroup::SetItemValue(OPCHANDLE hItem, VARIANT *pVar, FILETIME timestamp, WORD quality)
{
 		POSITION item_pos = items.GetHeadPosition();
		for(int index = 0; item_pos; index++){
			Item* item = items.GetNext(item_pos);
			ASSERT(item);
			if(hItem ==(OPCHANDLE) item)
			{
				item->quality = quality;
				VariantCopy(&(item->value), pVar);
                item->timestamp=timestamp;
				break;
			}
		} 
}

void COPCServer::SetItemValue(OPCHANDLE hGroup, OPCHANDLE hItem, VARIANT *pVar, FILETIME timestamp, WORD quality)
{
	POSITION group_pos = groups.GetHeadPosition();
	while(group_pos){
		COPCGroup* group = groups.GetNext(group_pos);
            CString ss;
			ss.Format("%d=%d",group->group_handle,hGroup);
			AfxMessageBox(ss);

		if(!group)
			continue;
        if(group->group_handle  == hGroup) 
		{
			group->SetItemValue(hItem,pVar,timestamp,quality);
			break;
		}
	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩久久精品一区| 在线视频欧美精品| 精品国产a毛片| 久久精品国产在热久久| 日韩欧美国产一区在线观看| 另类调教123区| wwww国产精品欧美| 不卡影院免费观看| 亚洲精选视频免费看| 在线观看日韩一区| 日韩精品欧美精品| 国产午夜精品理论片a级大结局| 成人影视亚洲图片在线| 亚洲视频一区在线| 欧美日韩免费观看一区三区| 五月婷婷欧美视频| 亚洲精品一区在线观看| 成人动漫一区二区三区| 精品一区二区三区不卡| 久久婷婷国产综合国色天香| 成人黄色av网站在线| 伊人一区二区三区| 日韩精品一区在线| eeuss影院一区二区三区| 一区二区三区四区乱视频| 在线不卡a资源高清| 国产成人综合自拍| 亚洲一区影音先锋| 久久久久久久性| 欧美午夜在线观看| 国产黄人亚洲片| 亚洲一本大道在线| 久久久国产一区二区三区四区小说 | 国产欧美一区二区精品忘忧草| 99久久国产综合色|国产精品| 日韩中文欧美在线| 国产色爱av资源综合区| 欧美在线一区二区三区| 国产成人午夜99999| 亚洲成人综合网站| 中文字幕第一区第二区| 日韩一区二区三区免费看| av亚洲产国偷v产偷v自拍| 青青草原综合久久大伊人精品| 国产精品―色哟哟| 日韩免费观看高清完整版| 91小视频免费观看| 国产美女一区二区| 天天综合网 天天综合色| 亚洲欧美自拍偷拍| 久久亚洲精华国产精华液| 欧美日韩精品福利| 99久久国产综合精品女不卡| 久久91精品国产91久久小草| 夜夜嗨av一区二区三区| 中文字幕欧美一区| 国产日韩欧美一区二区三区综合| 欧美巨大另类极品videosbest | 美国一区二区三区在线播放| 一区二区三区中文在线观看| 日本一区二区三区国色天香| 26uuu国产电影一区二区| 欧美一区二区私人影院日本| 在线视频你懂得一区| 99国产精品久久久久久久久久久| 国产精品99久| 国内久久婷婷综合| 精品一区二区三区在线观看| 丝袜美腿高跟呻吟高潮一区| 亚洲综合自拍偷拍| 一区二区三区欧美视频| ...av二区三区久久精品| 国产清纯美女被跳蛋高潮一区二区久久w| 日韩一区二区三区在线观看| 欧美精品三级在线观看| 欧美日韩亚洲国产综合| 欧美天堂一区二区三区| 欧美中文字幕一区| 精品视频全国免费看| 欧洲激情一区二区| 欧美调教femdomvk| 欧美精品一二三区| 欧美一区二区三区四区视频| 91精品国产综合久久福利软件| 欧美美女视频在线观看| 日韩视频一区二区在线观看| 日韩一级片在线播放| 欧美电影免费提供在线观看| 精品国产a毛片| 国产日韩成人精品| 亚洲视频免费在线| 污片在线观看一区二区| 日本午夜精品视频在线观看| 久久99精品久久久久久国产越南| 国产乱码精品一品二品| 成人激情小说网站| 色婷婷av一区| 欧美一级午夜免费电影| 久久亚洲一级片| 国产精品久久毛片| 亚洲成人动漫av| 国产专区综合网| av网站免费线看精品| 欧美三区免费完整视频在线观看| 91精品国产黑色紧身裤美女| 精品国产乱码久久久久久久久| 国产精品女主播av| 亚洲高清在线精品| 国产乱国产乱300精品| 91成人免费网站| 日韩欧美国产麻豆| 国产精品第五页| 日本少妇一区二区| 成人免费毛片片v| 欧美日韩成人在线| 中文字幕乱码久久午夜不卡| 亚洲一二三四在线观看| 久草热8精品视频在线观看| 99九九99九九九视频精品| 欧美日韩国产综合草草| 国产亚洲精久久久久久| 亚洲影院在线观看| 国产一区二区三区香蕉| 色婷婷精品久久二区二区蜜臂av| 日韩精品最新网址| 亚洲午夜激情av| 国产成人综合亚洲网站| 欧美精品在线视频| 国产精品电影一区二区三区| 蜜臀av一级做a爰片久久| 色综合久久天天| 国产日韩欧美综合一区| 亚洲成人精品在线观看| 成人黄色综合网站| 欧美成人综合网站| 午夜视频一区二区三区| 99久久婷婷国产综合精品| 亚洲精品在线电影| 日韩中文字幕一区二区三区| 91在线高清观看| 欧美精品一区二区三区一线天视频| 亚洲精品日产精品乱码不卡| 盗摄精品av一区二区三区| 欧美一区二区美女| 亚洲成人一区在线| 欧美在线一区二区| 亚洲欧洲日韩女同| 国产精品亚洲а∨天堂免在线| 666欧美在线视频| 一区二区欧美精品| 色综合天天综合网天天看片| 中文字幕免费不卡| 国产馆精品极品| 欧美大肚乱孕交hd孕妇| 日韩和欧美的一区| 欧美精品第1页| 亚洲永久免费视频| 欧美三级日韩三级| 亚洲大片在线观看| 欧美丝袜丝交足nylons图片| 一区二区三区四区不卡在线| 91免费版在线| 中文字幕一区在线观看| 成人av在线观| 国产精品高潮呻吟| 91在线视频网址| 亚洲美女偷拍久久| 色综合久久久久综合体桃花网| √…a在线天堂一区| 99久久99久久久精品齐齐| 亚洲日韩欧美一区二区在线| av影院午夜一区| 亚洲人成网站影音先锋播放| 91无套直看片红桃| 一区二区三区鲁丝不卡| 欧美在线观看18| 日韩精品亚洲一区| 欧美大黄免费观看| 懂色av一区二区三区蜜臀| 国产精品毛片高清在线完整版| 成人深夜在线观看| 亚洲美女免费视频| 欧美美女bb生活片| 久久99久久精品| 国产日韩欧美麻豆| 一本色道久久综合亚洲91| 亚洲一区二区偷拍精品| 欧美一区二区三区婷婷月色| 精品一区二区免费在线观看| 国产欧美精品一区二区三区四区| av一区二区久久| 午夜久久久久久| 精品国产乱码久久久久久蜜臀| 成人深夜视频在线观看| 亚洲地区一二三色| 26uuu国产在线精品一区二区| av电影在线观看一区| 日韩高清欧美激情| 久久久高清一区二区三区| 日本精品一区二区三区四区的功能|