news 2026/5/29 3:50:58

工业数据读取与交互: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/28 13:07:03

dmcmnutils.dll损坏丢失找不到 打不开程序问题 下载方法

在使用电脑系统时经常会出现丢失找不到某些文件的情况,由于很多常用软件都是采用 Microsoft Visual Studio 编写的,所以这类软件的运行需要依赖微软Visual C运行库,比如像 QQ、迅雷、Adobe 软件等等,如果没有安装VC运行库或者安装…

作者头像 李华
网站建设 2026/5/28 23:26:31

【Java毕设全套源码+文档】基于springboot的某炼油厂盲板管理系统设计与实现(丰富项目+远程调试+讲解+定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2026/5/29 1:43:23

YOLO模型镜像支持NVIDIA Triton推理服务器集成

YOLO模型镜像支持NVIDIA Triton推理服务器集成 在智能制造工厂的视觉质检线上,一台GPU服务器正同时处理来自20个高清摄像头的实时视频流——每秒上百帧图像被精准识别出微米级划痕与装配偏差,而系统平均响应延迟却不到30毫秒。这种看似矛盾的高性能表现&…

作者头像 李华
网站建设 2026/5/28 21:37:05

YOLO目标检测镜像已通过三级等保测评

YOLO目标检测镜像通过三级等保测评的技术实践与工程启示 在智能制造、智慧安防和自动驾驶快速发展的今天,AI模型早已不再是实验室里的“技术玩具”,而是需要真正扛起生产责任的工业级组件。一个模型能否上线,不再只看它的mAP或FPS&#xff0…

作者头像 李华
网站建设 2026/5/28 13:07:08

ffmpeg命令之查看音频参数

您可以使用PowerShell或直接使用ffprobe命令。以下是几种方法: 方法1:使用PowerShell(推荐) ffprobe -show_streams 1.mp4 | Select-String "codec_name|sample_rate|channels|profile"方法2:使用findstr(Windows命令行) ffprobe -show_streams 1.mp4 | fi…

作者头像 李华
网站建设 2026/5/25 21:08:19

ArduPilot入门配置核心要点解析

ArduPilot入门配置:从零到飞的实战指南 你是不是也曾在深夜对着一块Pixhawk发呆,看着Mission Planner里密密麻麻的参数无从下手? 刷完固件、接上USB,却发现“未连接”三个字像幽灵一样挥之不去; 遥控器推满油门&…

作者头像 李华