S7200 OPC C++读写PC Access服务器Word下载.docx

上传人:b****2 文档编号:4858732 上传时间:2023-05-04 格式:DOCX 页数:15 大小:17.65KB
下载 相关 举报
S7200 OPC C++读写PC Access服务器Word下载.docx_第1页
第1页 / 共15页
S7200 OPC C++读写PC Access服务器Word下载.docx_第2页
第2页 / 共15页
S7200 OPC C++读写PC Access服务器Word下载.docx_第3页
第3页 / 共15页
S7200 OPC C++读写PC Access服务器Word下载.docx_第4页
第4页 / 共15页
S7200 OPC C++读写PC Access服务器Word下载.docx_第5页
第5页 / 共15页
S7200 OPC C++读写PC Access服务器Word下载.docx_第6页
第6页 / 共15页
S7200 OPC C++读写PC Access服务器Word下载.docx_第7页
第7页 / 共15页
S7200 OPC C++读写PC Access服务器Word下载.docx_第8页
第8页 / 共15页
S7200 OPC C++读写PC Access服务器Word下载.docx_第9页
第9页 / 共15页
S7200 OPC C++读写PC Access服务器Word下载.docx_第10页
第10页 / 共15页
S7200 OPC C++读写PC Access服务器Word下载.docx_第11页
第11页 / 共15页
S7200 OPC C++读写PC Access服务器Word下载.docx_第12页
第12页 / 共15页
S7200 OPC C++读写PC Access服务器Word下载.docx_第13页
第13页 / 共15页
S7200 OPC C++读写PC Access服务器Word下载.docx_第14页
第14页 / 共15页
S7200 OPC C++读写PC Access服务器Word下载.docx_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

S7200 OPC C++读写PC Access服务器Word下载.docx

《S7200 OPC C++读写PC Access服务器Word下载.docx》由会员分享,可在线阅读,更多相关《S7200 OPC C++读写PC Access服务器Word下载.docx(15页珍藏版)》请在冰点文库上搜索。

S7200 OPC C++读写PC Access服务器Word下载.docx

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

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2