S7200OPCC++读写PCAccess服务器Word文档格式.docx
- 文档编号:4473470
- 上传时间:2023-05-03
- 格式:DOCX
- 页数:15
- 大小:17.07KB
S7200OPCC++读写PCAccess服务器Word文档格式.docx
《S7200OPCC++读写PCAccess服务器Word文档格式.docx》由会员分享,可在线阅读,更多相关《S7200OPCC++读写PCAccess服务器Word文档格式.docx(15页珍藏版)》请在冰点文库上搜索。
2,VD148,real"
2,VD152,real"
2,VD156,real"
2,VD160,real"
2,VD164,real"
2,VD168,real"
2,VD172,real"
2,VD176,real"
//VD164
2,VD180,real"
2,VD184,real"
2,VD188,real"
2,VD192,real"
2,VD196,real"
2,VD200,real"
2,VD204,real"
2,VD208,real"
2,VD212,
2,VD216,real"
2,VD220,real"
};
classCOPCComm
{
public:
COPCComm(void);
~COPCComm(void);
DWORDm_dwAdvise;
OPCITEMDEfi_ltems[31];
VARIANTm」temValues[31];
LPWSTRm_ItemID[31];
OPCITEMATTRIBUTES*m_pltAttr;
IUnknown*m_pUnknown;
lOPCServer*m」OPCServer;
IOPCItemMgt*m」OPCItemMgt;
IOPCSynclO*m_pOPCSync;
IOPCGroupStateMgt*m」OPCGroupStateMgt;
IOPCAsyncIO2*m」OPCAsynclO2;
OPCITEMRESULT*m_ltemResult;
HRESULT*m_pErrors;
OPCHANDLEm_GrpSrvHandle;
MULTI_QIm_arrMultiQI[6];
DWORDm_TransactionID;
OPCITEMDEF*m_pltems;
OPCITEMSTATE*bdg;
boolConnectSrv(void);
boolDisconnect(void);
boolAddGroup(void);
boolAddltem(DWORDNumitems);
boolWrite(DWORDNumitems);
boolRemoveGroup(void);
boolRemovitem(DWORDNumitems);
floatRead(DWORDNumitems);
源文件:
OPCComm.cpp
OPCComm.h"
COPCComm:
:
COPCComm(void)
inti;
m_pltAttr=new0PCITEMATTRIBUTES[31];
for(i=0;
i<
31;
i++)
m_pltAttr[i].szltemlD=L"
"
;
m_pltAttr[i].szAccessPath=L"
m_pltAttr[i].hClient=0;
m_pItAttr[i].hServer=0;
m_pltAttr[i].dwAccessRights=-1;
m_pltAttr[i].bActive=FALSE;
}m」OPCServer=NULL;
m」OPCItemMgt=NULL;
}
~COPCComm(void)
if(m_pltAttr!
=NULL)
delete]]m_pltAttr;
boolCOPCComm:
ConnectSrv()
//TODO:
Addyourcontrolnotificationhandlercodehere
CLSIDOPCclsid;
HRESULTr1;
/*
r1=CoInitialize(NULL);
if(r1!
=S_OK)
if(r1==S_FALSE)
AfxMessageBox(_T("
CO库已经初始化"
));
returntrue;
else
CO库初始化失败"
returntrue;
*/
r1=CLSIDFromProglD(L"
S7200.0PCServer"
&
OPCclsid);
if(S_0K!
=r1)
if(CO_E_CLASSSTRING==r1)
TheProgIDisinvalid!
elseif(REGDB_E_WRITEREGDB==r1)
Regeditoccursanerror!
r1=CoCreateInstance(OPCclsid,NULL,CLSCTX_LOCAL_SERVER,IID」OPCServer,(void**)&
m_lOPCServer);
if(S_OK!
=r1)
Createserverfailed!
m_IOPCServer=NULL;
//CoUninitialize();
returnfalse;
Disconnect()
if(m」OPCServer)
m」OPCServer->
RemoveGroup(m_GrpSrvHandle,true);
m」OPCItemMgt->
Release();
AddGroup()
LONGTimBias;
FLOATPercDeadband;
DWORDdwLCID;
DWORDRevUpRate;
//out
TimBias=0;
PercDeadband=0.0;
dwLCID=0x409;
r1=m_lOPCServer->
AddGroup(L"
gru1"
TRUE,500,1,&
TimBias,&
PercDeadband,dwLCID,
&
m_GrpSrvHandle,
RevUpRate,IID」OPCItemMgt,(LPUNKNOWN*)&
m_IOPCItemMgt);
if(!
FAILED(r1))
〃AfxMessageBox(_T("
Successfullyaddedgrouptoserver!
returnfalse;
Can'
taddgrouptoserver!
m」OPCItemMgt=NULL;
}returnfalse;
Addltem(DWORDNumitems)
OPCITEMDEF*pItems;
OPCITEMRESULT*pItResult;
HRESULT*pErrors;
DWORDi;
//DWORDNumItems;
//NumItems=31;
pItems=newOPCITEMDEF[Numltems];
NumItems;
pltems[i].szAccessPath=L"
pltems[i].szltemlD=g_szltemlD[i];
pltems[i].bActive=TRUE;
pltems[i].hClient=i+1;
pltems[i].dwBlobSize=0;
pltems[i].pBlob=NULL;
pltems[i].vtRequestedDataType=VT_R4;
r1=m」OPCItemMgt->
Addltems(Numltems,pltems,&
pltResult,&
pErrors);
if(FAILED(r1)&
(r1!
=S_FALSE))
AddItems-failed!
if(m」OPCServer!
m」OPCServer->
delete]]pItems;
〃exit
(1);
for(i=0;
if(FAILED(pErrors[i]))
erorr!
delete[]pItems;
m_pltAttr[i].szltemlD=g_szltemlD[i];
m_pltAttr[i].szAccessPath=pltems[i].szAccessPath;
m_pltAttr[i].hClient=pltems[i].hClient;
m_pltAttr[i].hServer=pltResult[i].hServer;
m_pltAttr[i].dwAccessRights=pltResult[i].dwAccessRights;
m_pltAttr[i].bActive=pltems[i].bActive;
if(pltResult[O].dwAccessRights!
=(OPC_READABLE+OPC_WRITEABLE)){
ltemcan'
twriteandread!
delete[]pltems;
/*r1=m」OPCItemMgt->
Querylnterface(IID」OPCAsyncIO2,(void**)&
m」OPCAsynclO2);
if(r1<
0)
AfxMessageBox("
IOPCAsynCO2发现,错误的查询门;
CoTaskMemFree(m」temResult);
m」OPCItemMgt=NULL;
m_GrpSrvHandle=NULL;
CoUninitialize();
return;
}*/
Write(DWORDNumItems)
m_ltemlD[0]=g_szltemlD[O];
m」temValues[0].vt=VT_R4;
m」temValues[0].fltVal=258.5;
〃要写入的一Item值
m_ItemID[1]=g_szItemID[1];
m」temValues[1].vt=VT_R4;
m」temValues[1].fltVal=345.2;
//要写入的另一Item值
IOPCAsynclO*pAsynclO;
OPCHANDLE*phServer;
HRESULTr1,r2;
BOOLfound=FALSE;
//Numitems=31;
phServer=newOPCHANDLE[Numltems];
phServer[i]=m_pItAttr[i].hServer;
Querylnterface(IID」OPCAsynclO,(void**)&
pAsynclO);
if(FAILED(r1))
IOPCAsynclO-Notsupported!
CoTaskMemFree(pErrors);
delete[]phServer;
//usinglOPCAsynclO:
Write(..),lookatOPCspezifikationr2=pAsyncIO->
Write(0,NumItems,phServer,m_ltemValues,
m_TransactionID,&
if(FAILED(r2)&
(r2==E_FAIL))
Error-Write"
delete]]phServer;
//exit
(1);
}pAsynclO->
//CoTaskMemFree(pltemValue);
floatCOPCComm:
Read(DWORDNumItems)
IOPCSynclO*pSynclO;
CStringtemp;
Querylnterface(IID」OPCSynclO,(void**)&
pSynclO);
〃usinglOPCAsynclO:
Read(..),lookatOPCspezifikation
r2=pSynclO->
Read(OPC_DS_DEVICE,Numitems,phServer,&
bdg,&
Error-Read"
VariantClear(&
bdg[O].vDataValue);
return-999.0;
//赋不可能值
temp.Format(_T("
%.2f"
),bdg[O].vDataValue.fltVal);
retData=bdg[1].vDataValue.fltVal;
pSynclO->
return(float)_ttof(temp);
RemoveGroup()
r1=m」OPCServer->
RemoveGroup(m_GrpSrvHandle,TRUE);
if(SUCCEEDED(r1))
Successfullyremovedgroup!
tremovegroup!
Removltem(DWORDNumItems)
}r1=m」OPCItemMgt->
Removeltems(Numltems,phServer,&
(r1!
Removeltems-failed!
主程序调用:
if(m_OPC.ConnectSrv())
AfxMessageBox(_T本地服务器没连上!
!
return;
if(m_OPC.AddGroup())
AfxMessageBox(_T添加组失败!
if(m_OPC.Addltem((DWORD)31))
AfxMessageBox(_T添加项失败!
}j=0;
16;
i++)
m_OPC.m」temValues[i].vt=VT_R4;
〃m_OPC.m」temValues[i].fltVal=m_PIC.m_Len[i];
j=0;
for(i=16;
i++,j++)
〃m_OPC.m」temValues[i].fltVal=m_PIC.m_Angle[j];
m_OPC.Write((DWORD)31);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- S7200OPCC 读写 PCAccess 服务器