WinCC和EXCEL数据传递

合集下载

如何在Excel中访问WinCC变量归档数据

如何在Excel中访问WinCC变量归档数据

1 功能说明在Microsoft office Excel中访问WinCC的历史数据,实现如下图所示的报表:图1: Excel中访问WinCC的历史数据生成报表选择日期后,可以生成当天的风机参数日报表(报表数据来自WinCC)。

2 软件环境本地计算机:Windows XP SP3英文版、WinCC7.0 SP2 ASIA、Microsoft office Excel 2003 远程计算机:Windows XP SP3英文版、WinCC7.0 SP2 ASIA、Microsoft office Excel 20033 WinCC/Connectivity Pack 介绍WinCC变量归档数据是以压缩的形式存储在数据库中,需要通过WinCC/Connectivity Pack提供的OLE-DB接口才能够解压并读取这些数据。

3.1 连接字符串“Provider=WinCCOLEDBProvider.1; Catalog= ***; Data Source= ***;“其中:Catalog:WinCC运行数据库的名称注意:当修改项目名称或在其它计算机上打开原项目时, Catalog会发生变化。

建议使用WinCC系统变量“@DatasourceNameRT” 获得当前的Catalog。

Data Source :服务器名称本地:“.\WinCC” 或者“<计算机名称>\WinCC”远程:“<计算机名称>\WinCC”3.2 查询语句“TAG:R,<ValueID or ValueName>,<TimeBegin>,<TimeEnd>[,<SQL_clause>][,<TimeStep>]”其中:ValueName:格式为“ArchiveName\Value_Name”,可以使用多个名称。

TimeBegin,TimeEnd:时间范围,格式“YYYY-MM-DD hh:mm:ss.msc”。

在Excel中访问WinCC变量归档数据

在Excel中访问WinCC变量归档数据

如何在Excel中访问WinCC变量归档数据————————————————————————————————作者:————————————————————————————————日期:1 功能说明在Microsoft office Excel中访问WinCC的历史数据,实现如下图所示的报表:图1: Excel中访问WinCC的历史数据生成报表选择日期后,可以生成当天的风机参数日报表(报表数据来自WinCC)。

2 软件环境本地计算机:Windows XP SP3英文版、WinCC7.0 SP2 ASIA、Microsoft office Excel 2003 远程计算机:Windows XP SP3英文版、WinCC7.0 SP2 ASIA、Microsoft office Excel 20033 WinCC/Connectivity Pack 介绍WinCC变量归档数据是以压缩的形式存储在数据库中,需要通过WinCC/Connectivity Pack提供的OLE-DB接口才能够解压并读取这些数据。

3.1 连接字符串“Provider=WinCCOLEDBProvider.1; Catalog= ***; Data Source= ***;“其中:Catalog:WinCC运行数据库的名称注意:当修改项目名称或在其它计算机上打开原项目时, Catalog会发生变化。

建议使用WinCC系统变量“@DatasourceNameRT” 获得当前的Catalog。

Data Source :服务器名称本地:“.\WinCC” 或者“<计算机名称>\WinCC”远程:“<计算机名称>\WinCC”3.2 查询语句“TAG:R,<ValueID or ValueName>,<TimeBegin>,<TimeEnd>[,<SQL_clause>][,<TimeStep>]”其中:ValueName:格式为“ArchiveName\V alue_Name”,可以使用多个名称。

如何使用Excel通过OPC访问WinCC的实时数据

如何使用Excel通过OPC访问WinCC的实时数据

OPC(OLE for process control)作为标准软件接口,可以使各个生产商的设备和应用程序就能以统一的方式连接起来。

WinCC 既可以用作OPC 服务器提供数据,又可以作为OPC 客户机访问其他OPC 服务器中的数据。

WinCC集成的OPC服务器使得过程数据可由其它应用程序(OPC 客户机)访问。

在Excel中可以通过VBA脚本建立OPC 客户端,并通过OPC接口读取WinCC 中的数据,并将修改的数据写入WinCC。

1 OPC规范及功能OPC是一种一致的独立于制造商的软件接口。

OPC 接口基于Microsoft Windows 的COM(组件对象模型)和DCOM(分布式组件对象模型)技术。

另一方面,OPC XML 则基于Internet 标准XML、SOAP 和HTTP。

> COMCOM 是位于同一计算机上且属于不同程序的对象之间进行通讯时采用的标准协议。

服务端是提供服务的对象,比如提供数据。

客户端是使用由服务端提供的服务的应用程序。

> DCOMDCOM 代表COM 功能的扩展,从而允许对远程计算机上的对象的访问。

该接口允许在企业、管理办公室和生产的应用程序之间进行标准化的数据交换。

以前,访问过程数据的应用程序受限于通讯网络的访问协议。

使用OPC 标准软件接口,各个生产商的设备和应用程序就能以一致的方式连接起来。

OPC 客户端是访问过程数据、消息和OPC 服务端归档历史数据的应用程序。

访问需要通过OPC 软件接口。

OPC 服务端是一个程序,它为不同制造商的应用程序提供一个标准的软件接口。

OPC 服务端是在处理过程数据的应用程序、各种网络协议和用于访问这些数据的接口之间的中间层。

只有当设备的操作系统是基于Windows COM 和DCOM 技术时,才能使用OPC 软件接口进行数据交换。

目前,Windows 2000、Windows XP、Windows 2003 Server 和Windows VISTA 具有这些软件接口。

Wincc与Excell数据交换实例一二

Wincc与Excell数据交换实例一二

Wincc与Excell数据交换实例一二Wincc与Excell数据交换实例一二Liking5200,sdyjdx关键字:Wincc,Excell,数据交换,动态数据交换(DDE)现实工程中,经常会遇到重要的参数存储子Excell表格中,在Wincc组态画面中,根据现场参数数值,查询调用对应Excell表格内的数据,同时根据经验在此将更新参数重新保存到Excell中去,这就要求我们实现Wincc与excell的通讯读写。

本文通过两个实例,介绍两种Wincc与excell的读写方法。

实例1Excell不做任何处理,通过Wincc按钮创建C动作,实现对Excell 的读写。

首先建立Excell文件,如d:\\Wincc_Excell_RW.xls。

内容如下:Wincc,建立四个内部变量:ReadExcell_X,Excell_Address_R,WriteExcell_X,Excell_Address_W,分别代表读取的数据,读取地址,写入的数据,输入地址,并在组态画面组态四个IO域与之相对应,组态两个按钮“按钮-读-Excell-X”,“按钮-写-Excell-X”,启动读写功能。

为了数据通用,变量类型定义为“文本变量16位字符集”,四个IO域数据格式选“字符串”,根据需要也可设为其他数据类型,但要确保Wincc与Excell相同,不然将发生读写错误或读取不正确。

按钮“按钮-读-Excell-X”,“按钮-写-Excell-X”,分别创建C动作如下按钮“按钮-读-Excell-X”,C动作:#include "apdefap.h"void OnClick(char* lpszPictureName, char* lpszObjectName, char*lpszPropertyName){#pragma code("Shell32.dll") //调用动态链接库char tag1[20],tag2[20],add[20];__object* pExcel = NULL; //建立 pExcel 指针用来对 EXCEL 进行操作HWND handle=NULL;handle=FindWindow(NULL,"WinCC-运行系统 - ");if (MessageBox(handle,"Start Reading","Read From Excell", MB_YESNO|MB_ICONQUESTION|MB_SETFOREGROUND|MB _SYSTEMMODAL)==IDYES){ pExcel = __object_create("Excel.Application");pExcel->Visible = 0;pExcel->Workbooks ->Open ("d:\\Wincc_Excell_RW.xls");strcpy(add,GetTagChar("Excell_Address_R"));strcpy(tag1,pExcel->Worksheets("sheet1")->Range(add)->V alue);SetTagChar("ReadExcell_X",tag1);//将地址Excell_Address_R,excel文件里面的内容写到外部变量ReadExcell_XpExcel->Quit();//退出Excel}__object_delete(pExcel);}按钮“按钮-写-Excell-X”,C动作:#include "apdefap.h"void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName){#pragma code("Shell32.dll")//调用动态链接库char tag1[20],tag2[20],add[20];__object* pExcel = NULL; //建立 pExcel 指针用来对 EXCEL 进行操作HWND handle=NULL;handle=FindWindow(NULL,"WinCC-运行系统 - ");if (MessageBox(handle,"Start Writing","Write Into Excell",MB_YESNO|MB_ICONQUESTION|MB_SETFOREGROUND|MB _SYSTEMMODAL)==IDYES) { pExcel = __object_create("Excel.Application");pExcel->Visible = 0;//控制excel文件是否可见,当1时,excel文件可见.pExcel->Workbooks ->Open ("d:\\Wincc_Excell_RW.xls");strcpy(add,GetTagChar("Excell_Address_W"));pExcel->Worksheets("sheet1")->Range(add)->Value =GetTagChar("WriteExcell_X");if (MessageBox(handle,"Save the Excell","Write Into Excell", MB_YESNO|MB_ICONQUESTION|MB_SETFOREGROUND|MB _SYSTEMMODAL)==IDYES) //{ } pExcel->ActiveWorkbook->Save();pExcel->DisplayAlerts = 0;pExcel->Workbooks->Close();//关闭文件pExcel->Quit();//退出Excel}__object_delete(pExcel);}运行情况如下:读B1数据:点击是读C5数据:点击是写B1数据:点击是然后再读取B1:点击是如此,我们可以对Excell文件d:\\Wincc_Excell_RW.xls ――Sheet 1的任意数据进行读写。

WinCC与Excel,VB的本地DDE通讯

WinCC与Excel,VB的本地DDE通讯

WinCC与Excel、VB的本地DDE通讯WinCC Communication with Excel,VB Via DDE摘要WinCC与Excel、VB的本地DDE通讯关键词WinCC ,Excel,VB,DDEKey Words WinCC ,Excel,VB,DDEA&D Service & Support Page 2-11目录1 WinCC 作为DDE的服务器, Excel 作为DDE客户端 (4)2 WinCC 作为DDE的服务器, VB 作为DDE客户端 (6)3 WinCC 作为DDE的客户端,Excel 作为DDE服务器(本地) (7)4 WinCC 作为DDE的客户端,VB作为DDE服务器(本地) (8)附录-推荐网址 (11)A&D Service & Support Page 3-111 WinCC 作为DDE的服务器, Excel 作为DDE客户端1) 打开WinCC项目,在WinCC Explorer 中“计算机属性->启动”中添加应用程序: DdeServ.exe,同时添加命令行参数: /v /n 。

2) 激活WinCC 后,会弹出 WinCC DDE-Server 对话框,点击 Tag List 按钮:A&D Service & Support Page 4-11在列表中选择想要访问的变量,点击“确定”,这样该变量的连接信息就被拷贝到Windows 剪贴板。

A&D Service & Support Page 5-113) 打开Excel,任意(双击)选中一个单元格,将Windows剪贴板的内容拷贝到该单元格中,然后在第一个字符前添加“=”,这样就完成对单元格的输入。

这时在Excel中就能够得到WinCC的内部和外部过程数据了。

4) 如果要访问多个变量,请重复步骤 2) 和 3)。

注意:1) DdeServ.exe 需要一直运行。

如何通过 VBS 操作 WINCC 在线数据控件并导出至 EXCEL(附带程序)

如何通过 VBS 操作 WINCC 在线数据控件并导出至 EXCEL(附带程序)

如何通过VBS 操作WINCC 在线数据控件并导出至EXCEL(附带程序)1 概述本文主要介绍如何通过 VBS 操作 WINCC 在线数据表格控件。

开发环境:PCS7 V8.2 SP1 / WINCC 7.4 SP1使用限制:1) 时间间隔最多至 1 分钟2) 时间范围太长,数据加载可能会比较慢3) 导出文件 EXCEL 没有置顶,导出后要切换到 EXCEL 程序。

扩展性:可扩展选择参数、保存导出文件、生成 PDF 等功能。

本例采用将参数提前组态在控件内,运行中通过复选框来实现选择。

也可完全使用脚本实现参数添加。

详见附加信息>通过脚本新增参数图 1 根据选择查询数据图 2 导出数据成功图 3 在 EXCEL 中查看导出的数据文件3.1 画面部件说明图 5 测试画面部件说明3.1.1 添加时间控件添加 WINCC Activex 控件 Date and time picker,如下图:图 6 添加时间控件3.1.2 设置导出模板本例设置的 excel 文件模板路径:"\\"+ServerName+"\Export\Export.xlsx",可根据项目情况采用其它导出路径和模板。

如果更换了模板或路径,必须修改导出脚本内的路径。

模板内主要设置了字体、数据格式、显示的小数点位数和列宽,也可再增加页眉、页脚、LOGO 等,以达到更好的显示效果。

3.2 画面打开在画面打开事件内,设置如下脚本,用于初始化画面内各控件:图 7 画面打开事件脚本3.3 选择数值参数版设计图 8 添加参数选择复选框设置复选框,在复选框更改事件下添加脚本:图 9 数据参数显示隐藏设置脚本图 10 脚本与控件属性对应关系 3.4 设置时间系数属性:TimeStepFactor图 11 修改时间间隔脚本图 12 修改时间系数 3.5 设定时间范围在查询按钮释放左键事件里:图 14 时间范围查询按钮事件图 14 时间范围查询按钮事件 3.6 导出在导出按钮释放左键事件里:图 16 导出按钮脚本图 17 导出后自动打开文件夹图 18 新增参数脚本图 19 新增参数运行效果。

利用DDE技术实现WinCC与Excel的数据交换

利用DDE技术实现WinCC与Excel的数据交换

利用DDE技术实现WinCC与Excel的数据交换
姜巍
【期刊名称】《南钢科技与管理》
【年(卷),期】2011(000)001
【摘要】以炼钢厂4#连铸机为例,介绍了利用DDE技术实现WinCC与Excel数据交换的方法,为集中监测和调度管理提供实时依据。

【总页数】3页(P56-58)
【作者】姜巍
【作者单位】炼钢厂
【正文语种】中文
【中图分类】TP317.3
【相关文献】
1.利用DDE技术实现不同应用之间的数据交换 [J], 贺泽;邱长华;张家泰;薛开
2.利用DDE实现VFP与Excel的数据交换 [J], 孙领弟;刘斌;李建忠
3.利用OPC实现VC应用程序与WinCC的数据交换 [J], 张猛;王楠;钮斌
4.利用DDE技术实现在数据库与WinWord之间的数据交换 [J], 郑东;陈淑珍
5.利用OPC实现WINCC与监控系统的动态数据交换 [J], 高德欣;张文武;杨清因版权原因,仅展示原文概要,查看原文内容请购买。

excle导入到WINCC

excle导入到WINCC

site: android+怎么才能把Excel里面的数据导入WINCC中组态说明WinCC 变量可以使用Smart Tools “V ariables Import/Export” (V arExim.exe) 软件工具和“Configuration Tool” 软件工具进行导出和导入。

这些软件工具作为标准随WinCC 一起提供。

必须通过WinCC 安装程序进行安装。

有关这些工具的安装、使用方法及处理等详细信息,可以从WinCC 信息系统(在线帮助)的“Smart Tools”路径中获得。

一变量导出/导入(varexim.exe)1.简要说明该工具软件程序从打开的项目中将所有的链接、数据结构和变量导出到相应的ASCII 文件里,然后,用户就可以将它们导入到另外一个项目中去。

ASCII 格式方便用户在再次导入之前用电子表格程序对这些链接、数据结构和变量进行处理。

“WinCC Data Manager (T ag Management)” 中的所有变量全部被导出。

不能导出某个变量。

在执行导入操作时,可以选择:? 导入(只向WinCC 导入其中没有的变量)? 导入覆盖(导入文件中的所有变量全都导入到WinCC 中。

)2.变量再分配不能进行变量在分配说明:不能将变量分配给另外的组或链接。

如果要将变量(包括结构变量)分配给另一个链接或组,那么在导入数据之前,必须在WinCC Explorer 里将该变量删除。

导入后又重新创建这些变量。

警告!在这种情况下,TagLogging,AlarmLogging 或TextLibrary 里任何当前引用均会丢失。

3.重命名变量不能进行重命名变量说明:如果变量需要重命名,要求用新变量名通过变量导入来重新创建。

使用旧名称的变量必须手动删除。

警告!TagLogging, AlarmLogging 或Text Library 中的当前引用必须手工改正。

4.似然性检查? 在数据编辑期间不进行似然性检查,只有在数据导入时才进行似然性检查。

将WinCC的历史数据写入Excel文件

将WinCC的历史数据写入Excel文件

将WinCC的历史数据写入Excel文件最近,几个客户提到了一个共性的需求:定期将WinCC的历史归档数据导出到Excel文件中,供第三应用去访问。

实现这个需求的方法很多,如:1)通过IDB(Industrial Databridge工业数据桥选件), 通过简单的组态就能实现,操作视频链接:/xxym.aspx?id=124622)手动点击画面中的表格或趋势控件上的导出按钮,将数据导出;或通过定期(如每小时)执行全局脚本控制表格或趋势控件上的导出按钮导出数据。

核心VBS代码如下:TableControl1.Online = 0 '设置表格控件停止实时更新TableControl1.TimeColumnRangeType=1'设置表格控件时间范围为“开始到结束”TableControl1.TimeColumnBeginTime=XXX'设置表格控件的开始时间TableControl1.TimeColumnEndTime=YYY'设置表格控件的结束时间TableControl1.ExportShowDialog=False'取消表格控件导出时弹出对话框TableControl1.ExportDirectoryname=BBB'设置导出的目录TableControl1.ExportFilename=AAA'设置导出的文件名TableControl1.Export()'执行表格控件的导出动作注意:此种方式,控件所在画面要为当前运行画面或用全局脚本将其置为当前画面,否则全局脚本无法操作此控件。

3)通过脚本调用WinCC OLE DB接口直接读取历史数据,写入到Excel文件中----------------------------------------------这里重点介绍第3)种:VBS访问WinCC OLE DB接口读取历史数据,写入Excel(Connectivitypack连通包提供此接口)这种方式核心代码包括A和B这2部分A. 调用WinCC OLE DB接口读取历史数据核心代码及注解:A1. 查询归档数据scon='Provider=WinCCOLEDBProvider.1;Catalog=CC_test03 _20_06_12_17_50_01R;Data Source=.\WinCC''建立到归档数据库的连接字符串'Catalog为WinCC数据库的名称(内部系统变量@DatasourceNameRT的值),Data Source为服务器名称,本地用“.\WinCC”即可。

在WinCC中如何使用VBS读取变量归档数据到EXCEL

在WinCC中如何使用VBS读取变量归档数据到EXCEL

文档类型常问问题, 条目ID:77940055, 文档发布日期2013年7月23日4)(评估在WinCC中如何使用VBS读取变量归档数据到EXCEL推荐文档: 西门子工程师推荐本文档!1概述介绍如何在WinCC项目中使用VBS脚本读取变量归档值,并把获取的数据保存成新的Excel文件。

文中示例代码仅适用于以绝对时间间隔方式访问。

2软件环境Windows XP SP3中文版、WinCC7.0 SP2 ASIA、Microsoft office Excel 20073访问原理WinCC变量归档数据是以压缩的形式存储在数据库中,需要通过WinCC连通性软件包提供的OLE-DB接口才能够解压并读取这些数据。

关于WinCC连通性软件包的详细信息请参考连接:37436159当使用OLE-DB方式访问数据库时关键需要注意连接字符串的写法和查询语句的格式。

连接字符串格式为“Provider=WinCCOLEDBProvider.1; Catalog= ***; Data Source= ***;”,其中Catalog为WinCC运行数据库的名称,当修改项目名称或在其它计算机上打开原项目时, Catalog会发生变化。

建议使用WinCC内部变量“@DatasourceNameRT”获得当前项目的Catalog。

Data Source 为服务器名称,格式为“<计算机名称>\WinCC”。

3.1 查询语句格式数据的查询语句的格式要求如下:8 字节长ValueID 的请求:TAG_LLVID:R,<ValueID或ValueName>,<TimeBegin>,<TimeEnd>[,<SQL_clause>][,<TimeStep>]4 字节长ValueID 的请求:TAG:R,<ValueID 或ValueName>,<TimeBegin>,<TimeEnd>[,<SQL_clause>][,<TimeStep>]其中:ValueID:过程值归档变量的唯一标识符。

wincc 通过VBS读取归档数据到EXCEL

wincc 通过VBS读取归档数据到EXCEL
wincc通过VBS读取归档数据时遇到以下问题:
1.建立变量strBeginTime和strEndTime为文本变量8位字符集,添加一个IO域,实际运行以后,无法输入格式如:2014-02-2512:00:00,怎么办?
2.手册里说需要添加一个GetLocalDate函数,如何添加呢?
2、用“year(now)&”-”&month(now)&”-”&day(now)”取当前的日期
3、直接复制里面的内容到脚本编辑器中。
我按照手册上的打开VBS编辑器,新建一个项目模块,然后把程序复制过去,,编译就出错,可见附件.怎么回事呢?
3.这个A0579指南提供的程序是TXT格式的,需要自己移植到WINCC里,我试了很多遍,都没成功,求指导一下,
图片说明:1,项目模块报错了2,如何添加GetLocalDate函数
最佳答案
1、你的io域的数据格式改成字符串就可以输入了

如何能在Excel中访问WinCC变量归档大数据

如何能在Excel中访问WinCC变量归档大数据

1 功能说明在Microsoft office Excel中访问WinCC的历史数据,实现如下图所示的报表:图1: Excel中访问WinCC的历史数据生成报表选择日期后,可以生成当天的风机参数日报表(报表数据来自WinCC)。

2 软件环境本地计算机:Windows XP SP3英文版、WinCC7.0 SP2 ASIA、Microsoft office Excel 2003 远程计算机:Windows XP SP3英文版、WinCC7.0 SP2 ASIA、Microsoft office Excel 20033 WinCC/Connectivity Pack 介绍WinCC变量归档数据是以压缩的形式存储在数据库中,需要通过WinCC/Connectivity Pack 提供的OLE-DB接口才能够解压并读取这些数据。

3.1 连接字符串“Provider=WinCCOLEDBProvider.1; Catalog= ***; Data Source= ***;“其中:Catalog:WinCC运行数据库的名称注意:当修改项目名称或在其它计算机上打开原项目时, Catalog会发生变化。

建议使用WinCC系统变量“@DatasourceNameRT”获得当前的Catalog。

Data Source :服务器名称本地:“.\WinCC”或者“<计算机名称>\WinCC”远程:“<计算机名称>\WinCC”3.2 查询语句“TAG:R,<ValueID orValueName>,<TimeBegin>,<TimeEnd>[,<SQL_clause>][,<TimeStep>]”其中:ValueName:格式为“ArchiveName\Value_Name”,可以使用多个名称。

TimeBegin,TimeEnd:时间范围,格式“YYYY-MM-DD hh:mm:ss.msc”。

Wincc V7.3 vbs 读取多个变量归档数据到excel

Wincc V7.3 vbs 读取多个变量归档数据到excel

Wincc V7.3vbs读取多个变量归档数据到excel前面的一篇博客记录了如何读取多个变量归档数据到mshgrid控件,根据的是西门子官网的教学。

有网友询问为什么他照着官网方法就是无法导出到excel。

我自己也做了一遍,没有问题。

本篇主要记录导出按钮的脚本。

前面的准备工作与上一篇一致,导出按钮的vbs脚本如下:Sub OnClick(ByVal Item)Dim myCatalog,myDS,PCName,cnstr,sqlstr1,sqlstr2Dim xlapp,BTime,ETime,utcbtime,utcetime,utcbtstr,utcetstrDim conobj,rsobj1,comobj1Dim rsobj2,comobj2Dim rscount,i,curRowDim filenamemyCatalog=HMIRuntime.Tags("@DatasourceNameRT").ReadPCName=HMIRuntime.Tags("@LocalMachineName").ReadmyDS=PCName & "\Wincc"Set BTime=HMIRuntime.Tags("btime")Set ETime=HMIRuntime.Tags("etime")'北京时间时区修正utcbtime=Dateadd("h",-8,BTime.Read) '起始时间utcetime=Dateadd("h",-8,ETime.Read) '结束时间'日期时间格式修正utcbtstr = Year(utcbtime) & "-" & Month(utcbtime) & "-" & Day(utcbtime) & " " & Hour(utcbtime) & ":" & Minute(utcbtime) & ":" & Second(utcbtime)utcetstr = Year(utcetime) & "-" & Month(utcetime) & "-" & Day(utcetime) & " " & Hour(utcetime) & ":" & Minute(utcetime) & ":" & Second(utcetime)'连接字符串cnstr="Provider=WinCCOLEDBProvider.1; Catalog=" & myCatalog & "; Data Source=" &myDS'创建连接对象Set conobj=CreateObject("ADODB.Connection")conobj.connectionstring=cnstrconobj.CursorLocation = 3conobj.Open'查询字符串'sqlstr = "Tag:R,('VA\flow1';'VA\flow2'),'" & utcbtstr & "','" & utcetstr & "'," & "'order by Timestamp ASC','TimeStep=1,1'" sqlstr1 = "Tag:R,('VA\flow1'),'" & utcbtstr & "','" & utcetstr & "'," & "'order by Timestamp ASC','TimeStep=1,1'"sqlstr2 = "Tag:R,('VA\flow2'),'" & utcbtstr & "','" & utcetstr & "'," & "'order by Timestamp ASC','TimeStep=1,1'"'进行查询Set rsobj1 = CreateObject("ADODB.Recordset")Set comobj1 = CreateObject("mand")mandType = 1Set comobj1.ActiveConnection = conobjmandText = sqlstr1Set rsobj1 = comobj1.ExecuteSet rsobj2 = CreateObject("ADODB.Recordset")Set comobj2 = CreateObject("mand")mandType = 1Set comobj2.ActiveConnection = conobjmandText = sqlstr2Set rsobj2 = comobj2.Executerscount=rsobj1.recordcountrsobj1.movefirstrsobj2.movefirstif rscount=0 thenmsgbox "没有记录"exit subend ifSet xlapp=CreateObject("Excel.Application")xlapp.visible=Falsexlapp.workbooks.add'初始化excelxlapp.worksheets(1).cells(1,1)="编号:"xlapp.worksheets(1).cells(1,2)="QB-2017.001"xlapp.worksheets(1).range("a2:c2").mergecells=True '合并单元格xlapp.worksheets(1).cells(2,1)="这是一个测试"xlapp.worksheets(1).cells(2,1).HorizontalAlignment = 3 '文字居中xlapp.worksheets(1).cells(3,1)="日期时间"xlapp.worksheets(1).cells(3,2)="flow1"xlapp.worksheets(1).cells(3,3)="flow2"'导出到excelFor i=1 To rscountxlapp.worksheets(1).cells(3+i,1)=Dateadd("h",+8,rsobj1.fields(1).value)xlapp.worksheets(1).cells(3+i,2)=rsobj1.fields(2).valuexlapp.worksheets(1).cells(3+i,3)=rsobj2.fields(2).valuersobj1.movenextrsobj2.movenextNext'释放资源Set rsobj1 = NothingSet rsobj2 = Nothingconobj.CloseSet conobj = Nothing'画边框xlapp.worksheets(1).range("a3:c" & CStr(3+rscount)).borders(1).linestyle=9xlapp.worksheets(1).range("a3:c" & CStr(2+rscount)).borders(1).weight=2xlapp.worksheets(1).range("a3:c" & CStr(2+rscount)).borders(2).linestyle=9xlapp.worksheets(1).range("a3:c" & CStr(2+rscount)).borders(2).weight=2xlapp.worksheets(1).range("a3:c" & CStr(2+rscount)).borders(3).linestyle=9xlapp.worksheets(1).range("a3:c" & CStr(2+rscount)).borders(3).weight=2xlapp.worksheets(1).range("a3:c" & CStr(2+rscount)).borders(4).linestyle=9xlapp.worksheets(1).range("a3:c" & CStr(2+rscount)).borders(4).weight=2'保存文件filename= "c:\" & Year(Now) & "年" & Month(Now) & "月" & Day(Now) & "日-" & Hour(Now) & "点" & Minute(Now) & "分" & Second(Now) & "秒生成生产报表.xlsx"xlapp.Activeworkbook.saveas (filename)xlapp.workbooks.closexlapp.quitMsgbox "成功导出到C:\"End Sub无法导出数据的朋友,检查一下官网提示的那个连接包是否安装了。

WinCC使用VBS读取报警记录数据到EXCEL

WinCC使用VBS读取报警记录数据到EXCEL

【WinCC】使用VBS读取报警记录数据到EXCEL1、概述介绍如何在WinCC项目中使用VBS脚本读取报警记录归档数据,并把获取的数据保存成新的Excel文件。

2、软件环境Windows XP SP3中文版、WinCC7.0 SP2 ASIA、Microsoft office Excel 20073、访问原理WinCC报警记录数据是以压缩的形式存储在数据库中,需要通过WinCC连通性软件包提供的OLE-DB接口才能够解压并读取这些数据。

当使用 OLE-DB方式访问数据库时关键需要注意连接字符串的写法和查询语句的格式。

连接字符串格式为“Provider=WinCCOLEDBProvider.1; Catalog= ***; Data Source= ***;”,其中:Catalog为WinCC运行数据库的名称,当修改项目名称或在其它计算机上打开原项目时, Catalog会发生变化。

建议使用WinCC内部变量“@DatasourceNameRT”获得当前项目的Catalog。

Data Source 为服务器名称,格式为“<计算机名称>\WinCC”。

3.1 查询语句格式查询语句的格式要求如下:AlARMVIEW:SELECT * FROM [ WHERE……optional ]其中参数信息如下所示:ViewName:数据库表名。

必须用需要的语言指定该表。

比如:中文字符表名为:ALGVIEWCHT,英文字符表明为:ALGVIEWENU 等。

Condition:为过滤标准。

详细说明请参见下表:表1查询参数表3.2查询结果查询结果作为记录集返回。

可以根据需要有选择的返回特定的数据集。

例如:oRs.Fields(0).Value返回的是消息的编号;oRs.Fields(2).Value返回的是消息的时间戳;oRs.Fields(37).Value返回的是消息文本的内容。

记录集的结构如下表所示:表2记录集结构表3记录集结构 (续表)注意:WinCC的归档数据是使用UTC(协调世界时)时间保存的。

wincc和excel之间的数据读写

wincc和excel之间的数据读写

objExcelApp.Workbooks.Close
objExcelApp.Quit
Set ObjEXceLapp = Not过上面的语句关闭刚才打开的excel程序了
coldold.Write
'最后是把读到的excel值从临时变量coldold中写入它对应的"usercodeold1"变量中
Dim ObjExcelApp
Set objExcelApp = CreateObject("Excel.Application")
'objExcelApp.Visible = True
objExcelApp.Workbooks.Open MyFile
'上面的程序段是为了打开d盘下叫Excelcode.xls名字的excel文件
End Sub
objExcelApp.worksheets ("sheet1").Cells(1, 1).VAlue = HMIRuntime.Tags("usercodenew1").read
objExcelApp.ActiveWorkbook.Save
'上面两行的作用是将wincc变量"usercodenew1"的值写到Excel表中的A1格子里面,并且保持一下
Dim coldold
Set coldold=HMIRuntime.Tags("usercodeold1")
coldold.Value = objExcelApp.worksheets ("sheet1").Cells(1, 1).value
'上面这两句的作用是将刚才保持到Excel表格中的数据重新读回wincc,存到"usercodeold1"变量中,当然现在其实并没有存入"usercodeold1"变量,只是存在了叫coldold的临时变量里面
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1、DDE简介动态数据交换(DDE)是基于Windows的消息机制,两个Windows应用程序通过相互之间传递消息进行“对话”,这两个程序被分别称为“服务器”和“客户”。

DDE服务器是一个维护着其他Windows程序可能使用的数据程序,而DDE客户则是从服务器获得这些数据的程序。

DDE对话是由客户程序发动的。

客户程序将一条称为WM_DDE_INTITIATE的消息发给当前运行的所有Windows 程序,这条消息指明了客户程序所需要的数据类别,拥有这些数据的DDE服务器可以响应这条消息,这样一个对话就开始了。

DDE的对话方式有3种: ①服务器数据变化时,直接把数据送给客户,由客户对这些数据进行处理,这类对话方式称为热链;②服务器的数据变化时,服务器通知客户,再由客户取数据,这种方式称为温链;③由客户申请数据、服务器发送数据的方式称为冷链。

一、Wincc作为DDE的客户端,Excel作为DDE服务器(本地)1、在变量管理上按鼠标右键--添加新的驱动程序--选“windows dde.chn”图12、在DDE上按鼠标右键--新驱动程序连接--点属性,在其连接属性中:“计算机名称”为空;“应用程序”为excel;“主题”为[]工作表名,比如[DDE.xls]sheet1。

图23、在DDE\excel下建变量,在变量属性中选择地址,条目名称填:r行数c列数,比如r1c1(表示第一行第一列的单元格),重复步骤3可以加入更多的DDE变量图34、Excel程序图4Wincc程序图55完成用OPC做比较省事。

WinCC做OPC Server,Excel做OPC Client。

这种情况下,WinCC端不需要做任何设置,只要在Excel 里用少量的代码就能实现双方的通讯。

对于WINCC与S7-300的通讯,首先要确定PLC的通讯口类型,PLC一般都集成了MPI/DP口,还可以安装通讯模块。

计算机(PC)上安装适当的通讯卡(不同的通讯卡支持的通讯协议不同)。

看你需要啦!其次是WINCC软件里的通讯协议要与PC机对应。

WINCC提供了SIMATIC S7 PROTOCOL SUITE 通讯驱动程序,包含了多种通讯协议!最终还有自己亲自实际操作了才有深刻的了解的!!Sub X6309X94AE9X0000X6539_OnClick(Byval Item)Dim fso,myfileSet fso = CreateObject("scripting.FileSystemObject")Set MyFile = fso.GetFile("d:\Excelcode.xls")Dim ObjExcelAppSet objExcelApp = CreateObject("Excel.Application")'objExcelApp.Visible = TrueobjExcelApp.Workbooks.Open MyFile'上面的程序段是为了打开d盘下叫Excelcode.xls名字的excel文件objExcelApp.worksheets ("sheet1").Cells(1, 1).VAlue = HMIRuntime.Tags("usercodenew1").readobjExcelApp.ActiveWorkbook.Save'上面两行的作用是将wincc变量"usercodenew1"的值写到Excel表中的A1格子里面,并且保持一下Dim coldoldSet coldold=HMIRuntime.Tags("usercodeold1")coldold.Value = objExcelApp.worksheets ("sheet1").Cells(1, 1).value'上面这两句的作用是将刚才保持到Excel表格中的数据重新读回wincc,存到"usercodeold1"变量中,当然现在其实并没有存入"usercodeold1"变量,只是存在了叫coldold的临时变量里面objExcelApp.Workbooks.CloseobjExcelApp.QuitSet ObjEXceLapp = Nothing'到这里为止,我们可以通过上面的语句关闭刚才打开的excel程序了coldold.Write'最后是把读到的excel值从临时变量coldold中写入它对应的"usercodeold1"变量中End Sub上面这个例子已经调试通过。

网上有很多wincc值写入excel中的例子,一直找不到从excel中读取数据到wincc中的例子,结合网上朋友的一些经验,这里给出个小例子,供大家参考。

估计考虑到后些天要用到EXCEL与WINCC的通讯,我看了些书,在西门子的论坛上看到了一个现场做好的通讯成功例子.通过自己来做,通讯成功.例子地址:/club/bbs/post.asp?b_id=5&a_id=53940&s_id=0&num=49#anch现总结一下:1 WINCC作为OPC服务器,勿需添加OPC通道.在例子中,只在内部变量中,建立6个内部变量,内部变量为有符号的16位数,名称分别为,a,b,c,d,e,f.(当然如果身边有PLC在,可以建立过程变量,为了方便运行,建立内部变量),分别在a,b,c,d,e,f中的限制/报表中,设置其开始值,为1,2,3,4,5,6.注意:计算机-->属性中的计算机名称要与本计算机名称一致在WINCC中建立一页面,用按钮来改变a,b,c,d,e,f的值,如果通讯成功,在EXCEL中也会随之改变.2 新建立一个EXCEL文件,打开文件,工具-->宏-->VB编辑器,打开EXCEL的VB 编辑器.3 在VB编辑器里,工具-->引用,在弹出窗口中,找Siemens OPC DAAutomation 2.0,勾上 :)4 双击sheet1,打开sheet1的代码窗口,然后将程序(程序代码在页面的最后)复制到代码窗口.5 在EXCEL的上分别对应C2-->计算机名 C3-->a C4-->b C5-->c C6-->d C7-->e C8-->f6 在EXCEL总,工具-->宏,选择sheet1.startclient,启动7 完了代码:Option ExplicitOption Base 1Const ServerName = "OPCServer.WinCC"Dim WithEvents MyOPCServer As OPCServerDim WithEvents MyOPCGroup As OPCGroupDim MyOPCGroupColl As OPCGroupsDim MyOPCItemColl As OPCItemsDim MyOPCItems As OPCItemsDim MyOPCItem As OPCItemDim ClientHandles(6) As LongDim ServerHandles() As LongDim Values(1) As VariantDim Errors() As LongDim ItemIDs(6) As StringDim GroupName As StringDim NodeName As StringDim itemv(6) As VariantDim ii As Integer'---------------------------------------------------------------------' Sub StartClient()' 目的:连接至OPC_server,创建组和添加条目'---------------------------------------------------------------------Sub StartClient()' On Error GoTo ErrorHandler'----------- 可以自由选择ClientHandle和GroupNameFor ii = 1 To 6ClientHandles(ii) = iiNext iiGroupName = "MyGroup"'----------- 从单元“A1”得到ItemIDNodeName = Range("c2").ValueItemIDs(1) = Range("c3").ValueItemIDs(2) = Range("c4").ValueItemIDs(3) = Range("c5").ValueItemIDs(4) = Range("c6").ValueItemIDs(5) = Range("c7").ValueItemIDs(6) = Range("c8").Value'----------- 得到一个OPC服务器的实例Set MyOPCServer = New OPCServerMyOPCServer.Connect ServerName, NodeNameSet MyOPCGroupColl = MyOPCServer.OPCGroups'----------- 为添加组设置缺省的激活状态MyOPCGroupColl.DefaultGroupIsActive = True'----------- 添加组至收集Set MyOPCGroup = MyOPCGroupColl.Add(GroupName)Set MyOPCItemColl = MyOPCGroup.OPCItems'----------- 添加一个条目、返回ServerHandlesMyOPCItemColl.AddItems 6, ItemIDs(), ClientHandles(), ServerHandles(), Errors'----------- 用于接受不同的信息组MyOPCGroup.IsSubscribed = TrueExit SubErrorHandler:MsgBox "Error: " & Err.Description, vbCritical, "ERROR"End Sub'---------------------------------------------------------------------' Sub StopClient()' 目的:从服务器释放对象并且断开连接'---------------------------------------------------------------------Sub StopClient()'----------- 释放组和服务器对象MyOPCGroupColl.RemoveAll'----------- 与服务器断开连接并且清除MyOPCServer.DisconnectSet MyOPCItemColl = NothingSet MyOPCGroup = NothingSet MyOPCGroupColl = NothingSet MyOPCServer = NothingEnd Sub'---------------------------------------------------------------------' Sub MyOPCGroup_DataChange()' 目的:组中的数值、质量或时间标志改变时,该事件激活'---------------------------------------------------------------------'----------- 如果OPC-DA Automation 2.1被安装,使用:Private Sub MyOPCGroup_DataChange(ByVal TransactionID As Long, ByVal NumItems As Long, ClientHandles() As Long, itemvalues() As Variant, Qualities() As Long, TimeStamps() As Date)'----------- 设置数据表单元值为数值读For ii = 1 To NumItemsitemv(ClientHandles(ii)) = itemvalues(ii)Next iiRange("d3").Value = /qz.q/CStr(itemv(1))Range("d4").Value = /qz.q/CStr(itemv(2))Range("d5").Value = /qz.q/CStr(itemv(3))Range("d6").Value = /qz.q/CStr(itemv(4))Range("d7").Value = /qz.q/CStr(itemv(5))注意:excel启动宏之前先启动WINCC运行。

相关文档
最新文档