当前位置:   article > 正文

基于OPC和TCP/IP的数据采集处理学习_kepserverex6 的progid

kepserverex6 的progid

1.OPC相关资源和学习资料

  • OPC软件

KEPServerEX v6安装包百度网盘链接提取码:tb27 

KEPServerEX v6安装教程

  • OPC相关教程

KEPServer EX6的配置

C#编写OPC客户端读取OPC服务器的数据(最高效简洁版)

KepServer 6.5模拟

C# 读写opc ua服务器,浏览所有节点,读写节点,读历史数据,调用方法,订阅,批量订阅操作

Java OPC client开发踩坑记

  • OPC学习

OPC客户端访问OPC服务器的3步:明确连接哪个OPC服务器,添加需要访问的数据标签,设定处理数据变化的函数。

DLL针对这3个步骤,提供了3个函数:Connect,AddTag和SetDataChangeEvent。

如何使用DLL:

1、在工程的解决方案中“引用”,“浏览”,找到DLL,再引用它。

2、通过DLL提供的类,实例化一个管理器。

3、按照OPC客户端的工作步骤,通过调用这个类提供的对应函数进行OPC操作。

  1. using OPCAutomation;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Net;
  5. namespace ConsoleApp1
  6. {
  7. class Program
  8. {
  9. static void Main(string[] args)
  10. {
  11. OPCServer server = new OPCServer();
  12.             //此处127.0.0.1字符串,为本地IP地址,也可别的电脑IP或者电脑名称;此处测试,就以本地IP测试;
  13.             IPHostEntry host = Dns.GetHostEntry("127.0.0.1");
  14.             //获取此电脑上的所有OPC服务器的ProgId,有了它,才能连接到OPC服务器。注意此处为一组OPC服务器集合,
  15.             //而非单个,具体数量根据实际情况而定,当然,也可以是一个,我只是想说它是一个服务器的集合。
  16.             object progIds = server.GetOPCServers(host.HostName);
  17. foreach (string progId in (Array)progIds)
  18. {
  19. //此处是获得单个progId,方便后面连接。
  20. server.Connect(progId);
  21. }
  22.             //此处为常规设置,group中还有许多参数没有设置,我都采取了它的默认值,我没有特殊要求,所以不用改。
  23.             OPCGroups groups = server.OPCGroups;
  24. OPCGroup group = groups.Add("myGroup");
  25.             //此处必须修改,因为默认订阅功能为false;当然你也可以根据别的方式获取数据。
  26.             group.IsSubscribed = true;
  27. group.DataChange += Group_DataChange;
  28. //此处为设定需要的ItemIds,就是你需要订阅的哪些数据。
  29. List<string> ItemIds = new List<string>(){
  30. "simulator.Test.k0",
  31. "simulator.Test.k0",
  32. };
  33. for (int i = 0; i < ItemIds.Count; i++)
  34. {
  35. OPCItem myItem = group.OPCItems.AddItem(ItemIds[i], i);
  36. }
  37. Console.ReadKey();
  38. }
  39. private static void Group_DataChange(int TransactionID, int NumItems, ref Array ClientHandles, ref Array ItemValues, ref Array Qualities, ref Array TimeStamps)
  40. {
  41.             //此处注意i是从1开始,因为getvalue没有0.下面输出分别为数据的ClientHandles(就是上文AddItem方法的第二个参数。),Itemvalue就是值,Qualities为质量,timestamps为时间。
  42.             for (int i = 1; i < NumItems + 1; i++)
  43. {
  44. Console.WriteLine(ClientHandles.GetValue(i).ToString() + "--" + ItemValues.GetValue(i).ToString() + "--" + Qualities.GetValue(i).ToString() + "--" + TimeStamps.GetValue(i).ToString());
  45. }
  46. }
  47. }
  48. }

2.TCP相关

  • TCP相关教程

C#网络编程

C#编程 socket编程之tcp服务器端和客户端

  • TCP学习

服务器端

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using System.Net;
  7. using System.Net.Sockets;
  8. namespace ConsoleApplication1
  9. {
  10. class Program
  11. {
  12. static void Main(string[] args)
  13. {
  14. //1.创建socket
  15. //使用指定的寻址地址族、套接字类型和协议初始化Socket类的新实例,实现套接字接口
  16. Socket tcpServer = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
  17. //2.绑定ip跟端口号
  18. //用指定为byte数组的地址初始化IPAddress的新实例,提供ip地址
  19. IPAddress ipaddress = new IPAddress(new byte[] { 127, 0, 0, 1 });
  20. //用指定的地址和端口号初始化EndPoint的新实例,对ip+端口做了一层封装构成标识网络地址
  21. EndPoint point = new IPEndPoint(ipaddress, 6666);
  22. //使Socket与本地一个网络地址相连,用来做通信
  23. tcpServer.Bind(point);
  24. //3.利用Listen()方法开始监听(等待客户端连接)
  25. //将socket置于监听状态,挂起连接队列的最大长度是100
  26. tcpServer.Listen(100);
  27. //将指定字符串写入标准输入流
  28. Console.WriteLine("开始监听");
  29. //4.利用Accept()方法尝试与客户端建立一个连接
  30. //如果新的连接建立,Accept()返回,创建新的Socket
  31. Socket clienSocket = tcpServer.Accept();
  32. Console.WriteLine("一个客户端连接过来了");
  33. string msg = "Connected";
  34. //将指定字符串中的字符编码为一个字节序列
  35. byte[] data = Encoding.UTF8.GetBytes(msg);
  36. //5.使用Send()在套接字上写数据
  37. //将数据发送到连接的Socket
  38. clienSocket.Send(data);
  39. Console.WriteLine("向客户端发送了一条数据");
  40. //创建一个字节数组用来当作容器,存储客户端发送过来的数据
  41. byte[] data2 = new byte[1024];
  42. //6.使用Receive()在套接字上读数据
  43. //从绑定的套接字接收数据,存入数据缓冲区
  44. int length = clienSocket.Receive(data2);
  45. //将指定字节数组的一个字节序列解码为一个字符串
  46. string msg2 = Encoding.UTF8.GetString(data2,0,length);
  47. Console.WriteLine("接收到了一个客户端发送过来的消息:" + msg2);
  48. //获取用户按下的下一个字符或功能键
  49. Console.ReadKey();
  50. }
  51. }
  52. }

客户端

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using System.Net;
  7. using System.Net.Sockets;
  8. namespace ConsoleApplication2
  9. {
  10. class Program
  11. {
  12. static void Main(string[] args)
  13. {
  14. //1.创建Socket tcpClient
  15. Socket tcpClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
  16. //2.通过ip和端口号定位一个要连接的服务器端
  17. IPAddress ipaddress = new IPAddress(new byte[] { 127, 0, 0, 1 });
  18. EndPoint point = new IPEndPoint(ipaddress, 6666);
  19. //3.建立与远程主机的联系
  20. tcpClient.Connect(point);
  21. byte[] data = new byte[1024];
  22. int length = tcpClient.Receive(data);
  23. string msg = Encoding.UTF8.GetString(data, 0, length);
  24. Console.WriteLine(msg);
  25. string msg2 = Console.ReadLine();
  26. tcpClient.Send(Encoding.UTF8.GetBytes(msg2));
  27. Console.ReadKey();
  28. }
  29. }
  30. }

 

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号