您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 销售管理 > S7-200OPCC++读写PCAccess服务器
S7-200OPCC++读写PCAccess服务器操作系统:Windows7旗舰版开发工具:VS2010开发语言:MFC描述:对S7-200的VD100-VD220的31个双字寄存器进行写;头文件:OPCComm.h#pragmaonce#includeStdAfx.hconstLPWSTRg_szItemID[31]={L2,VD100,real,L2,VD104,real,L2,VD108,real,L2,VD112,real,L2,VD116,real,L2,VD120,real,L2,VD124,real,L2,VD128,real,L2,VD132,real,L2,VD136,real,L2,VD140,real,L2,VD144,real,L2,VD148,real,L2,VD152,real,L2,VD156,real,L2,VD160,real,L2,VD164,real,L2,VD168,real,L2,VD172,real,L2,VD176,real,//VD164L2,VD180,real,L2,VD184,real,L2,VD188,real,L2,VD192,real,L2,VD196,real,L2,VD200,real,L2,VD204,real,L2,VD208,real,L2,VD212,real,L2,VD216,real,L2,VD220,real};classCOPCComm{public:COPCComm(void);~COPCComm(void);public: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;public:boolConnectSrv(void);boolDisconnect(void);boolAddGroup(void);boolAddItem(DWORDNumItems);boolWrite(DWORDNumItems);boolRemoveGroup(void);boolRemovItem(DWORDNumItems);floatRead(DWORDNumItems);};源文件:OPCComm.cpp#includeStdAfx.h#includeOPCComm.hCOPCComm::COPCComm(void){inti;m_pItAttr=newOPCITEMATTRIBUTES[31];for(i=0;i31;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::~COPCComm(void){if(m_pItAttr!=NULL){delete[]m_pItAttr;}}boolCOPCComm::ConnectSrv(){//TODO:AddyourcontrolnotificationhandlercodehereCLSIDOPCclsid;HRESULTr1;/*r1=CoInitialize(NULL);if(r1!=S_OK){if(r1==S_FALSE){AfxMessageBox(_T(COM库已经初始化));returntrue;}else{AfxMessageBox(_T(COM库初始化失败));returntrue;;}}*/r1=CLSIDFromProgID(LS7200.OPCServer,&OPCclsid);if(S_OK!=r1){if(CO_E_CLASSSTRING==r1){AfxMessageBox(_T(TheProgIDisinvalid!));returntrue;}elseif(REGDB_E_WRITEREGDB==r1){AfxMessageBox(_T(Regeditoccursanerror!));returntrue;}}r1=CoCreateInstance(OPCclsid,NULL,CLSCTX_LOCAL_SERVER,IID_IOPCServer,(void**)&m_IOPCServer);if(S_OK!=r1){AfxMessageBox(_T(Createserverfailed!));m_IOPCServer=NULL;//CoUninitialize();returntrue;;}returnfalse;}boolCOPCComm::Disconnect(){//TODO:Addyourcontrolnotificationhandlercodehereif(m_IOPCServer){m_IOPCServer-RemoveGroup(m_GrpSrvHandle,true);m_IOPCItemMgt-Release();m_IOPCServer-Release();}returnfalse;}boolCOPCComm::AddGroup(){//TODO:AddyourcontrolnotificationhandlercodehereLONGTimBias;FLOATPercDeadband;DWORDdwLCID;DWORDRevUpRate;//outHRESULTr1;TimBias=0;PercDeadband=0.0;dwLCID=0x409;r1=m_IOPCServer-AddGroup(Lgru1,TRUE,500,1,&TimBias,&PercDeadband,dwLCID,&m_GrpSrvHandle,&RevUpRate,IID_IOPCItemMgt,(LPUNKNOWN*)&m_IOPCItemMgt);if(!FAILED(r1)){//AfxMessageBox(_T(Successfullyaddedgrouptoserver!));returnfalse;}else{AfxMessageBox(_T(Can'taddgrouptoserver!));m_IOPCItemMgt=NULL;returntrue;}returnfalse;}boolCOPCComm::AddItem(DWORDNumItems){//TODO:AddyourcontrolnotificationhandlercodehereOPCITEMDEF*pItems;OPCITEMRESULT*pItResult;HRESULT*pErrors;HRESULTr1;DWORDi;//DWORDNumItems;//NumItems=31;pItems=newOPCITEMDEF[NumItems];for(i=0;iNumItems;i++){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!=NULL){m_IOPCServer-Release();}delete[]pItems;returntrue;//exit(1);}for(i=0;iNumItems;i++){if(FAILED(pErrors[i])){AfxMessageBox(_T(erorr!));delete[]pItems;returntrue;}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)){AfxMessageBox(_T(Itemcan'twriteandread!));delete[]pItems;returntrue;}/*r1=m_IOPCItemMgt-QueryInterface(IID_IOPCAsyncIO2,(void**)&m_IOPCAsyncIO2);if(r10){AfxMessageBox(IOPCAsyncIO2没有发现,错误的查询!);CoTaskMemFree(m_ItemResult);m_IOPCItemMgt-Release();m_IOPCItemMgt=NULL;m_GrpSrvHandle=NULL;m_IOPCServer-Release();m_IOPCServer=NULL;CoUninitialize();return;}*/delete[]pItems;returnfalse;}boolCOPCComm::Write(DWORDNumItems){//TODO:Addyourcontrolnotificationhandlercodehere/*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;HRESULT*pErrors;BOOLfound=FALSE;DWORDi;//NumItems=31;phServer=newOPCHANDLE[NumItems];for(i=0;iNumItems;i++){phServer[i]=m_pItAttr[i].hServer;}r1=m_IOPCItemMgt-QueryInterf
本文标题:S7-200OPCC++读写PCAccess服务器
链接地址:https://www.777doc.com/doc-2856736 .html