📄 hurcoopcsvrview.cpp
字号:
}
}
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 + -