ERP与WinCC SQL 数据库进行数据交互

1 Connectivity Pack 概述

1.1 Connectivity Pack介绍

Wincc/conmectivity Pack(连通性软件包,简称连通包)是Wincc一个选件,它的作用是从任意一台计算机(本地/远程)访问WinCC BT系统的过程数据,并且可以分析评估Wincc sq,数据库的归档数据(历史数据、报警数据、用户归档数据)。

连通包选件集成在Wincc基础安装包中,并且有三个安装选项,它们分别是cornectivityPack client、comnectivity Pack server、Conmectivity Pack station。在安装WinCC RT/RC时可以根据需要勾选不同的选项进行安装。

图片[1]-ERP与WinCC SQL 数据库进行数据交互
图1

提示:选择框为灰色时,代表安装条件不满足。

  1. 安装连通性软件包服务器时,必须要先安装WinCc Standard。
  2. 安装Connectivity Station时,会连带安装连通性软件包客户机

连通包的主要功能是提供Wincc 部分OPC驱动、WinCC OLED驱动以及访问归档数据的工具。其它功能还有提供访问归档变量和运行系统数据库的“Archivemonitor”函数,将WinCC OLEDB Provider提供程序用作“链接的服务器”,对归档数据的透明访问等

下图是连通包主要功能的图,其它功能请参考《wince/conmectivity》手册。

图片[2]-ERP与WinCC SQL 数据库进行数据交互
图2

连通包提供OPC驱动授权,当wincc作为客户机或服务器时,所需要的OPC授权不同,区别请参考表格1和表格2:

图片[3]-ERP与WinCC SQL 数据库进行数据交互
表格1
图片[4]-ERP与WinCC SQL 数据库进行数据交互
表格2

WinCC OLEDB Provider for Axchives 是SIEMENS AG基于标准OLE DB开发组件的数据提供程序,可以让各种不同的应用程序访问wincc sql Server的归档数据。而第一方应用程序使用MS OLEDB Provider仅可以访问用户归档和数据库内其它数据表(明文存储)。具体使用请参考1.3章节内容。

1.2 WinCC OLE DB Provider 使用

使用 WinCC OLEDB Provider可直接访问存储在 MS SQL server 数据库中的 wincc 归档数据。也可对这些数据进行透明访问(类似数据库中的分库分表,联合查询),以确保将从两个归档数据库请求的过程数据结合到一起。在应用程序中(如:ERP系统、IT系统)使用,C#可以通过ADO.NET的0LEDB封装的操作对象,结合WinCC OLEDB Provider进行数据访问。

ADO.NET作为标准化高层接口,主要由5个对象组成。主要使用的对象有三个,分别是connection、command、DataReader。

图片[5]-ERP与WinCC SQL 数据库进行数据交互
图3

Connection 对象主要的参数是ConnectionString字符串,ConnectionString包含了WinCC OLEDB Provider连接并访问数据库的所有必要信息。

图片[6]-ERP与WinCC SQL 数据库进行数据交互
表格3

提示: 不管是本地访问,还是远程访问。WinCC服务器名称建议使用<计算机名称>\WinCC。对于访问冗余服务器,服务器名称为<计算机名称>::\WinCC。

Command 对象主要的参数导commandText字符串,commandrext字符串中数据提供程序(WinCC OLEDB Provider)定义的查谁语法组成,发送并对Wincc数据库进行查询,最后将查询结果作为记录集返回。返回的结果集将存在对象类型为DataReader的变量中。

1. 查询过程值归档和返回结果

有2种可用的查询语法结构,一是TAG:R语法结构或、二是TAG_EX:R语法结构。

TAG_EX:R结构可支持查询文本变量、64位IEEE754浮点数,并且兼容TAG_R结构。

对于变量归档查询的数量不能超过20个,每个变量名长度不能超过128个字符。

图片[7]-ERP与WinCC SQL 数据库进行数据交互
表格4

过程值归档查询返回结果如下:

图片[8]-ERP与WinCC SQL 数据库进行数据交互
表格5

2. 查询报警消息归档和返回结果

在查询语法中可以添加筛选条件,从查询到的报警归档数据中选择符合条件的数据。查询返回的结果是按归档汇总,并没有排序。如果需要进行排序,则需要相应地扩展过滤条件0RDER BY。

图片[9]-ERP与WinCC SQL 数据库进行数据交互
表格6

报警归档查询返回结果如下:

图片[10]-ERP与WinCC SQL 数据库进行数据交互
图片[11]-ERP与WinCC SQL 数据库进行数据交互
表格7

3.报警消息和过程值的分析函数

wincc 提供不同的分析函数用于查询已归档的消息和过程值。对于不同的分析函数由带参数的查询语句触发。分析函数的计算在连通包服务器上执行,并且只将结果传送到客户机。

例如,报警消息的分析查询语法:

AlarmHitView: SELECT * FROM <ViewName>[WHERE <Condition>]

其中的ViewName和Condition与报警归档查询语法一样。报警日志的分析查询返回的是一个特定的结果集,结果集包含每个消息的组态和运行系统数据以及聚合函数的结果。

过程值的分析查询与用户归档查询都是通过MS SQL OLEDB Provider完成操作。需要了解的请参考《Wincc/Connectivity》手册

2 应用案例

2.1 需求与选型

珠海某药品公司需要对中药颗粒车间中生产线的包装质检工艺段进行数据管控。颗粒生产线的生产设备是搭配第三方的IES系统,投产后已接入到公司的ERP系统。包装质检工艺段的设备是由多个OEM厂家的设备组合而成,所有运行数据和记录只存放在各自产线的单机WinCC SCADA系统中(简称:wincc站)。

因管控要求需要对各产线的包装质检不良品数据进行采集、整合分析处理。但ERP系统没有接口对接wincc站,而且也不能通过mS SQL OLEDB直接读取wincc sql Server加密后的过程值归档和报警消息归档。

WinCC/connectivity Pack(连通包)选件和WinCC/connectivity station(连通站)选件都可以实现ERP系统与Wincc站对接,但WinCC/connectivity 连通站需要使用Step7 SIMATIC Manager软件进行组态下载配置文件,而且连通站访问的wincc站需要事先通过组态指定,对后续扩展与维护造成不便。所以选用WinCC/connectivity连通包服务器与客户机形式进行远程与ERP对接,每一台Wincc站安装连通包服务器授权,ERP系统或后续扩展的IT系统只安装连通包客户机授权,不需要安装Wincc基本包授权。

2.2 方案实现

图片[12]-ERP与WinCC SQL 数据库进行数据交互
图4

步骤:

  1. 在wincc站(连通包服务器)的创建过程值归档,添加不良品相关的变量,启动归档系统。
  2. ERP系统(连通包客户端)添加Muget标准库ADO.NET OLEDB并封装查询语法。根据U界面填入的不同的条件,触发控件的事件查询WinCC SQL数据库的数据。
  3. 根据查询条件可将读取到的不良品数据进行图表化展示。

2.3 拓扑与配置

图片[13]-ERP与WinCC SQL 数据库进行数据交互
图5

硬件配置

  • 西门子自动化系统(略)
  • DELL工作站台式电脑
  • 研华交换机网络设备

软件配置

  • Windows 10 Professional 64Bit 21H1
  • Wincc Basic RC 8192 v7.5 SP2
  • WinCC/Connectivity Pack V7.5 SP2
  • Microsoft SQL Server 2016
  • Microsoft SQL Server Managment Studio
  • Visual Studio Commumity 2022

3 组态编程

3.1 连通包服务器/WinCC站

一、可以先安装WinCC基本包,然后再安装连通包服务器。也可以同时安装WinCC基本包和连通包服务器。安装WinCC基本包前需要先启动Windows MSMO消息队列服务。

图片[14]-ERP与WinCC SQL 数据库进行数据交互
图6
图片[15]-ERP与WinCC SQL 数据库进行数据交互
图7

二、组态:WinCC变量归档

打开变量记录 >归档 >过程值归档 >右键>新增过程值归档

图片[16]-ERP与WinCC SQL 数据库进行数据交互
图8

本项目中需要进行批次归档,要求批次开始后变量进行周期归档。在归档表中选取需要记录的变量,采集类型组态为“非周期”,起始变量组态为“Record”,“Record”为PLC变量,当“Record”为1时代表批次开始。

图片[17]-ERP与WinCC SQL 数据库进行数据交互
图9

三、启用归档

计算机(右键属性)>属性>启动 >选择变量记录运行系统

图片[18]-ERP与WinCC SQL 数据库进行数据交互
图10
图片[19]-ERP与WinCC SQL 数据库进行数据交互
图11

五、WinCC站归档及显示结果如下:

图片[20]-ERP与WinCC SQL 数据库进行数据交互
图12

3.2 连通包客户机/ERP系统(.NET)

安装连通包客户机和编程环境visual StudioCommumity 2022

图片[21]-ERP与WinCC SQL 数据库进行数据交互
图13

二、客户机要远程访问WinCC服务器,客户机和服务器的本地用户组必须要拥有相同的计算机用户名与密码,而且还要有SIIATIC HMI用户组权限。

图片[22]-ERP与WinCC SQL 数据库进行数据交互
图14

三、并且使用双方(服务器与客户端)的计算机通过对方的计算机名进行Ping连接测试,需要确保互相连接成功。步骤如下:

开始> 运行>C >命令提示符 >输入命令 格式为:Ping<计算机名)

案例中的WinCC服务器计算机名为:WINCCSERVER,客户机计算机名为:RHAG。

客户机Ping连接wincc服务器成功后会返回服务器的计算机名和网络测试信息。

记录服务器的计算机名,作为数据库的连接字符串信息使用。

提示: 因为同一个服务器域内,相同计算机可能有不同的用户登录并使用了数据库。在Ping连接测试时,返回的可能返的是<计算机名>.local1 以区分域内的相同计算机不同用户数据。 必须使用Ping<计算机名称>连接测试,不能使用PingIP地址测试。

图片[23]-ERP与WinCC SQL 数据库进行数据交互
图15
图片[24]-ERP与WinCC SQL 数据库进行数据交互
图16

四、查询Wincc数据库中归档数据库的名称。归档数据库的名称会因Wincc项目迁移到其它计算机或Wincc项目名称的修改而发生变化。在使用wincc vs脚本编程时可以通过系统变量@DataSourceameRr动态获取归档服务器名。当使用第三方编程时,无法使用WinCc的系统变量。此时需要使用一个windows自带的小工具(数据链接)进行获取。

具体操作步骤如下:

4.1、新建一个txt文件文档,将后缀名修改为.udl,保存并打开ud1文件。

图片[25]-ERP与WinCC SQL 数据库进行数据交互
图17

4.2、打开文件后选择:连接>刷新(下拉框获取并列出域内所有服务器名称)>选择wincc站的服务器

4.3、选择使用windows NT集成安全设置

4.4、选择数据库 下拉框获取并列出服务器内所有数据库 >即可查看到wincc站的数据库名称

提示:

1、服务器与客户机用户组配置错误,则无法刷新获取到服务器名称

2、服务器的WinCC项目需要打开,才能获取RT数据库的名称和数据

3、服务器的WinCC项目需要启动,才能获取归档数据库的名称和数据

图片[26]-ERP与WinCC SQL 数据库进行数据交互
图18

五、打开visual studio 2022 IDE编程软件,添加C#.NET 项目,Nuget管理添加OLEDB必要的组件包Data.Oledb。通过Connection对象连接到WinCC数据库。使用WinCC OLE DB 语法拼接查询字符串,通过command对象将查询命令传送给WinCC OLEDB Provider进行数据交互,返回的结果集存放在DataReader对象变量中,再循环遍历出所有返回的结果,最后通过图表显示数据。

具体操作步骤如下:

5.1、打开编程软件,创建WPF新项目。

图片[27]-ERP与WinCC SQL 数据库进行数据交互
图19

5.2、通过Nuget包管理器搜索查找OLEDB并下载添加到项目中

图片[28]-ERP与WinCC SQL 数据库进行数据交互
图20

5.3、在WPF项目中创建新项并编写代码(本案例只演示与WinCC交互的代码)

a、首先添加2个数组集合,一个存放WinCC RT站系统返回的数据集合,一个是存放解析并合并后数据集合。

//依赖对象batchs数据集合
public ObservableCollection<batch> Batchs { get; set; } = new ObservableCollection<batch>();
//普通List数据集合
List<string> RecData= new List<string>();

b、再添加连接字符串和WinCC OLEDB Provider查询命令字符串。Provider由CoectivityPack提供,如果没有安装ConnectivityPackclient,连接数据库时会报错。DataSource与Catalog可以从4.4步骤的udl文件中复制得到。

//创建连接字符串
string connString="Provider=WinCCOLEDBProvider.l;" +
"Data Source=WINCCSERVER.local\\WINCC;" +
"Catalog=CC_Wincc2st_22_05_18_20_34_26R";
//创建查询语句
string sql= "Tag_EX:R,('NGData\\ORSN';'NGData\\DOM';'NGData\\" +
"\\PB';'NGData\\PName';'NGData\\Cause';),"
+""+ _beingTime+"','" + _endTime + "',"+ "'" + _condition + "'";

sql查询语句中的开始时间与结束时间需要填写UT格林尼治时间,即要查询的北京时间减去8个小时。WinCC数据库中TagCompressed表的归档数据的时间戳都是UT时间。

sql查询语句中的VauleID或VauleName可以从数据库中的WinCC RT SQL数据库中的Archive表中找到。

图片[29]-ERP与WinCC SQL 数据库进行数据交互
图21

C、创建一个OleDbconnection 对象并实例化

OleDbConnection conn =new OleDbConnection(connString);

b、创建一个OleDbCommand 对象并实例化

OleDbCommand com=new OleDbCommand(sql, conn);

c、打开数据库连接

conn.0pen();

d、创建ADO结果集记录Command对象查询后返回的结果

OleDbDataReaderreader=com.ExecuteReader();

e、循环遍历提取结果集并解析数据、根据过程值归档查询返回结果(表格5)可知道要取返回结果数组索引[3]的value值。

while (reader.Read())
{
RecData.Add(reader[3].ToString());
}

f、关闭结果集和关闭数据库连接

reader.Close();
conn.Close();

g、将解析后数据映射到自定义的batchs对象列表并显示到UI界面表格中。

for (inti=0;i< RecData.Count/5; i++)
{
  Batchs.Add(new batch {
    Orsn = RecData[i],
    Dom= RecData[i+ RecData.Count /5],
    Pb=RecData[i+ RecData.Count/5 *2],
    PName= RecData[i+ RecData.Count/5 * 3],
    NGCause=RecData[i+ RecData.Count/5 * 4],
  });
}

5.4、通过编程软件自带调试工具,按下F5触发查询并在控制台监控数据。

图片[30]-ERP与WinCC SQL 数据库进行数据交互
图22

修改查询语句过滤条件 WHERE Realvaule, 提取NG原因为3(包装破损的)的数据,并在控制台监控数据。

string sql= “Tag EX:R,(3;4;5;610),2022-05-19 15:08:00.000,2022-05-19 15:16:21.000,WHERE RealVaule = 3”;

图片[31]-ERP与WinCC SQL 数据库进行数据交互
图23

4 运行结果


4.1 WinCC RT站归档数据记录与显示


WinCC站的归档数据,可以看到最近一条的不良品记录的订单序列号为“RHB0286-IL112”,日期为“2022062120”,批次为“236547”,名称为“莲花清瘟颗粒”,重量为“13.23”,包装类型为“1”,包装样式为“6”,wG原因为“1”。下图为Wincc在线表格控件,显示归档历史数据。

图片[32]-ERP与WinCC SQL 数据库进行数据交互
图24

4.2 ERP系统查询WinCC归档数据查询与显示


启动ERP系统,打开UI界面设定开始时间和结束时间,点击<检索按钮>,数据读取成功后,解析并展现在下方的列表中。再对比Wincc在线表格控件中的数据可以看出两个系统的数据是一致的

图片[33]-ERP与WinCC SQL 数据库进行数据交互
图25

4.3 查询异常弹窗


sql查询语句是字符串,语法错误无法在编程时检查出来,但可以通过程序异常捕获将报错的原因提取并显示。

图片[34]-ERP与WinCC SQL 数据库进行数据交互
图26

© 版权声明
THE END
喜欢就支持一下吧
点赞7 分享
评论 抢沙发

    暂无评论内容