V7.5报表(现场调试复盘)

  • 一、案例展示
  • 二、制作思路
  • 三、项目建立
  • 3.1创建报表模板
  • 3.2新建内部变量
  • 3.3新建画面
  • 四、脚本讲解
  • 4.1 数据确认 按钮脚本
  • 4.2 项目模板脚本
  • 五、运行展示
  • 六、项目文件下载

一、案例展示

WINCC把数据写入mysql_数据

上面图一为运行的展示效果,其中有输入输出框有感叹号,是因为通讯的断开!

WINCC把数据写入mysql_数据_02

图二:数据保存到指定的excel中!

WINCC把数据写入mysql_excel_03

图三:excel已时间+合同号进行保存!

二、制作思路

之前也写了一篇报表的制作,是从西门子论坛中找到的资料进行测试编写的,没有现场使用过。这个版本的报表是在上海某集团使用的。

之前的报表,主要思路是,把生产的数据存到SQL中,然后wincc在已特定条件(我使用的是时间)读取SQL的数据,存到excel中,然后再已时间命名保存!

这次在做报表之前,询问了使用python写人工智能的朋友,这种只简单记录生产数据的报表是否能跳过SQL,而直接写数据到excel中,然后在保存,这一想法得到了肯定,然后在此项目成功的实现,希望此文章对您能有用!

三、项目建立

3.1创建报表模板

1、首先在项目工程中新建一个文件夹

WINCC把数据写入mysql_WINCC把数据写入mysql_04

2、在此文件夹下新建报表模板和日生产报表文件夹

WINCC把数据写入mysql_数据_05

3、在报表模板中创建一个EXCEL,名称为:3D检测报表模板

WINCC把数据写入mysql_数据_06

4、表格的内容根据甲方要求进行调整

WINCC把数据写入mysql_excel_07

其中浅蓝色背景的表格,是需要工人现场输入的数据!

白色部分是需要自动计算出的!

3.2新建内部变量

因公司问题,所以这里我重新整理一份测试版,望大家谅解!

内部变量新建一个TEST变量组,里面添加变量

WINCC把数据写入mysql_3D_08

3.3新建画面

WINCC把数据写入mysql_excel_09

四、脚本讲解

其中有三个地方需要写脚本1、数据确认按钮 2、项目模板 3、全局动作中

4.1 数据确认 按钮脚本

此脚本作用是把手动输入的合同号等,输入excel中,

脚本在单击鼠标处编写

WINCC把数据写入mysql_excel_10

Sub OnClick(Byval Item)
‘--------------------- 生产数据清零 --------------------’
 HMIRuntime.Tags(“生产总根数”).write 0 '总根数进行清零
 HMIRuntime.Tags(“好料根数”).write 0 '好料根数进行清零
 HMIRuntime.Tags(“坏料根数”).write 0 '坏料根数进行清零
 HMIRuntime.Tags(“合格率”).write “0%” '合格率进行清零Dim Class_Shift,Manipulator,Contract_No,Steel_Grade,Inspection_Number,Heat_Number,Trial_Batch_Number,Norm,Standard,Length,speed
‘--------------------- 读取外部输入变量 --------------------’
 Class_Shift = HMIRuntime.Tags(“班别/班次”).read
 Manipulator = HMIRuntime.Tags(“操作者”).read
 Contract_No = HMIRuntime.Tags(“合同号”).read
 Steel_Grade = HMIRuntime.Tags(“钢种”).read
 Inspection_Number = HMIRuntime.Tags(“检验号”).read
 Heat_Number = HMIRuntime.Tags(“炉号”).read
 Trial_Batch_Number = HMIRuntime.Tags(“试批号”).read
 Norm = HMIRuntime.Tags(“规格”).read
 Standard = HMIRuntime.Tags(“标准”).read
 Length = HMIRuntime.Tags(“长度”).read
 speed = HMIRuntime.Tags(“显示速度”).read

‘---------------------打开Excel模板 --------------------’

Dim objExcelApp,objExcelBook,objExcelSheet,a,b
 Set objExcelApp =CreateObject(“Excel.Application”)
 objExcelApp.Visible=True
 Set a =objExcelApp.Workbooks.Open(HMIRuntime.ActiveProject.Path & “\report\报表模板\3D检测报表模板.xlsx”)
 Set b =a.Worksheets(“Sheet1”)
 b.Range(“F2”) = CStr(Year(Now)) & “年” & CStr(Month(Now)) &“月” & CStr(Day(Now)) &“日”
 objExcelApp.Worksheets(“Sheet1”).Activate


‘---------------------向EXCEL写入数据的数据 --------------------’

With objExcelApp.Worksheets("Sheet1")
         .cells(5,2).value = speed
         .cells(5,4).value = 0
         .cells(5,6).value = 0
         .cells(5,8).value = 0
         .cells(6,6).value = 0
     
     
        .cells(2,2).value = Class_Shift
        .cells(2,4).value = Manipulator
        .cells(3,2).value = Contract_No
        .cells(3,4).value = Steel_Grade
        .cells(3,6).value = Inspection_Number
        .cells(3,8).value = Heat_Number
        .cells(4,2).value = Trial_Batch_Number
        .cells(4,4).value = Norm
        .cells(4,6).value = Standard
        .cells(4,8).value = Length
        
        End With

‘---------------------以日期命名,并保存到指定文件夹 --------------------’

objExcelApp.DisplayAlerts = False '对打开的文件,直接保存时,避免弹出对话框窗口,而是直接覆盖
 Dim patch,filename
 filename=CStr(“3D检测当日报表”)
 patch= HMIRuntime.ActiveProject.Path & “\report\日生产报表”&filename&“.xlsx”
 objExcelApp.ActiveWorkbook.SaveAs patch
 objExcelApp.ActiveWorkbook.SaveAs HMIRuntime.ActiveProject.Path & “\report\日生产报表\web\日报表.htm”,44
 objExcelApp.Workbooks.Close
 objExcelApp.Quit
‘---------------------关闭Excel模板 --------------------’
 Set objExcelApp= NothingDim wbCtrl
 Set wbCtrl = HMIRuntime.Screens(“报表界面_TEST”).ScreenItems(“myweb”) '"Web"为Web控件名称
 wbCtrl.Navigate HMIRuntime.ActiveProject.Path & “\report\日生产报表\web\日报表.htm”MsgBox “成功生成数据文件!”
End Sub

2、项目模板 3、全局动作中

4.2 项目模板脚本

Sub report
Dim good_running,bad_running,Running
 good_running = HMIRuntime.Tags(“好管运行”).read Or HMIRuntime.Tags(“合格三星拨料运行”).read
 bad_running = HMIRuntime.Tags(“坏管运行”).read Or HMIRuntime.Tags(“不合格三星拨料运行”).read
 Running=good_running Or bad_runningIf Running Then
 ‘--------------------- 合格率计算 --------------------’
 Dim Total_Number,OK_Number,NG_Number,Pass_Rate,HT,HT1
 ‘------- 数据读取 --------’
 Total_Number = HMIRuntime.Tags(“生产总根数”).read
 OK_Number = HMIRuntime.Tags(“好料根数”).read
 NG_Number = HMIRuntime.Tags(“坏料根数”).read
 NG_Number = HMIRuntime.Tags(“坏料根数”).read
 HT = HMIRuntime.Tags(“TO_3D_合同号”).read
'------- 数据计算 --------' 
  Total_Number = Total_Number + 1
  
  If good_running Then
    OK_Number = OK_Number + 1
  End If
  
  If bad_running Then
    NG_Number = NG_Number + 1
  End If
  
  Pass_Rate = OK_Number / Total_Number*100
  Pass_Rate = FormatNumber(Pass_Rate, 2) & "%"

  'MsgBox("查询到表格共有" & Total_Number &"行数据")
  '------- 数据输出 --------' 
  HMIRuntime.Tags("生产总根数").write Total_Number
  HMIRuntime.Tags("好料根数").write OK_Number
  HMIRuntime.Tags("坏料根数").write NG_Number
  HMIRuntime.Tags("合格率").write Pass_Rate
  
'--------------------- 写入日生产报表数据 --------------------' 
   '------- 打开当日报表 --------'  
 Dim objExcelApp,objExcelBook,objExcelSheet,a,b
	Set objExcelApp =CreateObject("Excel.Application")
	    objExcelApp.Visible=True
	Set a =objExcelApp.Workbooks.Open(HMIRuntime.ActiveProject.Path & "\report\日生产报表\3D检测当日报表.xlsx")  
	Set b =a.Worksheets("Sheet1")
	    b.Range("F2") =  CStr(Year(Now)) & "年"  & CStr(Month(Now)) &"月" & CStr(Day(Now)) &"日"         
	    objExcelApp.Worksheets("Sheet1").Activate  
   
   '------- 向EXCEL写入数据的数据  --------'
Dim m,date_now,speed,data_Length,status_Code,status,number_of_errors 
   m=7+Total_Number
   date_now=CStr(Year(Now))&"/"&CStr(Month(Now))&"/"&CStr(Day(Now))&"_"&CStr(Hour(Now))&":"&CStr(Minute(Now))&":"&CStr(Second(Now))
   speed = HMIRuntime.Tags("SPEE").read
   speed = speed/10 & "m/min"
   data_Length = HMIRuntime.Tags("TO_3D_长度").read
   data_Length = data_Length & "mm"
	   If good_running Then
	    status_Code = 1
	    status = "OK"	   
	   End If
  
	  If bad_running Then
	    status_Code = 0
        status = "NG"       
	  End If
 number_of_errors = HMIRuntime.Tags("test_错误数").read
   'MsgBox("查询m的值为:" & m)
      
   With objExcelApp.Worksheets("Sheet1")
     
     .cells(5,4).value = Total_Number
     .cells(5,6).value = OK_Number
     .cells(5,8).value = NG_Number
     .cells(6,6).value = Pass_Rate
     
     .cells(m,1).value = Total_Number
     .cells(m,2).value = date_now
     .cells(m,4).value = data_Length
     .cells(m,5).value = status_Code
     .cells(m,6).value = status
     .cells(m,7).value = number_of_errors  
  End With
  'MsgBox("查询m的值为:" & m)
   '---------------------以日期命名,并保存到指定文件夹 --------------------'   
objExcelApp.DisplayAlerts = False '对打开的文件,直接保存时,避免弹出对话框窗口,而是直接覆盖     
Dim patch,filename
 filename=CStr(Year(Now)) & "年"  & CStr(Month(Now)) &"月" & CStr(Day(Now)) &"日" &"_"& HT
 patch=HMIRuntime.ActiveProject.Path & "\report\日生产报表\"&filename&".xlsx" 
 objExcelApp.ActiveWorkbook.SaveAs patch
 Dim patch1,filename1
 filename1=CStr("3D检测当日报表")
 patch1= HMIRuntime.ActiveProject.Path & "\report\日生产报表\"&filename1&".xlsx" 
 objExcelApp.ActiveWorkbook.SaveAs patch1
 objExcelApp.ActiveWorkbook.SaveAs HMIRuntime.ActiveProject.Path & "\report\日生产报表\web\日报表.htm",44
 objExcelApp.Workbooks.Close
 objExcelApp.Quit

'---------------------关闭Excel模板 --------------------'
Set objExcelApp= Nothing

‘---------------------报表显示 --------------------’

Dim wbCtrl
 Set wbCtrl = HMIRuntime.Screens(“报表界面_TEST”).ScreenItems(“myweb”) '"Web"为Web控件名称
 wbCtrl.Navigate HMIRuntime.ActiveProject.Path & “\report\日生产报表\web\日报表.htm”End If
End Sub

五、运行展示

WINCC把数据写入mysql_Code_11

好管坏管各测试生产一次

WINCC把数据写入mysql_Code_12

六、项目文件下载

链接: 项目文件下载链接.



文章知识点与官方知识档案匹配,可进一步学习相关知识


MySQL入门技能树数据库组成表 33584