首页 >excel操作 > 内容

博图WINCC报表(SQL数据库的建立,TIA_wincc在数据库中保存和查询数据,调用Excel模板把数据保存到指定的...

2023年1月11日 21:21

目录

一、概述

1.1 前言

博图WINCC通过VBS脚本实现在数据库中保存和查询数据,调用Excel模板把数据保存到指定的位置!

在这里插入图片描述

1.2 主要功能

可以实现如下功能:
➢ 自动记录各设备的运行数据
➢ 自动统计各设备的运行时间
➢ 按设备、日期呈现报表
➢ 按日期和设备编号以EXCEL表格保存数据
➢ 可打印存有设备运行数据的表格

1.3 使用的软件

本文档所使用的各软件版本如下:
➢ 操作系统版本:Window10 专业版
➢ 博图版本: TIA V16
➢ WinCC 版本: WinCC RT Professional
➢ Office版本: Microsoft Office 2019

二、 SQL server建库和建表

这里我用的20192019版本的,其他版本的相差无几

2.1、SQL server建库

1、在开始—>所有程序,找到方框中箭头的那个单击,如下图所示:
在这里插入图片描述

倘若没有这个图标,请先安装SQL Server 2019。

2、然后,打开后会弹出下面图片,记住这个服务器名称 后面的值,这个等会程序中会用到,

在这里插入图片描述
点击链接后,需要建立我们需要的数据库,右击键“数据库” 点击 “新建数据库” 这是建库
在这里插入图片描述

在这里插入图片描述
4、然后在“数据库名称(N)”中输入数据库名字,点“确定”。这个名字用英文,我测试,所有名字随便取得

在这里插入图片描述
5、新建好了之后,点“数据库” ,就出现了下图信息
在这里插入图片描述

2.2SQL server建表

1、在库“Hong”下面 的“表” 右键—>“新建”—>点击“表(T)”,就出现下图,这是建表,

建表的意思就是建立一个小房间,这个房间专门用来存放某一个单独业务数据,比如专门存放某一个设备启停和产量等信息
在这里插入图片描述
2、进入下图,下面这个图是建字段,字段是用来存放设备中的属性,例如编号,时间、电能、停止电能和产量等等
在这里插入图片描述
列名就是填写数据英文名称,
数据类型 是字符、数字、浮点要选的类型都不一样,这个数据类型也很重要,它涉及到保存数据的长度,如果选错了,保存数据就会有问题。
不同的数据库都会详细介绍各个类型的使用场景,数据库基础知识我就不介绍了,随便找一个对于数据库的教学视频或者书都会介绍。
允许Null值意思是是否允许这一个值为空。
就是说当保存一个设备编号为1,开始电能为114KW的数据时候,允许为空的情况下,保存数据的时候,如果SQL语句中对于dev_no的值没取到,或者丢失,则这条数据也会保存,那么最终保存到数据库的信息就是编号为空,年龄为开始电能为114KW

3、其中ID需要改成标识,标识增量为1,如下图所示:
在这里插入图片描述

4、填好信息后,保存,就会弹出下面图片,这个是填写表的名字,就是给这个小房间弄一个名字,例如DataTableTest
在这里插入图片描述
在这里插入图片描述
到这里,数据库的建库建表就完成了,这个是鼠标操作,还可以用SQL语句来建表,或者直接拿别的地方导出的库文件直接导入到这个数据库,前提是同类型数据库。

三、建立wincc变量、画面

3.1、新建项目:

在这里插入图片描述

3.2添加wincc项目

在这里插入图片描述

3.2 给wincc添加HMI应用软件和通讯模块

在这里插入图片描述

3.3 添加内部变量

添加一个DataTableTest变量表
在这里插入图片描述

3.4 添加变量

T_Datetime(时间)、T_ID(ID)、T_ID_A(查询ID)、T_Power(电能表数据)、T_Count (生产数量),五个变量
在这里插入图片描述

3.5添加画面

添加设备运行报表画面,并在里面添加I/O域和按钮
在这里插入图片描述

四、 脚本编写

4.1 新建按钮和全局脚本文件夹

在这里插入图片描述

4.2、MyRnd全局脚本

1、添加全局VBS函数,并命名MyRnd脚本
在这里插入图片描述

2、变量设置
在这里插入图片描述
3、脚本代码

Function MyRnd(ByVal min, ByVal max)MyRnd=Rnd*(max-min+1)+min  '在(min,max)之间取随机数End Function

4、脚本展示
在这里插入图片描述

4.3 随机数生成按钮

1、 随机数生成按钮

2、添加按钮脚本
在这里插入图片描述

3、 脚本代码

Sub Random_generation()HMIRuntime.Tags("T_Power").Write MyRnd(0,1000)HMIRuntime.Tags("T_Count").Write MyRnd(0,1000)End Sub

4、 脚本展示
在这里插入图片描述
5、添加脚本
在这里插入图片描述

4.4 保存按钮

1、保存按钮
在这里插入图片描述
2、添加按钮脚本
在这里插入图片描述

3、脚本代码

Sub Save()                 Dim conn                     '定义类对象Dim SCon                     '定义数据库连接字符串Dim oRs1                       '定义获取到的数据集Dim oComDim strSQL1Dim Datetime,Count,Power '---------打开数据库 -----------'  SCon= "Provider=SQLOLEDB; Integrated Security =SSPI;Persist Security Info=False; Initial Catalog=Hong ; Data Source=DESKTOP-VFDPROG"Set conn=CreateObject("ADODB.Connection")  conn.ConnectionString = SCon  conn.CursorLocation = 3    conn.OpenSet oRs1 = CreateObject("ADODB.Recordset")Set oCom = CreateObject("ADODB.Command") oCom.CommandType = 1       '---------读取数据-----------'Datetime = HMIRuntime.Tags("T_Datetime").ReadPower = HMIRuntime.Tags("T_Power").ReadCount = HMIRuntime.Tags("T_Count").Read   '---------测试是否能取到值-----------'    MsgBox("Power=" & Power)                  '---------弹框显示测试数据是否正确-----------' Dim Msg, Style, Title, Help, Ctxt, Response, MyString    Msg = "Do you want to continue "  ' 定义信息。    Style = vbYesNo + vbQuestion + vbDefaultButton2   ' 定义按钮。    Title = "是否保存"   ' 定义标题。    Help = "DEMO.HLP"   ' 定义帮助文件。    Ctxt = 1000   ' 定义标题  ' 上下文。    ' 显示信息。    Response = MsgBox(Msg, Style, Title, Help, Ctxt)        If Response = vbYes Then   ' 用户按下“是”。        MyString = "Yes"   ' 完成某操作。  '---------弹框显示测试数据是否正确-----------'         strSQL1 = "INSERT INTO [Hong].[dbo].[DataTableTest] ([Datetime], [Power], [Count])"  'SQL数据库变量    strSQL1 = strSQL1 & " VALUES ('" & Datetime & "', '" & Power &"', '" & Count & "')"    '从wincc读取的临时变量 Set oCom.ActiveConnection = conn    oCom.CommandText = strSQL1               Set oRs1 = oCom.Execute'---------关闭数据库-----------'    Set oRs1 = NothingSet oCom = Nothingconn.CloseSet conn = Nothing'---------弹框显示测试数据是否正确-----------'        Else   ' 用户按下“否”。        MyString = "No"   ' 完成某操作。    End If'---------弹框显示测试数据是否正确-----------'    End Sub

4、 脚本展示
在这里插入图片描述在这里插入图片描述
5、按钮添加脚本
在这里插入图片描述

4.5 I/O查询

1、 I/O查询按钮
在这里插入图片描述
2、按钮脚本中添加I_O_Search脚本
在这里插入图片描述

3、 脚本代码

Sub I_O_Search()                            Dim conn                     '定义类对象Dim SCon                     '定义数据库连接字符串Dim oRs1                       '定义获取到的数据集Dim oComDim strSQL1Dim T_ID_A T_ID_A = HMIRuntime.Tags("T_ID_A").Read '---------------------打开数据库 --------------------'  SCon= "Provider=SQLOLEDB; Integrated Security =SSPI;Persist Security Info=False; Initial Catalog=Hong ; Data Source=DESKTOP-VFDPROG"Set conn=CreateObject("ADODB.Connection")    conn.ConnectionString = SCon    conn.CursorLocation = 3      conn.OpenSet oRs1 = CreateObject("ADODB.Recordset")Set oCom = CreateObject("ADODB.Command")oCom.CommandType = 1 '---------------------查询数据库 --------------------'strSQL1 ="SELECT [ID],[Datetime],[Power], [Count] FROM [Hong].[dbo].[DataTableTest]"strSQL1 = strSQL1 & " WHERE ID = '" & T_ID_A & "'" Set oCom.ActiveConnection = connoCom.CommandText = strSQL1           Set oRs1 = oCom.Execute  '---------------------查询的数据传送给WinCC的内部变量 --------------------'HMIRuntime.Tags("T_ID").Write oRs1.fields("ID").valueHMIRuntime.Tags("T_Datetime").Write oRs1.fields("Datetime").valueHMIRuntime.Tags("T_Power").Write oRs1.fields("Power").valueHMIRuntime.Tags("T_Count").Write oRs1.fields("Count").value   MsgBox( "查询结束" )  '----------------关闭数据库-----------'    Set oRs1 = NothingSet oCom = Nothing    conn.CloseSet conn = Nothing                          End Sub

4、 脚本展示
在这里插入图片描述
5、按钮添加脚本
在这里插入图片描述

五、脚本运行查看SQL

5.1 随机数脚本运行

1、打开“运行系统设置”,点开脚本选项中的启动命令
在这里插入图片描述
2、对我们建立的画面右击启动仿真命令
在这里插入图片描述
3、点击随机数生成按钮,电能和产量下的数值会随着每次的点击,进行随机变化

在这里插入图片描述

5.2 保存按钮运行

1、点击保存按钮后,会显示电能的数值,会和当前显示的电能数值一至。
在这里插入图片描述
2、点击确定后,会弹出是否保存的弹窗,
这里如我们点击是的话,数据会保存到SQL中
点击否的话,数据不会保存。

在这里插入图片描述

5.3 SQL数据库查看保存的数据

使用SQL查询刚才保存按钮保存的数据
1、右击DataTableTest,选择编写表脚本为(S)–>SELECT到(S)–>新查询编辑器窗口
在这里插入图片描述2、点击查询
在这里插入图片描述
3、这是刚才插入的数据
在这里插入图片描述

5.4 I/O查询按钮运行

1、选择查询ID,这里以查询数据库的第2行数据为例
在这里插入图片描述
2、点击I/O查询,
在这里插入图片描述
3、弹出查询结束的弹窗,点击确定即可
在这里插入图片描述

4、此时,这里显示的数据和SQL数据库的第二行数据

在这里插入图片描述

六、使用控件查询

6.1 添加控件

选择我的控件,在空白处右击,单击选择对象
在这里插入图片描述
2、弹出以下图框,在图框里选择控件,选好后点击确定

在这里插入图片描述
控件1:Microsoft Date and Time Picker Control 6.0 (SP4)

在这里插入图片描述
控件2:Microsoft FlexGrid Control , version 6.0
在这里插入图片描述
控件3:Microsoft Web Browser
在这里插入图片描述

3、添加完毕后,我的控件里会有刚才选择的三个控件
在这里插入图片描述

6.2MSHFlexGrid查询

1、添加按钮,命名为”MSHFlexGrid查询“
在这里插入图片描述
2、添加Microsoft FlexGrid Control , version 6.0控件
在这里插入图片描述3、Microsoft FlexGrid Control , version 6.0控件名称修改为Grid

4、在按钮脚本中添加MSHFlexGrid_Search脚本
在这里插入图片描述

5、脚本代码

Sub MSHFlexGrid_Search()Dim conn                     '定义类对象Dim SCon                     '定义数据库连接字符串Dim oRs1                       '定义获取到的数据集Dim oComDim strSQL1Dim m,i,j,k '---------------------打开数据库 --------------------'  SCon= "Provider=SQLOLEDB; Integrated Security =SSPI;Persist Security Info=False; Initial Catalog=Hong ; Data Source=DESKTOP-VFDPROG"Set conn=CreateObject("ADODB.Connection")    conn.ConnectionString = SCon    conn.CursorLocation = 3      conn.OpenSet oRs1 = CreateObject("ADODB.Recordset")Set oCom = CreateObject("ADODB.Command")oCom.CommandType = 1 '---------------------查询数据库 --------------------'strSQL1= "SELECT *  FROM  [Hong].[dbo].[DataTableTest]" Set oCom.ActiveConnection = connoCom.CommandText = strSQL1           Set oRs1 = oCom.Execute  m = oRs1.RecordCount                  MsgBox("查询到表格共有" & m &"行数据") '---------------------设置MSHFlexGrid控件显示--------------------'Dim olistSet olist = ScreenItems("报表")    olist.clear    olist.Cols=5    '列数            olist.Rows = m+1 '行数量 For i = 0 To 2    olist.ColAlignment(i)=3'列内容居中显示Next     '设置列宽        olist.ColWidth(0) = 800                     olist.ColWidth(1) = 1200    olist.ColWidth(2) = 1200    olist.ColWidth(3) = 1200    olist.ColWidth(4) = 1200     '设置表头    olist.TextMatrix(0, 0)="序号"   olist.TextMatrix(0, 1)="ID"                          olist.TextMatrix(0, 2) = "时间"       olist.TextMatrix(0, 3) = "电能"    olist.TextMatrix(0, 4) = "生产数量"    '---------------------将数据写入表格--------------------'        oRs1.movefirst    For i = 1 To m      olist.TextMatrix(i ,0) = i             olist.TextMatrix(i ,1) = oRs1.Fields(0).Value        olist.TextMatrix(i ,2) = oRs1.Fields(1).Value        olist.TextMatrix(i ,3) = oRs1.Fields(2).Value        olist.TextMatrix(i ,4) = oRs1.Fields(3).Value               oRs1.movenext    Next  MsgBox("查询结束" )'----------------关闭数据库-----------'    Set oRs1 = NothingSet oCom = Nothing    conn.CloseSet conn = Nothing                        End Sub

6、脚本展示:
在这里插入图片描述
在这里插入图片描述

5、运行情况
5.1点击查询
在这里插入图片描述
5.2、弹出共查询到几行数据

在这里插入图片描述
5.3、查询结束后会有查询结束的弹窗,点击确定即可
在这里插入图片描述
5.4、数据会显示在控件中在这里插入图片描述

七、数据导出EXCEL并保存、查询

7.1、新建模板表格

1、在D盘中新建DataTableTest表格
在这里插入图片描述
2、编辑DataTableTest表格
在这里插入图片描述3、D盘新建日报表文件夹

后面的的表格都保存到这个文件夹中
在这里插入图片描述

7.2、添加导出EXCEL按钮和脚本

1、添加导出到EXCEL按钮脚本
在这里插入图片描述
2、脚本代码

Sub Export_to_Excel()Dim conn                     '定义类对象Dim SCon                     '定义数据库连接字符串Dim oRs1           '定义获取到的数据集Dim oComDim strSQL1Dim mDim ReportSelect '---------------------打开并查询数据库 --------------------'SCon= "Provider=SQLOLEDB.1; Integrated Security =SSPI;Persist Security Info=False; Initial Catalog=Hong ; Data Source=DESKTOP-VFDPROG"strSQL1= "SELECT *  FROM  [Hong].[dbo].[DataTableTest]"Set conn=CreateObject("ADODB.Connection")    conn.ConnectionString = SCon    conn.CursorLocation = 3      conn.OpenSet oRs1 = CreateObject("ADODB.Recordset")Set oCom = CreateObject("ADODB.Command")    oCom.CommandType = 1Set oCom.ActiveConnection = conn    oCom.CommandText = strSQL1           Set oRs1 = oCom.Execute                  m = oRs1.RecordCount    MsgBox("查询到表格共有" & m &"行数据") '---------------------打开Excel模板 --------------------'        Dim objExcelApp,objExcelBook,objExcelSheet,a,b ,iSet objExcelApp =CreateObject("Excel.Application")    objExcelApp.Visible=TrueSet a =objExcelApp.Workbooks.Open("D:\DataTableTest.xlsx")  Set b =a.Worksheets("Sheet1")    b.Range("A2") = "日期: " & CStr(Year(Now)) & "年"  & CStr(Month(Now)) &"月" & CStr(Day(Now)) &"日"             objExcelApp.Worksheets("Sheet1").Activate'---------------------判断有无符合要求的数据 --------------------'        If (oRs1.EOF) Then    MsgBox("没有符合要求的记录")ElseMsgBox("符合要求的记录")oRs1.movefirst                        For i = 4 To m+3                    With objExcelApp.Worksheets("Sheet1")            .cells(i,1).value=CStr(oRs1.Fields(0).Value)            .cells(i,2).value=CStr(oRs1.Fields(1).Value)            .cells(i,3).value=CStr(oRs1.Fields(2).Value)            .cells(i,4).value=CStr(oRs1.Fields(3).Value)            End With            oRs1.MoveNext        NextEnd If '---------------------以日期命名,并保存到指定文件夹 --------------------'        Dim patch,filename filename=CStr(Year(Now))&"_"&CStr(Month(Now))&"_"&CStr(Day(Now))&"_"&CStr(Hour(Now))&"_"&CStr(Minute(Now))&"_"&CStr(Second(Now)) patch= "D:\日报表\"&filename&".xlsx"  objExcelApp.ActiveWorkbook.SaveAs patch objExcelApp.Workbooks.Close objExcelApp.Quit          MsgBox "成功生成数据文件!"  '---------------------关闭数据库 --------------------'Set objExcelApp= NothingSet oRs1 = NothingSet oCom = Nothingconn.CloseSet conn = NothingEnd Sub

3、脚本展示

在这里插入图片描述

4、添加按钮
在这里插入图片描述5、按钮添加脚本
在这里插入图片描述
6、运行
1、点击导出EXCEL
在这里插入图片描述
2、弹窗点击确定
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

3、导出结果
在这里插入图片描述数据统一至
在这里插入图片描述

八、运行界面显示EXCEL数据

8.1、D盘日报表文件夹内新建web文件夹
在这里插入图片描述

8.2、添加Web Browser 控件,并修改名称Web

在这里插入图片描述在这里插入图片描述

8.3、添加Generate_report脚本
在这里插入图片描述

8.4、脚本代码

Sub Generate_report()                             On Error Resume Next                     Dim conn                     '定义类对象Dim SCon                     '定义数据库连接字符串Dim oRs1           '定义获取到的数据集Dim oComDim strSQL1Dim mDim ReportSelect '---------------------打开并查询数据库 --------------------'SCon= "Provider=SQLOLEDB.1; Integrated Security =SSPI;Persist Security Info=False; Initial Catalog=Hong ; Data Source=DESKTOP-VFDPROG"strSQL1= "SELECT *  FROM  [Hong].[dbo].[DataTableTest]"Set conn=CreateObject("ADODB.Connection")    conn.ConnectionString = SCon    conn.CursorLocation = 3      conn.OpenSet oRs1 = CreateObject("ADODB.Recordset")Set oCom = CreateObject("ADODB.Command")    oCom.CommandType = 1Set oCom.ActiveConnection = conn    oCom.CommandText = strSQL1           Set oRs1 = oCom.Execute                  m = oRs1.RecordCount    MsgBox("查询到表格共有" & m &"行数据") '---------------------打开Excel模板 --------------------'        Dim objExcelApp,objExcelBook,objExcelSheet,a,b ,iSet objExcelApp =CreateObject("Excel.Application")    objExcelApp.Visible=False     objExcelApp.DisplayAlerts=FalseSet a =objExcelApp.Workbooks.Open("D:\DataTableTest.xlsx") Set b =a.Worksheets("Sheet1")    b.Range("A2") = "日期: " & CStr(Year(Now)) & "年"  & CStr(Month(Now)) &"月" & CStr(Day(Now)) &"日"             objExcelApp.Worksheets("Sheet1").Activate'---------------------判断有无符合要求的数据 --------------------'        If (oRs1.EOF) Then    MsgBox("没有符合要求的记录")ElseMsgBox("符合要求的记录")oRs1.movefirst                        For i = 4 To m+3                    With objExcelApp.Worksheets("Sheet1")            .cells(i,1).value=CStr(oRs1.Fields(0).Value)            .cells(i,2).value=CStr(oRs1.Fields(1).Value)            .cells(i,3).value=CStr(oRs1.Fields(2).Value)            .cells(i,4).value=CStr(oRs1.Fields(3).Value)            End With            oRs1.MoveNext        Next        '---------------------文件同时保存到D:\日报表\web文件夹中--------------------'         a.SaveAs "D:\日报表\web\日报表.htm",44 '---------------------以日期命名,并保存到指定文件夹 --------------------'        Dim patch,filename filename=CStr(Year(Now))&"_"&CStr(Month(Now))&"_"&CStr(Day(Now))&"_"&CStr(Hour(Now))&"_"&CStr(Minute(Now))&"_"&CStr(Second(Now)) patch= "D:\日报表\"&filename&".xlsx"                   objExcelApp.ActiveWorkbook.SaveAs patch objExcelApp.Workbooks.Close objExcelApp.Quit          MsgBox "成功生成数据文件!"          '---------------------关闭数据库 --------------------'Set objExcelApp= NothingSet objExcelBook= NothingSet objExcelSheet= NothingSet oRs1 = NothingSet oCom = Nothingconn.CloseSet conn = Nothing End If    '---------------------报表显示 --------------------'        Dim wbCtrlSet wbCtrl = ScreenItems("Web") '"Web"为Web控件名称wbCtrl.Navigate  "D:\日报表\web\日报表.htm"End Sub

8.5、脚本展示

在这里插入图片描述

在这里插入图片描述

8.6 添加按钮
在这里插入图片描述
8.7、添加脚本
在这里插入图片描述

8.8 运行结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


参考文章:https://blog.csdn.net/qq_58220938/article/details/119539670

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时候联系我们修改或删除,在此表示感谢。

特别提醒:

1、请用户自行保存原始数据,为确保安全网站使用完即被永久销毁,如何人将无法再次获取。

2、如果上次文件较大或者涉及到复杂运算的数据,可能需要一定的时间,请耐心等待一会。

3、请按照用户协议文明上网,如果发现用户存在恶意行为,包括但不限于发布不合适言论妄图

     获取用户隐私信息等行为,网站将根据掌握的情况对用户进行限制部分行为、永久封号等处罚。

4、如果文件下载失败可能是弹出窗口被浏览器拦截,点击允许弹出即可,一般在网址栏位置设置

5、欢迎将网站推荐给其他人,网站持续更新更多功能敬请期待,收藏网站高效办公不迷路。

      



登录后回复

共有0条评论