S7200 OPC C++读写PC Access服务器Word下载.docx
- 文档编号:4858732
- 上传时间:2023-05-04
- 格式:DOCX
- 页数:15
- 大小:17.65KB
S7200 OPC C++读写PC Access服务器Word下载.docx
《S7200 OPC C++读写PC Access服务器Word下载.docx》由会员分享,可在线阅读,更多相关《S7200 OPC C++读写PC Access服务器Word下载.docx(15页珍藏版)》请在冰点文库上搜索。
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,real"
2,VD216,real"
2,VD220,real"
};
classCOPCComm
{
public:
COPCComm(void);
~COPCComm(void);
DWORDm_dwAdvise;
OPCITEMDEFm_Items[31];
VARIANTm_ItemValues[31];
LPWSTRm_ItemID[31];
OPCITEMATTRIBUTES*m_pItAttr;
IUnknown*m_pUnknown;
IOPCServer*m_IOPCServer;
IOPCItemMgt*m_IOPCItemMgt;
IOPCSyncIO*m_pOPCSync;
IOPCGroupStateMgt*m_IOPCGroupStateMgt;
IOPCAsyncIO2*m_IOPCAsyncIO2;
OPCITEMRESULT*m_ItemResult;
HRESULT*m_pErrors;
OPCHANDLEm_GrpSrvHandle;
MULTI_QIm_arrMultiQI[6];
DWORDm_TransactionID;
OPCITEMDEF*m_pItems;
OPCITEMSTATE*bdg;
boolConnectSrv(void);
boolDisconnect(void);
boolAddGroup(void);
boolAddItem(DWORDNumItems);
boolWrite(DWORDNumItems);
boolRemoveGroup(void);
boolRemovItem(DWORDNumItems);
floatRead(DWORDNumItems);
源文件:
OPCComm.cpp
OPCComm.h"
COPCComm:
:
COPCComm(void)
inti;
m_pItAttr=newOPCITEMATTRIBUTES[31];
for(i=0;
i<
31;
i++)
{
m_pItAttr[i].szItemID=L"
"
;
m_pItAttr[i].szAccessPath=L"
m_pItAttr[i].hClient=0;
m_pItAttr[i].hServer=0;
m_pItAttr[i].dwAccessRights=-1;
m_pItAttr[i].bActive=FALSE;
}
m_IOPCServer=NULL;
m_IOPCItemMgt=NULL;
}
~COPCComm(void)
if(m_pItAttr!
=NULL)
delete[]m_pItAttr;
boolCOPCComm:
ConnectSrv()
//TODO:
Addyourcontrolnotificationhandlercodehere
CLSIDOPCclsid;
HRESULTr1;
/*
r1=CoInitialize(NULL);
if(r1!
=S_OK)
{
if(r1==S_FALSE)
AfxMessageBox(_T("
COM库已经初始化"
));
returntrue;
}
else
COM库初始化失败"
returntrue;
*/
r1=CLSIDFromProgID(L"
S7200.OPCServer"
&
OPCclsid);
if(S_OK!
=r1)
if(CO_E_CLASSSTRING==r1)
{
AfxMessageBox(_T("
TheProgIDisinvalid!
}
elseif(REGDB_E_WRITEREGDB==r1)
Regeditoccursanerror!
r1=CoCreateInstance(OPCclsid,NULL,CLSCTX_LOCAL_SERVER,IID_IOPCServer,(void**)&
m_IOPCServer);
if(S_OK!
=r1)
AfxMessageBox(_T("
Createserverfailed!
m_IOPCServer=NULL;
//CoUninitialize();
returnfalse;
Disconnect()
if(m_IOPCServer)
m_IOPCServer->
RemoveGroup(m_GrpSrvHandle,true);
m_IOPCItemMgt->
Release();
AddGroup()
LONGTimBias;
FLOATPercDeadband;
DWORDdwLCID;
DWORDRevUpRate;
//out
TimBias=0;
PercDeadband=0.0;
dwLCID=0x409;
r1=m_IOPCServer->
AddGroup(L"
gru1"
TRUE,500,1,&
TimBias,&
PercDeadband,dwLCID,&
m_GrpSrvHandle,
&
RevUpRate,IID_IOPCItemMgt,(LPUNKNOWN*)&
m_IOPCItemMgt);
if(!
FAILED(r1))
//AfxMessageBox(_T("
Successfullyaddedgrouptoserver!
else
Can'
taddgrouptoserver!
returntrue;
AddItem(DWORDNumItems)
OPCITEMDEF*pItems;
OPCITEMRESULT*pItResult;
HRESULT*pErrors;
DWORDi;
//DWORDNumItems;
//NumItems=31;
pItems=newOPCITEMDEF[NumItems];
NumItems;
pItems[i].szAccessPath=L"
pItems[i].szItemID=g_szItemID[i];
pItems[i].bActive=TRUE;
pItems[i].hClient=i+1;
pItems[i].dwBlobSize=0;
pItems[i].pBlob=NULL;
pItems[i].vtRequestedDataType=VT_R4;
r1=m_IOPCItemMgt->
AddItems(NumItems,pItems,&
pItResult,&
pErrors);
if(FAILED(r1)&
(r1!
=S_FALSE))
AfxMessageBox(_T("
AddItems-failed!
if(m_IOPCServer!
m_IOPCServer->
delete[]pItems;
//exit
(1);
for(i=0;
if(FAILED(pErrors[i]))
erorr!
delete[]pItems;
else
m_pItAttr[i].szItemID=g_szItemID[i];
m_pItAttr[i].szAccessPath=pItems[i].szAccessPath;
m_pItAttr[i].hClient=pItems[i].hClient;
m_pItAttr[i].hServer=pItResult[i].hServer;
m_pItAttr[i].dwAccessRights=pItResult[i].dwAccessRights;
m_pItAttr[i].bActive=pItems[i].bActive;
if(pItResult[0].dwAccessRights!
=(OPC_READABLE+OPC_WRITEABLE))
Itemcan'
twriteandread!
/*r1=m_IOPCItemMgt->
QueryInterface(IID_IOPCAsyncIO2,(void**)&
m_IOPCAsyncIO2);
if(r1<
0)
AfxMessageBox("
IOPCAsyncIO2没有发现,错误的查询!
);
CoTaskMemFree(m_ItemResult);
m_IOPCItemMgt->
m_GrpSrvHandle=NULL;
m_IOPCServer->
CoUninitialize();
return;
}*/
delete[]pItems;
Write(DWORDNumItems)
/*
m_ItemID[0]=g_szItemID[0];
m_ItemValues[0].vt=VT_R4;
m_ItemValues[0].fltVal=258.5;
//要写入的一Item值
m_ItemID[1]=g_szItemID[1];
m_ItemValues[1].vt=VT_R4;
m_ItemValues[1].fltVal=345.2;
//要写入的另一Item值
IOPCAsyncIO*pAsyncIO;
OPCHANDLE*phServer;
HRESULTr1,r2;
BOOLfound=FALSE;
phServer=newOPCHANDLE[NumItems];
phServer[i]=m_pItAttr[i].hServer;
QueryInterface(IID_IOPCAsyncIO,(void**)&
pAsyncIO);
if(FAILED(r1))
IOPCAsyncIO-Notsupported!
CoTaskMemFree(pErrors);
delete[]phServer;
//usingIOPCAsyncIO:
Write(..),lookatOPCspezifikation
r2=pAsyncIO->
Write(0,NumItems,phServer,m_ItemValues,
m_TransactionID,&
if(FAILED(r2)&
(r2==E_FAIL))
Error-Write"
delete[]phServer;
//exit
(1);
pAsyncIO->
//CoTaskMemFree(pItemValue);
CoTaskMemFree(pErrors);
delete[]phServer;
floatCOPCComm:
Read(DWORDNumItems)
IOPCSyncIO*pSyncIO;
CStringtemp;
QueryInterface(IID_IOPCSyncIO,(void**)&
pSyncIO);
Read(..),lookatOPCspezifikation
r2=pSyncIO->
Read(OPC_DS_DEVICE,NumItems,phServer,
bdg,&
Error-Read"
VariantClear(&
bdg[0].vDataValue);
CoTaskMemFree(pErrors);
return-999.0;
//赋不可能值
temp.Format(_T("
%.2f"
),bdg[0].vDataValue.fltVal);
retData=bdg[1].vDataValue.fltVal;
VariantClear(&
pSyncIO->
return(float)_ttof(temp);
RemoveGroup()
RemoveGroup(m_GrpSrvHandle,TRUE);
if(SUCCEEDED(r1))
//AfxMessageBox(_T("
Successfullyremovedgroup!
m_GrpSrvHandle=NULL;
m_IOPCItemMgt=NULL;
tremovegroup!
"
RemovItem(DWORDNumItems)
RemoveItems(NumItems,phServer,&
(r1!
RemoveItems-failed!
//exit
(1);
主程序调用:
if(m_OPC.ConnectSrv())
本地服务器没连上!
!
return;
if(m_OPC.AddGroup())
添加组失败!
if(m_OPC.AddItem((DWORD)31))
添加项失败!
j=0;
16;
i++)
m_OPC.m_ItemValues[i].vt=VT_R4;
//m_OPC.m_ItemValues[i].fltVal=m_PIC.m_Len[i];
for(i=16;
i++,j++)
//m_OPC.m_ItemValues[i].fltVal=m_PIC.m_Ang
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- S7200 OPC C+读写PC Access服务器 C+ 读写 PC Access 服务器