news 2026/6/2 7:26:43

工业数据读取与交互:C# 的奇妙之旅

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
工业数据读取与交互:C# 的奇妙之旅

C#读取组态王数据,DCS数据读取Wincc数据,读取数据库库数据,也可平台互相通讯交互,并支持读取其他PLC仪表数据给到SACADA系统。

在工业自动化领域,数据的读取与交互至关重要。今天咱们就聊聊如何用 C# 实现从组态王、DCS(通过 Wincc 读取)、数据库以及 PLC 仪表等多种数据源读取数据,并将其传递给 SACADA 系统。

一、C# 读取组态王数据

组态王是一款常见的工业自动化软件。要从组态王读取数据,首先得了解它提供的接口。通常可以通过 OPC(OLE for Process Control)协议来实现。

在 C# 中,我们可以借助一些第三方库,比如Kepware.KEPServerEX.V6来操作 OPC。假设我们已经安装并配置好了相关的 OPC 服务器与客户端环境,以下是一段简单的示例代码:

using System; using Kepware.KEPServerEX.V6; class ReadKingviewData { static void Main() { // 创建 OPC 服务器对象 OPCServer server = new OPCServer(); // 连接到 OPC 服务器 server.Connect("Kepware.KEPServerEX.V6"); // 获取 OPC 组对象 OPCGroups groups = server.OPCGroups; OPCGroup group = groups.Add("MyGroup"); // 设置更新速率等属性 group.UpdateRate = 1000; group.IsActive = true; // 获取 OPC 项对象 OPCItems items = group.OPCItems; OPCItem item = items.AddItem("KingviewTagName", 1); // 读取数据 object value; item.Read(out value); Console.WriteLine($"从组态王读取到的数据: {value}"); // 释放资源 item.Remove(); group.Remove(); server.Disconnect(); } }

代码分析:

  1. 首先引入Kepware.KEPServerEX.V6命名空间,这是与 OPC 服务器交互的关键。
  2. 创建OPCServer对象并连接到指定的 OPC 服务器,这里是"Kepware.KEPServerEX.V6",不同环境可能不同。
  3. 创建并配置OPCGroup,设置更新速率和激活状态,这决定了数据获取的频率和是否生效。
  4. 添加OPCItem,这里的"KingviewTagName"是组态王中定义的标签名,要根据实际情况修改。
  5. 调用Read方法读取数据,并输出到控制台。最后释放相关资源,确保程序优雅结束。

二、DCS 数据读取 Wincc 数据

Wincc 也是工业界常用的监控软件,很多 DCS 系统会与之集成。同样可以利用 OPC 来读取 Wincc 数据,C# 代码结构与读取组态王数据类似。

using System; using Kepware.KEPServerEX.V6; class ReadWinccDataFromDCS { static void Main() { OPCServer server = new OPCServer(); server.Connect("WinccOPCServer"); OPCGroups groups = server.OPCGroups; OPCGroup group = groups.Add("WinccGroup"); group.UpdateRate = 1000; group.IsActive = true; OPCItems items = group.OPCItems; OPCItem item = items.AddItem("WinccTagName", 1); object value; item.Read(out value); Console.WriteLine($"从 Wincc(DCS 相关)读取到的数据: {value}"); item.Remove(); group.Remove(); server.Disconnect(); } }

这里主要区别在于连接的 OPC 服务器名称"WinccOPCServer"以及标签名"WinccTagName",要依据实际的 Wincc 配置来。

三、读取数据库数据

读取数据库数据是编程中常见的操作,以 SQL Server 为例,在 C# 中可以使用System.Data.SqlClient命名空间。

using System; using System.Data.SqlClient; class ReadDatabaseData { static void Main() { string connectionString = "Data Source=YOUR_SERVER_NAME;Initial Catalog=YOUR_DATABASE_NAME;User ID=YOUR_USERNAME;Password=YOUR_PASSWORD"; using (SqlConnection connection = new SqlConnection(connectionString)) { string query = "SELECT ColumnName FROM YourTableName"; SqlCommand command = new SqlCommand(query, connection); connection.Open(); SqlDataReader reader = command.ExecuteReader(); while (reader.Read()) { Console.WriteLine(reader.GetString(0)); } reader.Close(); } } }

代码分析:

  1. 定义连接字符串,包含服务器名称、数据库名称、用户名和密码,需要根据实际数据库信息修改。
  2. 使用SqlConnection建立数据库连接,并在using块中确保连接使用完毕后正确释放。
  3. 定义 SQL 查询语句,这里简单查询表中的某一列。
  4. 创建SqlCommand对象执行查询,打开连接后通过ExecuteReader获取数据读取器。
  5. 使用SqlDataReader逐行读取数据并输出。

四、平台互相通讯交互及读取 PLC 仪表数据给到 SACADA 系统

要实现平台间的通讯交互以及将 PLC 仪表数据传递给 SACADA 系统,可以借助消息队列、Web 服务等技术。以 Web 服务为例,假设 SACADA 系统提供了接收数据的 Web API。

using System; using System.Net.Http; using System.Threading.Tasks; class SendPLCDataToSACADA { static async Task Main() { // 模拟从 PLC 仪表读取到的数据 string plcData = "SomePLCValue"; using (HttpClient client = new HttpClient()) { var content = new StringContent(plcData, System.Text.Encoding.UTF8, "application/json"); HttpResponseMessage response = await client.PostAsync("http://SACADA_System_API_Url", content); if (response.IsSuccessStatusCode) { Console.WriteLine("数据成功发送到 SACADA 系统"); } else { Console.WriteLine($"发送失败,状态码: {response.StatusCode}"); } } } }

代码分析:

  1. 这里先模拟从 PLC 仪表读取到的数据plcData,实际应用中需要通过相应的 PLC 通讯协议读取,比如 Modbus 等。
  2. 使用HttpClient来发送 HTTP 请求,创建StringContent将数据以 JSON 格式封装。
  3. 调用PostAsync方法向 SACADA 系统的 API 发送数据,并根据返回的状态码判断是否发送成功。

通过以上这些方法,我们就可以利用 C# 在工业自动化场景中实现多种数据源的数据读取以及与其他系统的交互通讯啦!希望这篇文章对你有所帮助。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/30 19:29:18

网络协议:软件测试工程师的基石工具

一、TCP/IP协议栈:数据传输的骨架与测试着力点 测试价值透视: 统计显示,70%的接口性能瓶颈源于传输层配置不当。测试工程师需掌握协议栈四层模型: 应用层(HTTP/FTP) → 传输层(TCP/UDP) → 网络层(IP) → 链路层(Ethernet) 关键测…

作者头像 李华
网站建设 2026/5/30 22:18:20

YOLO目标检测API上线,开发者可快速接入

YOLO目标检测API上线,开发者可快速接入 在智能制造车间的监控大屏前,工程师正为一条高速运转的装配线调试视觉质检系统。每分钟数百个零件流过检测工位,传统图像处理算法频频漏检微小缺陷,而自研深度学习模型又迟迟无法稳定部署。…

作者头像 李华
网站建设 2026/5/21 5:47:14

新手必看Keil5打开工程中文显示异常问题

Keil5中文注释乱码?一文彻底解决,新手也能秒懂!你有没有遇到过这种情况:辛辛苦苦写了一堆中文注释,结果在Keil5里打开一看——满屏的“口口口”、“”或者方块字?明明代码逻辑没问题,可读性却直…

作者头像 李华
网站建设 2026/5/2 17:51:01

YOLO目标检测服务支持审计日志导出

YOLO目标检测服务支持审计日志导出 在智能制造车间的边缘服务器上,一个YOLO模型正以每秒200帧的速度分析产线视频流。突然,系统告警:某时段检测准确率异常下降5%。运维人员并未重启服务,而是打开后台控制台,点击“导出…

作者头像 李华