(转载)Wincc控件制作报表以及导出EXCEL方法介绍

本文详细介绍如何使用Wincc控件创建报表,并实现将报表数据导出至Excel的功能。文章涵盖数据库设置、VBS脚本编写及Excel格式排版等关键步骤。

假设希望做这样一个报表界面,可以根据日期查询:
21.Wincc控件制作报表以及导出EXCEL方法介绍X
希望导出的excel报表文件在C盘根目录,是这个样子:
21.Wincc控件制作报表以及导出EXCEL方法介绍
接下来我们一步步实现这个功能。

  1. Wincc历史趋势的数据库表结构有点不好理解,我们新建一个数据库名字叫做Report,新建一张表,结构是这个样子:
    注意开放sa用户,设置sa用户有管理report数据库权限,使用sql登陆模式。
  2. 我们每5秒往report表写入一条记录,在全局VBS脚本写入如下代码:
    Option Explicit
    Function action
    ‘添加纪录
    Dim T1,T2,P1,P2,F1,F2,L1,L2,A1,A2,S1,S2
    Dim ors,conn,con,ssql,ocom
    Dim PCName
    PCName=hmiruntime.Tags(’@LocalMachineName’).Read
    T1=HMIRuntime.Tags(‘温度1’).Read
    T2=HMIRuntime.Tags(‘温度2’).Read
    P1=HMIRuntime.Tags(‘压力1’).Read
    P2=HMIRuntime.Tags(‘压力2’).Read
    F1=HMIRuntime.Tags(‘流量1’).Read
    F2=HMIRuntime.Tags(‘流量2’).Read
    L1=HMIRuntime.Tags(‘液位1’).Read
    L2=HMIRuntime.Tags(‘液位2’).Read
    A1=HMIRuntime. Tags(‘分析仪1’).Read
    A2=HMIRuntime.Tags(‘分析仪2’).Read
    S1=HMIRuntime.Tags(‘转速1’).Read
    S2=HMIRuntime.Tags(‘转速2’).Read
    con='Provider = SQLOLEDB.1;password = sa;user id = sa;Initial Catalog =Report;Data Source = ’ & PCName & ‘\WINCC’
    Set conn=CreateObject(‘ADODB.Connection’)
    conn.ConnectionString=con
    conn.Cursorlocation=3
    conn.open
    ssql=‘insert into Report(CurDateTime,T1,T2,P1,P2,F1,F2,L1,L2,A1,A2,S1,S2) values(Getdate(),’ _
    & T1 & ‘,’ & T2 & ‘,’ & P1 & ‘,’ & P2 & ‘,’ & F1 & ‘,’ & F2 & ‘,’ & L1 & ‘,’ & L2 & ‘,’ & A1 & ‘,’ & A2 & ‘,’ & S1 & ‘,’ & S2 & ‘)’
    Set ors=CreateObject(‘ADODB.RecordSet’)
    Set ocom=CreateObject(‘ADODB.Command’)
    Set ocom.activeconnection=conn
    ocom.CommandType=1
    ocom.CommandText=ssql
    Set ors=ocom.Execute
    Set ors=Nothing
    conn.close
    Set conn=Nothing
    End Function
    脚本中的函数不做解释。
    3.WINCC页面Report中添加ActiveX控件Microsoft Data and Time Picker Control 6.0(SP4) 、Microsoft Hierarchical FlexGrid Control Version 6.0(OLEDB)、Microsoft ProgressBar Control 6.0(SP4)以及按钮、静态文本等控件。这控件需要右键点击ACTIVEX控件-添加才会出现在控件列表,如果提示需要注册,安装一下VB6即可。添加后Microsoft Data and Time Picker Control 6.0(SP4)控件修改为DTPicker,Microsoft Hierarchical FlexGrid Control Version 6.0(OLEDB)控件名字修改为HFGrid,Microsoft ProgressBar Control 6.0(SP4)名字修改为Progress,默认不显示。
  3. 查询按钮鼠标点击事件VBS脚本为:
    Sub OnClick(ByVal Item)
    Dim sdate
    Dim conn
    Dim ssql
    Dim ors
    Dim ocom
    Dim scon
    Dim DBGrid
    Dim ADODC
    Dim syear
    Dim smonth
    Dim sday
    Dim PCName
    PCName=HMIRuntime.Tags(’@LocalMachineName’).Read
    syear=CStr(Year(ScreenItems(‘DTPicker’).value))
    If Month(ScreenItems(‘DTPicker’).value)<10 Then
    smonth= ‘0’ & CStr(Month(ScreenItems(‘DTPicker’).value))
    Else
    smonth=CStr(Month(ScreenItems(‘DTPicker’).value))
    End If
    If Day(ScreenItems(‘DTPicker’).value)<10 Then
    sday= ‘0’ & CStr(Day(ScreenItems(‘DTPicker’).value))
    Else
    sday=CStr(Day(ScreenItems(‘DTPicker’).value))
    End If
    sdate=syear & ‘/’ & smonth & ‘/’ & sday
    scon='Provider = SQLOLEDB.1;Integrated Security=SSPI;Persist SecurityInfo=False;Initial Catalog =Report;Data Source = ’ &PCName & ‘\WINCC’
    ssql=‘select CurDateTime as ‘日期时间’,T1 as ‘温度1’,T2 as ‘温度2’,P1 as ‘压力1’,P2 as ‘压力2’, F1 as ‘流量1’,’ _
    & 'F2 as ‘流量2’, L1 as ‘液位1’,L2 as ‘液位2’,A1 as ‘分析仪1’,A2 as ‘分析仪2’,S1 as ‘转速1’,S2 as ‘转速2’ from Report ’ _
    & ‘where convert(char(10),CurDateTime,111)= ‘’ & sdate & ‘’’
    Set conn=CreateObject(‘ADODB.Connection’)
    conn.ConnectionString=scon
    conn.Cursorlocation=3
    conn.open
    Set ors=CreateObject(‘ADODB.RecordSet’)
    Set ocom=CreateObject(‘ADODB.Command’)
    ocom.commandtype=1
    Set ocom.ActiveConnection=conn
    ocom.CommandText=ssql
    Set ors=ocom.Execute
    Set DBGrid=ScreenItems(‘HFGrid’)
    Set DBGrid.DataSource=ors
    DBGrid.Refresh
    ScreenItems(‘HFGrid’).colwidth(1)=2500
    Set ors=Nothing
    conn.close
    Set conn=Nothing
    End Sub
  4. 导出到Excel按钮的鼠标点击事件VBS脚本为:
    Sub OnClick(ByVal Item)
    Dim i,j,k,m,n,filename
    Dim xlapp
    Dim HFGrid
    Dim ors
    If ScreenItems(‘HFGrid’).rows>1 Then
    ScreenItems(‘progress’).value =0
    ScreenItems(‘progress’).visible = True
    Set xlapp=CreateObject(‘Excel.Application’)
    xlapp.visible=False
    xlapp.workbooks.add
    For k=1 To ScreenItems(‘HFgrid’).cols-1
    xlapp.worksheets(1).cells(3,k)=ScreenItems(‘HFGrid’).TextMatrix(0,k)
    Next
    xlapp.worksheets(1).cells(1,1)=‘XX装置生产工艺参数报表’
    m=ScreenItems(‘HFGrid’).rows
    For i=1 To m-1
    For j= 1 To ScreenItems(‘HFGrid’).cols-1
    xlapp.worksheets(1).cells(i+3,j)=ScreenItems(‘HFGrid’).TextMatrix(i,j)
    Next
    ScreenItems(‘progress’).value =i*100/m
    'ScreenItems(‘HFGrid’).recordset.movenext
    Next
    '以下代码处理日期时间数据格式以及表格边框线、标题合并单元格等排版
    xlapp.worksheets(1).range(‘a1:m1’).mergecells=True
    xlapp.worksheets(1).range(‘a4:a’ & CStr(2+ScreenItems(‘HFGrid’).rows)).NumberFormat=‘yyyy/mm/dd hh:mm:ss’
    xlapp.worksheets(1).range(‘a1’).ColumnWidth =20
    xlapp.worksheets(1).cells(2,1)=‘生成时间:’
    xlapp.worksheets(1).cells(2,2)=Year(Now) & ‘年’ & Month(Now) & ‘月’ & Day(Now) & ‘日’
    xlapp.worksheets(1).cells(1,1).HorizontalAlignment = 3
    xlapp.worksheets(1).range(‘a3:m’ & CStr(2+ScreenItems(‘HFGrid’).rows)).borders(1).linestyle=9
    xlapp.worksheets(1).range(‘a3:m’ & CStr(2+ScreenItems(‘HFGrid’).rows)).borders(1).weight=2
    xlapp.worksheets(1).range(‘a3:m’ & CStr(2+ScreenItems(‘HFGrid’).rows)).borders(2).linestyle=9
    xlapp.worksheets(1).range(‘a3:m’ & CStr(2+ScreenItems(‘HFGrid’).rows)).borders(2).weight=2
    xlapp.worksheets(1).range(‘a3:m’ & CStr(2+ScreenItems(‘HFGrid’).rows)).borders(3).linestyle=9
    xlapp.worksheets(1).range(‘a3:m’ & CStr(2+ScreenItems(‘HFGrid’).rows)).borders(3).weight=2
    xlapp.worksheets(1).range(‘a3:m’ & CStr(2+ScreenItems(‘HFGrid’).rows)).borders(4).linestyle=9
    xlapp.worksheets(1).range(‘a3:m’ & CStr(2+ScreenItems(‘HFGrid’).rows)).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.close
    xlapp.quit
    ScreenItems(‘progress’).Visible =False
    Msgbox ‘成功导出到C:’
    End If
    End Sub
内容概要:本文围绕单相统一功率因数变流器的控制技术展开深入研究,提出并实现了基于不平衡d-q坐标系的控制器设计方案,旨在提升单相电压源逆变器(VSI)或交直变流器在统一功率因数模式下的运行性能。研究采用同步旋转参考坐标系下的控制策略,有效解决了单相系统中功率波动与电流畸变等问题,增强了系统的动态响应能力、稳态精度及抗干扰性。通过Simulink仿真平台构建完整的系统模型,对控制算法进行了全面验证,涵盖启动过程、负载突变、电网扰动等多种工况,充分展示了该方法的可行性与优越性。同时,文中提供了详细的仿真资源获取途径,便于读者复现与拓展研究。; 适合人群:具备电力电子、自动控制及电力系统等相关专业知识背景,从事新能源发电、微电网、电能质量治理、变流器控制等领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①应用于单相逆变器实现高功率因数并网控制的技术开发与优化;②为弱电网环境下变流器稳定运行控制策略的研究提供仿真基础与技术支撑;③服务于高校相关课程教学、科研课题攻关及实际工程项目中的控制器设计与验证工作。; 阅读建议:建议读者结合所提供的Simulink仿真模型进行动手实践,重点掌握d-q坐标变换、电流环设计、PI参数整定等关键环节,并尝试将该方法推广至其他类型的单相电力电子系统中,进一步深化对同步参考坐标系下控制理论的理解与应用。
内容概要:本文围绕690V直驱风机网侧逆变器的阻抗建模与稳定性分析展开,基于Simulink平台实现仿真研究,属于博士论文复现类工作。研究重点在于直驱风机并网系统中网侧逆变器的小信号阻抗建模,通过构建其正负序阻抗模型,深入分析其在弱电网条件下的交互稳定性问题。内容涵盖阻抗建模理论、小信号扫频辨识方法的仿真实现,并通过仿真手段验证系统在不同电网强度下的稳定裕度,揭示潜在的宽频带振荡风险及其形成机理。该资源提供完整的Matlab/Simulink代码与模型,有助于研究人员系统掌握新能源并网系统的稳定性分析方法与技术细节。; 适合人群:具备电力电子、电力系统自动化或新能源并网等相关专业背景,熟悉Matlab/Simulink仿真环境,从事新能源发电、并网控制与稳定性研究的研究生、科研人员及工程技术人员。; 使用场景及目标:① 学习并复现直驱风机等新能源发电系统的序阻抗建模方法;② 掌握利用Simulink进行小信号扫频以辨识系统阻抗特性并评估稳定性的关键技术;③ 深入理解弱电网条件下并网逆变器的稳定性问题、振荡机理及锁相环、电流控制器等关键环节对系统稳定性的影响。; 阅读建议:学习者应结合所提供的Simulink模型与配套代码,逐步操作并理解各功能模块的设计原理,重点关注控制环路对阻抗特性的作用,通过调整系统参数进行对比仿真,以深化对理论知识的理解并提升实际工程问题的分析与解决能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值