博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
WTclient创建OPC client方法
阅读量:4886 次
发布时间:2019-06-11

本文共 5081 字,大约阅读时间需要 16 分钟。

1.按照上一篇日志“  ”的方法安装动态链接库及相关的注册工作。

2.包含头文件:

  opcda.h

  opc_ae.h

  WTclientAPI.h

3.添加库文件:

  WTclient.lib (要被加入解决方案)

  WTclient.dll

4.初始化方法:

  WTclientCoInit();

  CoUninitialize();

5.查询所有的OPC server:

1   //得到OPC server个数 2     int serverNumber = NumberOfOPCServers(TRUE, ""); 3  4     //得到所有OPC server的名字 5     char buf[100]; 6     CString serverName; 7     for(int i=0; i < serverNumber; i++) 8     { 9         GetOPCServerName (i, buf, 100);10         serverName = buf;11         MessageBox(0, serverName, 0);12     }

6.建立OPC连接:

ConnectionHandle = ConnectOPC ("", serverName, FALSE);

7.断开OPC连接:

DisconnectOPC(ConnectionHandle);

ConnectionHandle = INVALID_HANDLE_VALUE;

8.添加组:

1 CString groupName = "groupName"; 2     DWORD Rate = 100; 3     float DeadBand = 100; 4     HANDLE    hGroup = AddOPCGroup (ConnectionHandle, groupName, &Rate, &DeadBand); 5  6     if (hGroup == INVALID_HANDLE_VALUE) 7     { 8         MessageBox("Error in adding group.", "警告", 0); 9         return;10     }

9.删除组:

void  RemoveOPCGroup (HANDLE hConnect, HANDLE hGroup);

10.添加项目:

CString itemName = "itemName";

HANDLE itemHandle = AddOPCItem(ConnectionHandle, hGroup, itemName);

11.移除项目:

void  RemoveOPCItem (HANDLE hConnect, HANDLE hGroup, HANDLE hItem);

12.读取项目:

//读取项目

VARIANT *pVar = new VARIANT;
FILETIME *pTimeStamp = new FILETIME;
DWORD *pQuality = new DWORD;
ReadOPCItem (ConnectionHandle, hGroup, itemHandle, pVar, pTimeStamp, pQuality);

13.写入项目

VARIANT newVar;

newVar.dblVal = 3.141592;

WriteOPCItem (ConnectionHandle, hGroup, itemHandle, &newVar, 1);

 

我的完整示例:

1 //初始化  2     WTclientCoInit();  3   4     //得到OPC server个数  5     int serverNumber = NumberOfOPCServers(TRUE, "");  6   7     //得到所有OPC server的名字  8     char buf[100];  9     CString serverName; 10     vector
serverNames; 11 12 for(int i=0; i < serverNumber; i++) 13 { 14 GetOPCServerName (i, buf, 100); 15 serverName = buf; 16 serverNames.push_back(serverName); 17 } 18 19 if(serverNumber == 0) 20 { 21 MessageBox("没有可用的OPC服务器", "警告", 0); 22 return ; 23 } 24 25 //建立OPC连接 26 ConnectionHandle = ConnectOPC ("", serverNames[0], TRUE); 27 28 if (ConnectionHandle == INVALID_HANDLE_VALUE) 29 { 30 MessageBox("Error in connecting.", "警告", 0); 31 return; 32 } 33 34 //得到项目个数 35 int itemNum = NumberOfOPCItems(ConnectionHandle); 36 37 //得到所有项目名称 38 char itemBuf[128]; 39 CString iName; 40 vector
itemNames; 41 for(int index = 0; index < itemNum; index++) 42 { 43 if(GetOPCItemName (ConnectionHandle, index, itemBuf, 128)) 44 { 45 iName = itemBuf; 46 itemNames.push_back(iName); 47 } 48 else 49 { 50 MessageBox("读取item名失败", "警告", 0); 51 return ; 52 } 53 54 } 55 56 //得到所有项目属性 57 for(vector
::iterator iter = itemNames.begin(); iter != itemNames.end(); ++iter) 58 { 59 //得到当前项目的属性个数 60 int propNum = NumberOfItemProperties(ConnectionHandle, *iter); 61 62 for(int i = 0; i < propNum; i++) 63 { 64 //得到属性特征 65 DWORD propertyID = 0; 66 VARTYPE vt; 67 BYTE describtion[1024]; 68 GetItemPropertyDescription (ConnectionHandle, i, &propertyID, &vt, describtion, 1024); 69 70 //读取当前属性值 71 VARIANT value; 72 ReadPropertyValue (ConnectionHandle, *iter, propertyID, &value); 73 } 74 } 75 76 //添加组 77 CString groupName = "groupName"; 78 DWORD Rate = 1; 79 float DeadBand = 1; 80 HANDLE hGroup = AddOPCGroup (ConnectionHandle, groupName, &Rate, &DeadBand); 81 82 if (hGroup == INVALID_HANDLE_VALUE) 83 { 84 MessageBox("Error in adding group.", "警告", 0); 85 return; 86 } 87 88 //添加项目 89 CString itemName = "Bucket Brigade.Boolean"; 90 HANDLE itemHandle = AddOPCItem(ConnectionHandle, hGroup, itemName); 91 92 if (itemHandle == INVALID_HANDLE_VALUE) 93 { 94 MessageBox("该项不存在.", "警告", 0); 95 return; 96 } 97 98 //得到项目类型 99 VARTYPE type;100 DWORD AccessRights;101 GetOPCItemType(ConnectionHandle, hGroup, "Bucket Brigade.Boolean", &type, &AccessRights);102 103 104 105 //读取项目106 VARIANT *pVar = new VARIANT;107 FILETIME *pTimeStamp = new FILETIME;108 DWORD *pQuality = new DWORD;109 if( !ReadOPCItem (ConnectionHandle, hGroup, itemHandle, pVar, pTimeStamp, pQuality))110 {111 MessageBox("读取失败.", "警告", 0);112 return ;113 }114 115 116 //写入项目117 VARIANT newVar;118 newVar.vt = 4;119 newVar.fltVal = 3.14;120 if(!WriteOPCItem (ConnectionHandle, hGroup, itemHandle, &newVar, 1))121 {122 MessageBox("写入失败.", "警告", 0);123 return ;124 }125 126 127 //读取项目128 ReadOPCItem (ConnectionHandle, hGroup, itemHandle, pVar, pTimeStamp, pQuality);

转载于:https://www.cnblogs.com/johnpher/archive/2012/10/12/2721014.html

你可能感兴趣的文章
最干净的pyinstaller打包成exe应用程序方法
查看>>
Python中的数据类型
查看>>
讲给普通人听的分布式数据存储【转载】
查看>>
vs2008 C# 怎么调试C++ dll[转]
查看>>
PHP的魔术方法
查看>>
警惕麦咖啡的"缓冲区溢出保护"引起的ASP.NET 中 System.OutOfMemoryException 的错误...
查看>>
optimizer_dynamic_sampling
查看>>
HTML(WEB)开发day05
查看>>
序列合并求前K小项 POJ2442
查看>>
unity点选构建Mesh并保存OBJ
查看>>
python kmeans实战 - 单机一层聚类(小玩具哦),下次再弄个分布式多次聚类
查看>>
Java主要有那几种文件类型?各自的作用是什么?
查看>>
我的第一个python web开发框架(29)——定制ORM(五)
查看>>
2017.11.18 手把手教你学51单片机-点亮LED
查看>>
xml的创建与解析
查看>>
grep不区分大小写查找字符串方法
查看>>
linux系统灵活运用灯[android课程3]
查看>>
Android 通用Dialog中设置RecyclerView
查看>>
利用 Android Studio 和 Gradle 打包多版本APK
查看>>
Android 自定义标题栏
查看>>