VC.net 设计的OPCserver只能读,不能写

JuliusSeaky 2013-12-13 04:21:43
用VC.net 设计的OPC程序,用OPC Power Tool只能读取,不能向OPC写数据。
而且只有在先运行OPC程序的时候Tool才能连接到OPC,先运行Tool就不行。
OPC程序的注册函数如下
void CVSKOSSerialDlg::OnRegister()
{
// TODO: 在此添加命令处理程序代码
int i;
BOOL bRet = FALSE;
CString strFile;
strFile = AfxGetApp()->m_pszHelpFilePath;
i = strFile.ReverseFind('\\');
strFile = strFile.Left(i+1);
strFile += "SHDQLGH.exe";
bRet = KOS_Register( CLSID_Svr,
m_strSvrName,
m_strSvrDesc,
strFile);
if (bRet) AfxMessageBox("Register OK");
}
ClientWrite函数如下

void CALLBACK EXPORT ClientWriteProc(HANDLE Handle,VARIANT *pVar)
{
TRACE("Client Write Data, Item Handle=%d, float value = %f\n",Handle,pVar->fltVal);
CVSKOSSerialDlg *pWnd = (CVSKOSSerialDlg *)AfxGetMainWnd();
pWnd->ClientWrite(Handle,pVar);
}

void CVSKOSSerialDlg::ClientWrite(HANDLE Handle, VARIANT *pVar)
{
// OPC client write something to our item of OPC server
// We need to write this value to special hardware.
//AfxMessageBox("OK");

CItem *pItem;
CString strtmp,m_str;
BOOL bReturn;
SYSTEMTIME sysTime;
VARIANT ZH1;
int i;

Lock();
for (i=0;i<m_ItemList.GetSize();i++)
{
pItem = (CItem *)m_ItemList.GetAt(i);
if ( pItem->Handle == Handle )
{
i=m_ItemList.GetSize();

if (pItem->Value.vt == VT_BSTR)
{
ZH1.vt = VT_BSTR;
ZH1=*pVar;
pItem->Value.bstrVal = ZH1.bstrVal;
}
else
{
VariantClear(&(pItem->Value));
VariantCopy(&(pItem->Value),pVar);
}
//setting quality
pItem->Quality = OPC_QUALITY_GOOD;

//setting timestamp
// SYSTEMTIME sysTime;
GetSystemTime(&sysTime);
SystemTimeToFileTime(&sysTime,&pItem->TimeStamp);
bReturn = KOS_UpdateItem(pItem->Handle,pItem->Value,pItem->Quality);
if (!bReturn) TRACE("UpdateItem %s failure!\n",pItem->Name);
}
}
UnLock();
...全文
196 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

7,540

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 VC.NET
社区管理员
  • VC.NET社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧