前言
随着工业物联网(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_begin、DT_end -
Format:Custom -
CustomFormat:yyyy-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
声明:网络内容,仅供学习,尊重版权,侵权速删,歉意致谢!