📄 hurcoopcsvrview.cpp
字号:
// HurcoOPCSvrView.cpp : implementation of the CHurcoOPCSvrView class
//
#include "stdafx.h"
#include <math.h>
#include <stdlib.h>
#include <time.h>
/*
#include "opcda.h"
#include "opc_ae.h"
#include "opcerror.h"
#include "wtopcsvrapi.h"
#include "58ioApi.h"
#include "ErrorCodeDef.h"
*/
#include "HurcoOPCSvr.h"
#include "HurcoOPCSvrDoc.h"
#include "HurcoOPCSvrView.h"
#include "IPAddressDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
//// {F6C07E13-637E-4c61-888D-A15C2481C513}
const GUID CLSID_HurcoOPCSvr =
{ 0xf6c07e13, 0x637e, 0x4c61, { 0x88, 0x8d, 0xa1, 0x5c, 0x24, 0x81, 0xc5, 0x13 } };
void CALLBACK EXPORT DisconnectCallback(DWORD nConnects)
{
//AfxMessageBox("byebye");
//((CHurcoOPCSvrApp*)AfxGetApp())->m_pMainWnd->SendMessage(WM_CLOSE);
if(nConnects==0)
{
exit(0);
}
else
{
RequestDisconnect();
}
}
void CALLBACK EXPORT WriteNotifyCallback(HANDLE Handle, VARIANT *pNewValue, DWORD *pDeviceError)
{
CHurcoOPCSvrApp *pApp;
pApp = (CHurcoOPCSvrApp *)AfxGetApp();
if (pApp->pView != NULL)
{
ASSERT(pApp->pView != NULL);
pApp->pView->WriteNotificationHandler(Handle, pNewValue, pDeviceError);
}
}
//////////////////////////////////////////
void CALLBACK EXPORT UnknownItemCallback(LPSTR Path, LPSTR Name)
{
CHurcoOPCSvrApp *pApp;
pApp = (CHurcoOPCSvrApp *)AfxGetApp();
pApp->pView->UnknownTagHandler(Path, Name);
}
void CALLBACK EXPORT TagRemovedProc (HANDLE TagHandle, LPSTR Path, LPSTR Name)
{
CHurcoOPCSvrApp *pApp;
pApp = (CHurcoOPCSvrApp *)AfxGetApp();
pApp->pView->RemovedTagHandler (TagHandle, Path, Name);
}
/////////////////////////////////////////////////////////////////////////////
// CHurcoOPCSvrView
IMPLEMENT_DYNCREATE(CHurcoOPCSvrView, CFormView)
BEGIN_MESSAGE_MAP(CHurcoOPCSvrView, CFormView)
//{{AFX_MSG_MAP(CHurcoOPCSvrView)
ON_WM_TIMER()
ON_COMMAND(ID_VIEW_MONITOR, OnViewMonitor)
ON_UPDATE_COMMAND_UI(ID_VIEW_MONITOR, OnUpdateViewMonitor)
ON_COMMAND(ID_ADD_IP, OnAddIPAddress)
ON_WM_CREATE()
ON_NOTIFY(TVN_SELCHANGED, IDC_TAGTREE, OnSelchangedTree)
ON_WM_DESTROY()
//}}AFX_MSG_MAP
// Standard printing commands
ON_COMMAND(ID_FILE_PRINT, CFormView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CFormView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CFormView::OnFilePrintPreview)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CHurcoOPCSvrView construction/destruction
CHurcoOPCSvrView::CHurcoOPCSvrView()
: CFormView(CHurcoOPCSvrView::IDD)
{
//{{AFX_DATA_INIT(CHurcoOPCSvrView)
//}}AFX_DATA_INIT
// TODO: add construction code here
CHurcoOPCSvrApp *pApp;
pApp = (CHurcoOPCSvrApp *)AfxGetApp();
pApp->pView = this;
pTagList = NULL;
m_hSession = NULL;
m_bConnectFlag = FALSE;
m_dwRet = 0;
m_bMonitor = FALSE;
m_WriteCallBack = FALSE;
SelectedIndex = -1;
m_bSimulate=FALSE;
}
CHurcoOPCSvrView::~CHurcoOPCSvrView()
{
int i;
CTag *pTag;
if (pTagList != NULL)
{
for (i=0; i<TagCount; i++)
{
pTag = &pTagList[i];
RemoveTag(pTag->Handle);
VariantClear (&(pTag->Value));
}
delete [] pTagList;
}
// DisconnectI5815();
UninitWTOPCsvr();
}
void CHurcoOPCSvrView::DoDataExchange(CDataExchange* pDX)
{
CFormView::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CHurcoOPCSvrView)
DDX_Control(pDX, IDC_TAGTREE, m_Tree);
DDX_Control(pDX, IDC_LIST, m_List);
//}}AFX_DATA_MAP
}
BOOL CHurcoOPCSvrView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CFormView::PreCreateWindow(cs);
}
void CHurcoOPCSvrView::OnInitialUpdate()
{
CFormView::OnInitialUpdate();
GetParentFrame()->RecalcLayout();
ResizeParentToFit();
if (InitOPCOK )
{
CreateTags();
m_List.InsertColumn(0, "ID", LVCFMT_LEFT, 150);
m_List.InsertColumn(1, "VALUE", LVCFMT_LEFT, 80);
}
}
/////////////////////////////////////////////////////////////////////////////
// CHurcoOPCSvrView diagnostics
#ifdef _DEBUG
void CHurcoOPCSvrView::AssertValid() const
{
CFormView::AssertValid();
}
void CHurcoOPCSvrView::Dump(CDumpContext& dc) const
{
CFormView::Dump(dc);
}
CHurcoOPCSvrDoc* CHurcoOPCSvrView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CHurcoOPCSvrDoc)));
return (CHurcoOPCSvrDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CHurcoOPCSvrView message handlers
void CHurcoOPCSvrView::ServerRegister()
{
CString SvrName, SvrDescr, HelpPath;
int i;
// get path to executable by parsing the help path
// contained in CWinApp
HelpPath = AfxGetApp()->m_pszHelpFilePath;
i = HelpPath.ReverseFind('\\');
HelpPath = HelpPath.Left(i+1);
HelpPath += "HurcoOPCSvr.exe";
SvrName = "HurcoOPC.Svr";
SvrDescr = "Ether IO Module OPC Server";
UpdateRegistry ((BYTE *)&CLSID_HurcoOPCSvr, SvrName, SvrDescr, HelpPath);
}
void CHurcoOPCSvrView::CreateTags()
{
int I;
char buf1[100];
char buf2[100];
VARIANT var;
CTag *pTag;
//CTime now;
CString TmpStr1;
CString TmpStr2;
SetCapture();
AfxGetApp()->DoWaitCursor(1);
//////////////////////////////////////////////////
_TREEITEM *rti;
rti=m_Tree.InsertItem("EthernetIO",TVI_ROOT,TVI_LAST);
m_Tree.InsertItem("DI",rti,TVI_LAST);
m_Tree.InsertItem("DO",rti,TVI_LAST);
m_Tree.Expand(rti,TVE_EXPAND);
VariantInit(&var);
TagCount=-1;
CString str=CString("DI");
pTagList = new CTag[32];
if (pTagList == NULL)
{
AfxMessageBox ("Memory Allocation Error", MB_OK);
return;
}
for (I=0; I<32; I++)
{
VariantInit (&pTagList[I].Value);
}
TmpStr1 = "EthernetIO";
TmpStr1 += ".";
TmpStr2 = "EthernetIO";
//TmpStr2 += SetWtOPCsvrQualifier(0);
for(I=0;I<16;I++)
{
//TmpStr1 += "DI";
//TmpStr1 += SetWtOPCsvrQualifier(0);
TagCount++;
sprintf (buf1, "EthernetIO.Channel%d", I);
pTag = &pTagList[TagCount];
pTag->Name = buf1 ;
var.vt = VT_BOOL;
var.boolVal =1;
VariantCopy (&(pTag->Value), &var);
pTag->Handle = CreateTag(pTag->Name, var, OPC_QUALITY_GOOD, FALSE );
//TmpStr1="EthernetIO";
}
for(I=0;I<16;I++)
{
//TmpStr2 += "DO";
//TmpStr2 += SetWtOPCsvrQualifier(0);
TagCount++;
sprintf (buf2, "EthernetIO.Channel%d", I);
pTag = &pTagList[TagCount];
pTag->Name = buf2 ;
var.vt = VT_BOOL;
var.boolVal =1;
VariantCopy (&(pTag->Value), &var);
pTag->Handle = CreateTag(pTag->Name, var, OPC_QUALITY_GOOD, TRUE );
}
AfxGetApp()->DoWaitCursor(0);
ReleaseCapture();
}
void CHurcoOPCSvrView::UpdateList()
{
int I;
int J=-1;
int Index;
_TREEITEM *pi;
pi=m_Tree.GetSelectedItem();
CString cs=m_Tree.GetItemText(pi);
if(cs=="DI")
{
J=0;
}
if(cs=="DO")
{
J=16;
}
if(J==-1)
{
return;
}
m_List.DeleteAllItems();
for(I=0; I<16;I++)
{
Index=m_List.InsertItem(I,pTagList[I+J].Name);
if(pTagList[I+J].Value.boolVal)
{
m_List.SetItemText(Index,1,"TRUE");
}
else
{
m_List.SetItemText(Index,1,"FALSE");
}
}
}
void CHurcoOPCSvrView::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
Monitor();
CFormView::OnTimer(nIDEvent);
}
/*
void CHurcoOPCSvrView::DisconnectI5815()
{
if (m_hSession != NULL)
{
I5815IO_Close(m_hSession);
m_hSession = NULL;
m_bConnectFlag = FALSE;
m_bMonitor=FALSE;
}
}
void CHurcoOPCSvrView::ReadSlot0()
{
WORD wVal = 0;
if (m_bConnectFlag)
{
m_dwRet = I5815IO_ReadRegister(m_hSession, 0, &wVal);
if (ERR_OK(m_dwRet))
{
m_DIValue.Format("%04X",wVal);//%04X
}
}
}
void CHurcoOPCSvrView::ReadSlot1()
{
WORD wVal = 0;
if (m_bConnectFlag)
{
m_dwRet = I5815IO_ReadRegister(m_hSession, 9, &wVal);
if (ERR_OK(m_dwRet))
{
m_DOValue.Format("%04X",wVal);//%04X
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -