1、S7200OPCC+读写PCAccess服务器S7-200 OPC C读写 PC AcceS服务器操作系统:Win dows 7旗舰版开发工具:VS2010开发语言:MFC描述:对S7-20C的VD100-VD22的31个双字寄存器进行写;头文件:OPCComm.h#pragma once#i nclude StdAfx.hconst LPWSTR g_szltemlD31 = L2, VD100, real, L2, VD104, real, L2, VD108, real, L2, VD112,real, L2, VD116, real,L2, VD120, real, L2, VD124
2、, 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,
3、VD196, real,L2, VD200, real, L2, VD204, real, L2, VD208, real, L2, VD212,real, L2, VD216, real,L2, VD220, real;class COPCCommpublic:COPCComm(void);COPCComm(void);public:DWORDm_dwAdvise;OPCITEMDEfi_ltems31;VARIANT mtemValues31;LPWSTR m_I temID31;OPCITEMATTRIBUTES *m_pltAttr;IUnknown* m_pU nknown;lOPC
4、Server* mOPCServer;IOPCItemMgt* mOPCItemMgt;IOPCSy nclO* m_pOPCS ync;IOPCGroupStateMgt* mOPCGroupStateMgt;IOPCAs yn cIO2* mO PCAsy nclO2;OPCITEMRESULT* m_ltemResult;HRESULT* m_pErrors;OPCHANDLE m_GrpSrvHa ndle;MULTI_QI m_arrMultiQI6;DWORD m_Tra nsactio nID;OPCITEMDEF* m_pltems;OPCITEMSTATE* bdg;publ
5、ic:bool Conn ectSrv(void);bool Disc onn ect(void);bool AddGroup(void);bool Addltem(DWORD Numitems);bool Write(DWORD Numitems);bool RemoveGroup(void);bool Removitem(DWORD Numitems); float Read(DWORD Numitems);源文件:OPCComm.cpp#i nclude StdAfx.h#i nclude OPCComm.hCOPCComm:COPCComm(void)int i;m_pltAttr =
6、 new 0PCITEMATTRIBUTES31;for(i = 0; i RemoveGroup(m_GrpSrvHa ndle,true);mO PCItemMgt-Release();mO PCServer-Release();return false;bool COPCComm:AddGroup()/ TODO: Add your con trol no tificati on han dler code hereLONG TimBias;FLOAT PercDeadba nd;DWORD dwLCID;DWORD RevUpRate; /outHRESULT r1;TimBias =
7、 0;PercDeadba nd = 0.0;dwLCID = 0x409;r1 = m_lOPCServer-AddGroup(Lgru1, TRUE, 500, 1, &TimBias, &PercDeadband, dwLCID,&m _GrpSrvHa ndle,& RevUpRate, IIDOPCItemMgt, (LPUNKNOWN*)&m_ IOPCItemMgt);if(!FAILED(r1)AfxMessageBox(_T(Successfully added group to server!); return false;elseAfxMessageBox(_T(Ca n
8、t add group to server!); mO PCItemMgt = NULL;return true; return false;bool COPCComm:Addltem(DWORD Numitems)/ TODO: Add your con trol no tificati on han dler code hereOPCITEMDEF* pItems;OPCITEMRESULT* pItResult;HRESULT* pErrors;HRESULT r1;DWORD i;/DWORD NumItems;/NumItems = 31;pItems = new OPCITEMDE
9、FNumltems;for(i = 0; i Addltems(Numltems, pltems, & pltResult, & pErrors);if(FAILED(r1) &(r1 != S_FALSE)AfxMessageBox(_T(AddItems- failed!);if(mOPCServer != NULL)mOPCServer-Release();delete pItems;return true;exit(1);for (i = 0; i Queryl nterface(IIDO PCAs yn cIO2, (void* )&mOPCAsy nclO2);if (r1 Rel
10、ease();mO PCItemMgt = NULL;m_GrpSrvHa ndle = NULL;mO PCServer-Release();m_IOPCServer = NULL;CoU nin itialize();return;*/delete pItems;return false;bool COPCComm:Write(DWORD NumItems)/ TODO: Add your con trol no tificati on han dler code here/*m_l temlD0 = g_szltemlDO;mtemValues0.vt = VT_R4;mtemValue
11、s0.fltVal = 258.5; 要写入的一 Item 值m_I temID1 = g_szItemID1;mtemValues1.vt = VT_R4;mtemValues1.fltVal = 345.2; / 要写入的另一 Item值*/IOPCAsy nclO* pAsy nclO;OPCHANDLE* phServer;HRESULT r1, r2;HRESULT* pErrors;BOOL found = FALSE;DWORD i;/Numitems = 31;phServer = new OPCHANDLENumltems;for(i = 0; i Queryl nterfa
12、ce(IIDO PCAsy nclO, (void *)&pAsy nclO); if(FAILED(r1)AfxMessageBox(_T(IOPCAsy nclO - Not supported !);CoTaskMemFree(pErrors);delete phServer;return true;else/using lOPCAsy nclO:Write(.), look at OPC spezifikation r2 = pAs yn cIO-Write(0, NumItems, phServer, m_ltemValues,&m_Tran sactio nID, & pError
13、s);if(FAILED(r2) & (r2 = E_FAIL)AfxMessageBox(_T(Error - Write);delete phServer;return true;/exit(1); pAs yn clO-Release();/CoTaskMemFree(pltemValue);CoTaskMemFree(pErrors);delete phServer;return false;float COPCComm:Read(DWORD NumItems)/ TODO: Add your con trol no tificati on han dler code hereIOPC
14、Sy nclO* pSy nclO;OPCHANDLE* phServer;HRESULT r1, r2;HRESULT* pErrors;BOOL found = FALSE;DWORD i;CStri ng temp;/Numitems = 31;phServer = new OPCHANDLENumltems;for(i = 0; i Queryl nterface(IIDO PCSy nclO, (void *)&pSy nclO); if(FAILED(r1)AfxMessageBox(_T(IOPCAsy nclO - Not supported !);delete phServe
15、r;return true;elseusing lOPCAsynclO:Read(.), look at OPC spezifikationr2 = pSy nclO-Read(OPC_DS_DEVICE, Numitems, phServer, &bdg, & pErrors);if(FAILED(r2) & (r2 = E_FAIL)AfxMessageBox(_T(Error - Read);Varia ntClear (&bdgO.vDataValue);CoTaskMemFree(pErrors);delete phServer;return -999.0;/赋不可能值exit(1)
16、;temp.Format(_T(%.2f), bdgO.vDataValue.fltVal);retData = bdg1.vDataValue.fltVal;Varia ntClear (&bdgO.vDataValue);pSy nclO-Release();CoTaskMemFree(pErrors);delete phServer;return (float)_ttof(temp);bool COPCComm:RemoveGroup()/ TODO: Add your con trol no tificati on han dler code hereHRESULT r1;r1 = m
17、OPCServer-RemoveGroup(m_GrpSrvHa ndle, TRUE);if(SUCCEEDED(r1)AfxMessageBox(_T(Successfully removed group !);m_GrpSrvHa ndle = NULL;mO PCItemMgt-Release();mO PCItemMgt = NULL;elseAfxMessageBox(_T(Ca nt remove group !);return true;return false;bool COPCComm:Removltem(DWORD NumItems)/ TODO: Add your co
18、n trol no tificati on han dler code hereHRESULT r1;HRESULT* pErrors;OPCHANDLE* phServer;DWORD i;phServer = new OPCHANDLENumltems;for(i = 0; i Removeltems(Numltems, phServer, & pErrors);if(FAILED(r1) & (r1 != S_FALSE)AfxMessageBox(_T(Removeltems - failed!);delete phServer;return true;exit(1);delete p
19、hServer;return false;主程序调用:if(m_OPC.Co nn ectSrv()AfxMessageBox(_T本地服务器没连上!); return;if(m_OPC.AddGroup()AfxMessageBox(_T添加组失败!);return;if(m_OPC.Addltem(DWORD)31)AfxMessageBox(_T添加 项失败!); return; j = 0;for(i = 0; i 16; i +)m_OPC.mtemValuesi.vt = VT_R4;m_OPC.mtemValuesi.fltVal = m_PIC.m_Le ni;j = 0;for(i = 16; i 31; i +, j +)m_OPC.mtemValuesi.vt = VT_R4;m_OPC.mtemValuesi.fltVal = m_PIC.m_A nglej;m_OPC.Write(DWORD)31);
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1