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

📄 hurcoopcsvrview.cpp

📁 学习开发opcserver和opcclient的好例子
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	}
}
void CHurcoOPCSvrView::WriteSlot1()
{
	int	I;
	CTag	*pTag;
    DWORD dwVal = 0;

	CString TempStr="";
    for (I=0; I<16; I++)
	{
	  pTag = &pTagList[I+16];
	  if(pTag->Value.boolVal)
		{
			TempStr += "1";
		}
		else
		{
			TempStr += "0";
		}
	}
	ASSERT(TempStr.GetLength ()==16);
    //AfxMessageBox(TempStr);
    //TempStr.Right(16);
	TempStr.MakeReverse ();
	///////////////////////////////////////////////
	//CString to Char Pointer,and then AtoX
	////////////////////////////////////////////////
    //char * szTempstr = (char *) (LPCTSTR) TempStr;
	// sscanf(szTempstr,"%x",&dwVal); 
	///////////////////////////////////////////////////
	 dwVal = BinToInt(TempStr);
	//////////////////////////////////////////////////////////
	//CString strTest1;
	//strTest1.Format("%d",dwVal);
	//AfxMessageBox(strTest1);
	if (m_bConnectFlag)
	{
		m_dwRet = I5815IO_WriteRegister(m_hSession,  9, LOWORD(dwVal));
	}
	//////////////////////////////////////////////////////////
    //m_WriteCallBack = FALSE;

}
*/
CString CHurcoOPCSvrView::HexToBin(CString string)//将16进制数转换成2进制

{
	if( string == "0") return "0000";
	if( string == "1") return "0001";
	if( string == "2") return "0010";
	if( string == "3") return "0011";
	if( string == "4") return "0100";
	if( string == "5") return "0101";
	if( string == "6") return "0110";
	if( string == "7") return "0111";
	if( string == "8") return "1000";
	if( string == "9") return "1001";
	if( string == "a") return "1010";
	if( string == "b") return "1011";
	if( string == "c") return "1100";
	if( string == "d") return "1101";
	if( string == "e") return "1110";
	if( string == "f") return "1111";

	if( string == "A") return "1010";
	if( string == "B") return "1011";
	if( string == "C") return "1100";
	if( string == "D") return "1101";
	if( string == "E") return "1110";
	if( string == "F") return "1111";
	return "";
}

int CHurcoOPCSvrView::BinToInt(CString string)//2进制字符数据转换成10进制整型
{
    int Int =0; 
	
	int strInt = 0; 
	int nPower=0;
	for(int i =0 ;i < string.GetLength(); i ++) 
	{ 	
        strInt= _ttoi(string.Mid(i,1));

        nPower=(int)pow(2,(15 - i));
		Int += strInt * nPower;

	} 
	return Int;
 }       

void CHurcoOPCSvrView::OnViewMonitor() 
{
	// TODO: Add your command handler code here
  /* if (!m_bSimulate)
   {
   
		if(m_bMonitor && InitOPCOK)
		{
			if (m_bConnectFlag)
			{
				WORD wModuleTypeLow = 0;
				WORD wModuleTypeHigh = 0;
				m_dwRet=  I5815IO_ReadRegister(m_hSession,1801,&wModuleTypeLow);
				m_dwRet=  I5815IO_ReadRegister(m_hSession,1802,&wModuleTypeHigh);
				
			}
			else
			{
				I5815IO_Close(m_hSession);
				m_hSession = NULL;
				MessageBox("Connection failed! please check setup information!",
							"Error",MB_OK | MB_ICONERROR);
			}
		}	
   }*/
   
	m_bMonitor ^=1;

	if (m_bMonitor)
	{
		SetTimer(1, 500, NULL);
	}
	else
	{
		KillTimer(1);
		
	}
}

void CHurcoOPCSvrView::OnUpdateViewMonitor(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
    pCmdUI->Enable (m_bConnectFlag||m_bSimulate);
	pCmdUI->SetCheck (m_bMonitor);
}

void CHurcoOPCSvrView::OnAddIPAddress() 
{
	// TODO: Add your command handler code here
	CIPAddressDlg dlg;
	dlg.m_bSimulate=m_bSimulate;
    if (dlg.DoModal () == IDOK)
	{   
		m_bSimulate=dlg.m_bSimulate;
	/*	if (m_hSession == NULL && !m_bSimulate)
		{
				m_dwRet = I5815IO_Open(&m_hSession, dlg.m_strIPAddress);
				if(ERR_OK(m_dwRet))
				{
					m_bConnectFlag =TRUE;
				}
				else
				{
			    	AfxMessageBox("Link IO Modules Failed!");
				}
		}*/
	}
}

void CHurcoOPCSvrView::WriteNotificationHandler(HANDLE Handle, VARIANT *pNewValue, DWORD *pDeviceError)
{
	int	I;
	CTag	*pTag;
    
    for (I=0; I<16; I++)
	{
		pTag = &pTagList[I+16];
		if (pTag->Handle == Handle)
		{
			VariantCopy (&(pTag->Value), pNewValue);
			*pDeviceError = S_OK;
		}
	}
/*	if (!m_bSimulate)
	{
	   WriteSlot1();
	}
*/
	   UpdateList();
	

	
	return;	
    
	*pDeviceError = OPC_E_INVALIDHANDLE;
}

int CHurcoOPCSvrView::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
	if (CFormView::OnCreate(lpCreateStruct) == -1)
		return -1;

	ServerRegister();
	if(InitWTOPCsvr( (BYTE *)&CLSID_HurcoOPCSvr, 250 ))
	{   
		InitOPCOK=true;
		EnableDisconnectNotification(&DisconnectCallback);
        EnableWriteNotification (WriteNotifyCallback, TRUE);

        EnableUnknownItemNotification (&UnknownItemCallback);
	    EnableItemRemovalNotification (&TagRemovedProc);
		SetVendorInfo("Hurco Automation Ltd.");
	}
	else
	{
		InitOPCOK=false;
		AfxMessageBox("Fail to Create Server Object!");
	}
	//获得WTOPCSvr.DLL的版本号,没有什么实际的意义。
	//CString strRevision;
    //strRevision.Format ("%d",WTOPCsvrRevision());
    //AfxMessageBox(strRevision);	
	return 0;
}
void CHurcoOPCSvrView::Monitor()
{
	int	  I;
	CTag  *pTag;
	VARIANT var;

	CString strTemp1;
	CString strDIs;	

	CString strTemp2;
	CString strDOs;
  /*  if(!m_bSimulate)
	{
	  	ReadSlot0();	
		for (I=0; I<4; I++)
		{
		strTemp1= m_DIValue.Mid(I,1);
		strDIs=strDIs+HexToBin(strTemp1);
		
  		}
		strDIs.MakeReverse();


		ReadSlot1();
		for (I=0; I<4; I++)
		{
		strTemp2= m_DOValue.Mid(I,1);
		strDOs=strDOs+HexToBin(strTemp2);
  		}
		strDOs.MakeReverse();	
	}

*/
    if (m_bSimulate)
    {   		
		    //int nRand;
			static bool  bState;
			bState ^= 1;
		    VariantInit(&var);
	        StartUpdateTags ();
			for (I=0; I<16; I++)
			{
				pTag = &pTagList[I];
				var.vt = VT_BOOL;
				//nRand= rand();
			//	if((nRand % 2)==1)
				if(bState)
				{
					var.boolVal=true;
				}
				else 
				{
					var.boolVal=false;
				}
			//	var.boolVal =_ttoi(strDIs.Mid(I,1));
				VariantCopy (&(pTag->Value), &var);
				UpdateTagToList (pTag->Handle, pTag->Value, OPC_QUALITY_GOOD);			
			}


			for (I=0; I<16; I++)
				{
					pTag = &pTagList[I+16];
					var.vt = VT_BOOL;
					if(pTag->Value.boolVal)
					{
						var.boolVal =true;	
					}
					else
					{
						var.boolVal =false;
					}
					
		//			var.boolVal =_ttoi(strDOs.Mid(I,1));
					VariantCopy (&(pTag->Value), &var);
					UpdateTagToList (pTag->Handle, var, OPC_QUALITY_GOOD);			
				}	
			EndUpdateTags ();
			UpdateList();
    }
   /* else
	{
        VariantInit(&var);
	    StartUpdateTags ();
		for (I=0; I<16; I++)
			{
				pTag = &pTagList[I];
				var.vt = VT_BOOL;
				var.boolVal =_ttoi(strDIs.Mid(I,1));
				VariantCopy (&(pTag->Value), &var);
				UpdateTagToList (pTag->Handle, var, OPC_QUALITY_GOOD);			
			}

		for (I=0; I<16; I++)
			{
				pTag = &pTagList[I+16];
				var.vt = VT_BOOL;
				var.boolVal =_ttoi(strDOs.Mid(I,1));
				VariantCopy (&(pTag->Value), &var);
				UpdateTagToList (pTag->Handle, var, OPC_QUALITY_GOOD);			
			}
	    EndUpdateTags ();
	    UpdateList();
	}*/
	//m_List.SetRedraw(false);
    //m_List.SetRedraw(true);  
 

}

void CHurcoOPCSvrView::OnSelchangedTree(NMHDR* pNMHDR, LRESULT* pResult) 
{
	NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
	// TODO: Add your control notification handler code here
	UpdateList();
	*pResult = 0;
}

void CHurcoOPCSvrView::RemovedTagHandler(HANDLE hTag, LPSTR Path, LPSTR Name)
{
    CTag	*pTag;
	int	i;

	for (i=0; i<TagList.GetSize(); i++)
		{
		pTag = (CTag *)TagList.GetAt(i);
		if (pTag->Handle == hTag)
			{
			TagList.RemoveAt(i);
			delete (pTag);
			RemoveTag (hTag);
			SelectedIndex = -1;
			Invalidate(TRUE);
			}
		}
}

void CHurcoOPCSvrView::UnknownTagHandler(LPSTR Path, LPSTR Name)
{
	CTag	*pTag;
	char buf[200];
	pTag = new (CTag);
	strncpy (buf, Path, 200);
	pTag->Name = buf;
	if (pTag->Name.GetLength() > 0)
		pTag->Name += ".";
	strncpy (buf, Name, 200);
	pTag->Name += buf;    
	pTag->Handle = CreateTag (pTag->Name, pTag->Value, OPC_QUALITY_GOOD,TRUE);	
	TagList.Add ((CObject *)pTag);
	Invalidate(TRUE);
}

void CHurcoOPCSvrView::OnDestroy() 
{
	CFormView::OnDestroy();
	
	// TODO: Add your message handler code here
	KillTimer(1);
}

⌨️ 快捷键说明

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