OPC添加组和添加项--------OPC(第六篇)
来源:互联网 发布:怎么锻炼丁丁变粗 知乎 编辑:程序博客网 时间:2024/06/05 05:31
上一篇讲到了OPC客户端已经成功连接了OPC服务器,下面就开始整理OPC开发的核心部分——组和项的管理。
不多说了,直接上代码,首先是IUnkown接口获取:
- /*获取OPC服务器IUnknow接口指针*/
- pIUnknown = (IUnknown*)mqi[0].pItf; //得到第三个指针
- ASSERT(pIUnknown);
- LONG lTimeBias = 0;
- FLOAT fTemp = 0.00;
- OPCHANDLE hOPCServer1; //第一个OPC SERVER句柄
- DWORD dwActualRate = 0;
- hr = pIUnknown->QueryInterface(IID_IOPCServer,/*OUT*/(void**)&pIServer); //得到第四个指针
- ASSERT(pIServer);
- if (FAILED(hr)){
- cout << "未能获取IOPCServer接口..." << endl;
- CoTaskMemFree(&hOPCServer1);
- CoTaskMemFree(&clsid); //第四个内存释放
- CoTaskMemFree(&catID); //第三个内存释放
- CoTaskMemFree(&mqi); //第二个内存释放
- CoTaskMemFree(&si); //第一个内存释放
- if (pIServer) pIServer->Release(); //第四个内存释放
- pIServer = NULL;
- if (pIUnknown) pIUnknown->Release(); //第三个内存释放
- pIUnknown = NULL;
- if (pIEnumGUID) pIEnumGUID->Release(); //第二个指针释放
- pIEnumGUID = NULL;
- if (pIServerList) pIServerList->Release(); //第一个指针释放
- pIServerList = NULL;
- return 1;
- }
- else if (SUCCEEDED(hr))
- {
- cout << "已获取IOPCServer接口" << endl;
- }
- hr = pIServer->AddGroup(L"Group", TRUE, 10, 1235, &lTimeBias, &fTemp, 0, /*OUT*/ &hOPCServer1,
- &dwActualRate, IID_IOPCItemMgt, /*OUT*/ (LPUNKNOWN*)&pIOPCItemMgt); //得到第五个指针
- ASSERT(pIOPCItemMgt);
- ASSERT(hOPCServer1);
- if (FAILED(hr)) {
- cout << "未能添加组..." << endl;
- CoTaskMemFree(&clsid); //第四个内存释放
- CoTaskMemFree(&catID); //第三个内存释放
- CoTaskMemFree(&mqi); //第二个内存释放
- CoTaskMemFree(&si); //第一个内存释放
- if (pIOPCItemMgt) pIOPCItemMgt->Release(); //第五个指针释放
- pIOPCItemMgt = NULL;
- if (pIServer) pIServer->Release(); //第四个指针释放
- pIServer = NULL;
- if (pIUnknown) pIUnknown->Release(); //第三个指针释放
- pIUnknown = NULL;
- if (pIEnumGUID) pIEnumGUID->Release(); //第二个指针释放
- pIEnumGUID = NULL;
- if (pIServerList) pIServerList->Release(); //第一个指针释放
- pIServerList = NULL;
- return 1;
- }
- else if (SUCCEEDED(hr)) {
- cout << "已添加组..." << endl;
- }
- itemArray = (OPCITEMDEF*)CoTaskMemAlloc(sizeof(OPCITEMDEF)); //第五个内存 指向存放数据项
- CString str = "xxxxxx";
- BSTR bstr = str.AllocSysString();
- itemArray[0].szAccessPath = L"";
- itemArray[0].szItemID = bstr;
- itemArray[0].bActive = true; // active state
- itemArray[0].hClient = (OPCHANDLE)0; // our handle to item
- itemArray[0].dwBlobSize = 0; // no blob support
- itemArray[0].pBlob = NULL;
- itemArray[0].vtRequestedDataType = VT_R4;
- itemArray[0].wReserved = 0;
- <pre name="code" class="cpp">hOPCServer2 = (OPCHANDLE*)CoTaskMemAlloc(119 * sizeof(OPCHANDLE));
0 0
- OPC添加组和添加项--------OPC(第六篇)
- OPC工作记录整理——第五篇(添加组和添加项)
- OPC同步读取和异步读取-------OPC(第七篇)
- OPC客户端开发之OPC服务器的枚举和连接------OPC(第五篇)
- OPC实现方式-----OPC(第二篇)
- OPC数据订阅-------OPC(第八篇)
- OPC
- OPC
- opc
- OPC
- opc
- OPC
- opc
- OPC工作记录整理——第六篇(同步读取和异步读取)
- OPC工作记录整理——第四篇(OPC客户端开发之OPC服务器的枚举和连接)
- OPC客户端运行环境配置-----OPC(第三篇)
- OPC开发环境的配置------OPC(第四篇)
- iHistorian OPC Collector - 测点的添加过程分析
- 大数据分析之聚类算法
- Lightoj1216——Juice in the Glass (计算几何)
- crontab执行后邮件发到指定邮箱
- cocoa 框架参考
- Sys和system用户的区别,as normal、sysdba 和sysoper系统权限区别
- OPC添加组和添加项--------OPC(第六篇)
- Uboot常用命令小结Booting the Kernel (with mmcblk/SD card rootfs)
- 阿里云定时备份mysql
- spring—使用注解配置Bean
- connect、resource和dba三种标准角色
- FormsAuthentication.SignOut(); FormsAuthentication.SetAuthCookie(u.UserName, false);
- web前端面试总结(一)
- Inside SQLite Chapter 1.概览
- 设计模式之设计模式及设计原则