教你用 C# 读取 WinCC 历史归档数据(支持时间筛选)

25 阅读4分钟

前言

随着工业物联网(IoT)技术的快速发展与系统集成需求的不断提升,越来越多的工程项目要求将传统 SCADA 系统(如西门子 WinCC)的数据与其他信息化平台进行融合。在实际开发过程中,我们常遇到两类典型需求:

1、第三方信息化平台需读取 WinCC 的历史归档数据,用于可视化展示、数据分析或跨系统交互;

2、开发人员希望利用自身熟悉的 .NET 技术栈(如 C#、WPF 或 WinForms),构建比 WinCC 自带报表控件更灵活、功能更强的定制化报表工具。

然而,WinCC 的变量归档数据是以压缩格式存储于其内部数据库中的,普通应用程序无法直接解析。为此,西门子提供了 WinCC / Connectivity Pack 选件,并通过 OLE-DB 接口对外暴露标准化的数据访问能力。本文将详细介绍如何基于该接口,在 .NET 应用程序中实现对 WinCC 归档数据的读取与时间范围筛选。

一、所需工具与环境

硬件:一台运行 Windows 系统的计算机
软件

  • 西门子 WinCC(需安装 Connectivity Pack 选件)

  • Visual Studio 2019 或 Visual Studio 2022

  • .NET Framework(推荐使用 .NET Framework 4.x,实测 .NET 8 存在注册类错误,暂不兼容)

⚠️ 注意:目前仅验证 .NET Framework 框架下可稳定调用 WinCC OLE-DB 接口,.NET Core / .NET 5+ 尚未完全支持。

二、实施步骤

2.1 WinCC 归档数据配置

1、安装 Connectivity Pack

在安装 WinCC 时,务必勾选 “WinCC / Connectivity Pack” 选件,并完成相应授权。

2、定义归档变量

在 WinCC 项目中创建过程值归档(Process Value Archive),并添加需要记录的变量。

3、设置计算机属性并激活运行

确保 WinCC 项目处于 运行状态(Runtime),否则外部程序无法连接归档数据库。

2.2 .NET 应用程序开发(以 WinForms 为例)

1、创建项目

使用 Visual Studio 创建基于 .NET Framework 的 WinForms 应用程序(WPF 同理,但 UI 控件不同)。

2、设计界面

拖入以下控件:

  • DataGridView:用于展示查询结果

  • 两个 DateTimePicker:用于选择时间范围

  • Button:触发查询操作

设置两个 DateTimePicker 的属性如下:

  • 名称:DT_beginDT_end

  • Format:Custom

  • CustomFormatyyyy-MM-dd HH:mm:ss

3、添加引用

  • 引用 WinCC 安装目录下的 CCHMIRuntime.dll(通常位于 C:\Program Files (x86)\Siemens\WinCC\bin

  • 通过 NuGet 安装 System.Data.OleDb

4、编写核心代码

示例代码逻辑:

  • 构建 OLE-DB 连接字符串

  • 使用 WinCC 特定语法构造查询语句

  • 执行查询并将结果绑定到 DataGridView

5、运行效果

点击查询按钮后,归档数据按指定时间范围返回并显示:

三、关键注意事项

1、连接字符串格式

WinCC OLE-DB 连接字符串具有固定结构:

Provider=WinCCOLEDBProvider.1;Catalog=<CatalogName>;Data Source=<ServerName>\WinCC

Catalog:WinCC 运行时数据库名称,由 项目名 + 创建日期 组成。

建议通过 WinCC 系统变量 @DatasourceNameRT 动态获取当前 Catalog 名称,避免硬编码。

Data Source

  • 本地连接:.\WinCC<本机名>\WinCC

  • 远程连接:必须使用 <WinCC服务器名>\WinCC

2、查询语句语法

WinCC 归档查询使用专用语法:

TAG:R,<ValueName>,<TimeBegin>,<TimeEnd>[,<SQL_Clause>][,<TimeStep>]
  • ValueName 格式:ArchiveName/VariableName

  • 时间格式:yyyy-MM-dd HH:mm:ss.fff(毫秒可选)

  • 可附加 SQL 条件(如 WHERE VALUE > 100

3、用户权限要求

运行 .NET 应用程序的当前 Windows 用户,必须在 WinCC 所在计算机的用户管理系统中注册,且:

  • 用户名与密码完全一致

  • 具备 SQL Server 登录权限(WinCC 依赖 SQL Server 存储归档)

否则将出现连接拒绝或权限不足错误。

总结

通过 WinCC 提供的 Connectivity Pack 与 OLE-DB 接口,开发者可以高效地将 WinCC 历史数据集成到自定义的 .NET 应用中。尽管该方案依赖于 .NET Framework 且对部署环境有一定要求,但在工业自动化领域仍具有极高的实用价值。本文详细介绍了从 WinCC 配置、应用程序开发到连接调试的完整流程,并强调了连接字符串、查询语法及权限控制等关键细节。

未来可进一步扩展为:

  • 支持多变量批量查询

  • 集成到 WPF MVVM 架构

  • 实现自动重连与异常处理机制

  • 与 Web API 或云平台对接

关键词

WinCC、OLE-DB、归档数据、.NET Framework、C#、WinForms、WPF、Connectivity Pack、DateTimePicker、DataGridView、工业物联网、SCADA、数据集成、时间筛选、西门子

最后

如果你觉得这篇文章对你有帮助,不妨点个赞支持一下!你的支持是我继续分享知识的动力。如果有任何疑问或需要进一步的帮助,欢迎随时留言。

也可以加入微信公众号 [DotNet技术匠] 社区,与其他热爱技术的同行一起交流心得,共同成长!

优秀是一种习惯,欢迎大家留言学习!

出处:mp.weixin.qq.com/s/iKfp7MWz0l30khay5urHEQ

声明:网络内容,仅供学习,尊重版权,侵权速删,歉意致谢!