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

📄 democlientview.cpp

📁 OPC Client Demo.实现了OPC客户端。能有效连接SERVER
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		return;
	}
	m_hConnect = hConnect;
	KOC_SetDataChangeProc(m_hConnect, &DataChangeProc);
	KOC_SetShutdownProc(m_hConnect,&ShutdownProc);

}

void CDemoClientView::OnOpcGroupAdd() 
{
	// TODO: Add your command handler code here
	CGroupAddDlg dlg;
	dlg.m_strGroupName = "Group1";
	dlg.m_dwUpdateRate = 100;
	dlg.m_fDeadBand = 0.0f;
	if (dlg.DoModal() != IDOK ) return;
	HANDLE hGroup;
	BOOL bActive = true;
	long lTimeBias = 0;
	DWORD dwLcid = 0;
	hGroup = KOC_AddGroup(
				m_hConnect,
				dlg.m_strGroupName, 
				&bActive,
				&dlg.m_dwUpdateRate, 
				&lTimeBias,
				&dlg.m_fDeadBand,
				&dwLcid);	
	if (hGroup==INVALID_HANDLE_VALUE)
	{
		AfxMessageBox("Add Group Failed!");
		return;
	}

	//AfxMessageBox("Add Group OK!");
	m_hGroup = hGroup;
}


void CDemoClientView::OnOPCGROUPRemove() 
{
	// TODO: Add your command handler code here
	KOC_RemoveGroup(m_hConnect,m_hGroup);
	GetListCtrl().DeleteAllItems();
	CItem *pItem;
	for (int i=0;i<ItemList.GetSize();i++)
	{
		pItem = (CItem *)ItemList.GetAt(i);
		delete pItem;
	}
	ItemList.RemoveAll();
	m_hGroup = NULL;
	m_nSelectedIndex = -1;
}

void CDemoClientView::OnOpcItemAdd() 
{
	// TODO: Add your command handler code here
	CItemAddDlg dlg;
	dlg.m_pView = this;
	if(dlg.DoModal() != IDOK) return;
}

BOOL CDemoClientView::AddItem(CString strItemName)
{
	HANDLE hTag = NULL;
	hTag = KOC_AddItem(m_hConnect,m_hGroup,strItemName);

	if (hTag == INVALID_HANDLE_VALUE) 
	{
		TRACE("Add Item %s Failed!\n",strItemName);
		return FALSE;
	}
	CItem *pItem = new CItem;
	ItemList.Add(pItem);
	pItem->hItem = hTag;
	pItem->Name = strItemName;

	CListCtrl& ListCtrl = GetListCtrl();
	char buf[100];
	LV_ITEM lvi;
	lvi.mask = LVIF_TEXT  | LVIF_PARAM | LVIF_STATE;//| LVIF_IMAGE;
	lvi.iSubItem = 0;

	if (pItem->Writable)
		lvi.state = INDEXTOSTATEIMAGEMASK(1);
	else
		lvi.state = INDEXTOSTATEIMAGEMASK(2);

	lvi.stateMask = TVIS_STATEIMAGEMASK;

	strncpy (buf, pItem->Name, 100);
	lvi.pszText = buf;
	lvi.iItem = ListCtrl.GetItemCount() +1;
	lvi.lParam = (LPARAM)pItem;
	ListCtrl.InsertItem(&lvi);

	TRACE("Item %s succesful added!\n",strItemName);
	return TRUE;
}

void CDemoClientView::OnOpcItemRemove() 
{
	// TODO: Add your command handler code here
	CItem *pItem;
	for (int i=0;i<ItemList.GetSize();i++)
	{
		pItem = (CItem *)ItemList.GetAt(i);
		if ( pItem ==(CItem *)GetListCtrl().GetItemData(m_nSelectedIndex) )
		{
			KOC_RemoveItem(m_hConnect,m_hGroup,pItem->hItem);
			GetListCtrl().DeleteItem(m_nSelectedIndex);
			delete pItem;
			ItemList.RemoveAt(i);
			m_nSelectedIndex = -1;
			return;
		}
	}
	
}


void CDemoClientView::OnUpdateOpcConnect(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
	pCmdUI->Enable( (m_hConnect==NULL) ? TRUE : FALSE );
}

void CDemoClientView::OnUpdateOpcDisconnect(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
	pCmdUI->Enable( (m_hConnect!=NULL) ? TRUE : FALSE );	
}


void CDemoClientView::OnUpdateOpcGroupAdd(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
	pCmdUI->Enable( ( (m_hConnect!=NULL)&&(m_hGroup==NULL) ) ? TRUE : FALSE );		
}

void CDemoClientView::OnUpdateOPCGROUPRemove(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
	pCmdUI->Enable( ( (m_hConnect!=NULL)&&(m_hGroup!=NULL) ) ? TRUE : FALSE );			
}

void CDemoClientView::OnUpdateOpcItemAdd(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
	pCmdUI->Enable( ( (m_hConnect!=NULL)&&(m_hGroup!=NULL) ) ? TRUE : FALSE );				
}

void CDemoClientView::OnUpdateOpcItemRemove(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
	pCmdUI->Enable( (m_nSelectedIndex>=0) ? TRUE:FALSE );
}


LRESULT CDemoClientView::OnServerShutdown(UINT wParam, LPARAM lparam)
{
	OnOpcDisconnect();
	return (0);
}


void CDemoClientView::OnTimer(UINT nIDEvent) 
{
	// TODO: Add your message handler code here and/or call default
	if (nIDEvent == DISPLAY_TICK)
	{
		CTime	timestamp;
		CString tmpStr;
		CItem *pItem;
		char buf[100];
		int i=0;
	
		CListCtrl& pList = GetListCtrl();

		while ( (i<pList.GetItemCount()) ) 
		{
			pItem = (CItem *)pList.GetItemData(i);
			FormatDataType(&(pItem->Value),buf);
			pList.SetItemText(i,1,buf);
		
			FormatVariant(&(pItem->Value),buf);
			pList.SetItemText(i,2,buf);

			timestamp = CTime::CTime(pItem->TimeStamp);
			pList.SetItemText(i,3,timestamp.Format("%Y-%m-%d %H:%M:%S"));

			FormatOpcQuality(pItem->Quality,buf);
			pList.SetItemText(i,4,buf);
/*
			if (!pItem->Active)
				pList.SetItemState(i,INDEXTOSTATEIMAGEMASK(3),TVIS_STATEIMAGEMASK );
			else if ( pItem->Writable )
				pList.SetItemState(i,INDEXTOSTATEIMAGEMASK(1),TVIS_STATEIMAGEMASK );
			else
				pList.SetItemState(i,INDEXTOSTATEIMAGEMASK(2),TVIS_STATEIMAGEMASK );
*/

			i++;
		}
		return;
	}
	CListView::OnTimer(nIDEvent);
}

void CDemoClientView::OnDestroy() 
{
	CListView::OnDestroy();
	
	// TODO: Add your message handler code here
	KillTimer(DISPLAY_TICK);

	OnOpcDisconnect();
}

void CDemoClientView::OnLButtonDown(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	m_nSelectedIndex = GetListCtrl().HitTest(point, NULL);
	
	CListView::OnLButtonDown(nFlags, point);
}

void CDemoClientView::OnRButtonDown(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	
	CListView::OnRButtonDown(nFlags, point);

	m_nSelectedIndex = GetListCtrl().HitTest(point, NULL);

	if (m_nSelectedIndex != -1 )
	{
		// map the point that is passed to the 
		// function from client coordinates
		// to screen coordinates
		ClientToScreen(&point);

		CMenu Menu;
		if ( Menu.LoadMenu(IDR_ITEM) )
		{
			CMenu* pSubMenu = Menu.GetSubMenu(0);
			
			if (pSubMenu!=NULL)
			{
				// Display the context menu
				pSubMenu->TrackPopupMenu(
					TPM_LEFTALIGN | TPM_RIGHTBUTTON,
					point.x, point.y, this);
			}
		}
	
	}
}

void CDemoClientView::OnItemRead() 
{
	// TODO: Add your command handler code here
	CItem *pItem;
	pItem = (CItem *)GetListCtrl().GetItemData(m_nSelectedIndex);

	VARIANT	Value;
	VariantInit (&Value);
	FILETIME ftTime;
	DWORD dwQuality;

	BOOL bResult = KOC_ReadItem(m_hConnect,
								m_hGroup,
								pItem->hItem,
								&Value,
								&ftTime,
								&dwQuality );

	if (bResult)
	{
		TRACE("Read Succ.\n");
		VariantCopy(&pItem->Value,&Value);
		pItem->TimeStamp = ftTime;
		pItem->Quality = dwQuality;
	}
	else TRACE("Read Failed.\n");

	VariantClear(&Value);	
}

void CDemoClientView::OnItemWrite() 
{
	// TODO: Add your command handler code here
	CItem *pItem;
	pItem = (CItem *)GetListCtrl().GetItemData(m_nSelectedIndex);

	CItemWriteDlg dlg;
	if (dlg.DoModal() != IDOK ) return;

	COleVariant vt( dlg.m_strValue );   // initialize as a string
	vt.ChangeType( pItem->Value.vt );  // let COleVariant convert!

	BOOL bResult = KOC_WriteItem(m_hConnect,
								m_hGroup,
								pItem->hItem,
								vt,
								dlg.m_bAsync);

	if (!bResult)
		AfxMessageBox("Write Interface Failed", MB_OK);	
}


void CDemoClientView::OnOpcItemActive() 
{
	// TODO: Add your command handler code here
	CListCtrl& pList = GetListCtrl();
	CItem *pItem;

	pItem = (CItem *)pList.GetItemData(m_nSelectedIndex);

	BOOL bRet = FALSE;
	bRet = KOC_ActiveItem( m_hConnect, m_hGroup, pItem->hItem,!pItem->Active );
	if (bRet) pItem->Active = !pItem->Active;

	if (!pItem->Active)
		pList.SetItemState(m_nSelectedIndex,INDEXTOSTATEIMAGEMASK(3),TVIS_STATEIMAGEMASK );
	else if ( pItem->Writable )
		pList.SetItemState(m_nSelectedIndex,INDEXTOSTATEIMAGEMASK(1),TVIS_STATEIMAGEMASK );
	else
		pList.SetItemState(m_nSelectedIndex,INDEXTOSTATEIMAGEMASK(2),TVIS_STATEIMAGEMASK );
	
}

void CDemoClientView::OnUpdateOpcItemActive(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
 	if ( m_nSelectedIndex>=0 )
 	{
 		pCmdUI->Enable( TRUE );
 		CItem *pItem;
 		pItem = (CItem *)GetListCtrl().GetItemData(m_nSelectedIndex);
 		pCmdUI->SetCheck( pItem->Active ? TRUE : FALSE );
 	}
 	else
 	{
 		pCmdUI->Enable( FALSE );
 	}	
}

⌨️ 快捷键说明

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