一、案例展示

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

图二图二:数据保存到指定的excel中!
图三图三:excel已时间+合同号进行保存!

二、制作思路

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

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

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

三、项目建立

3.1创建报表模板

1、首先在项目工程中新建一个文件夹
在这里插入图片描述2、在此文件夹下新建报表模板和日生产报表文件夹
在这里插入图片描述3、在报表模板中创建一个EXCEL,名称为:3D检测报表模板
在这里插入图片描述4、表格的内容根据甲方要求进行调整
在这里插入图片描述其中浅蓝色背景的表格,是需要工人现场输入的数据!
白色部分是需要自动计算出的!

3.2新建内部变量

因公司问题,所以这里我重新整理一份测试版,望大家谅解!
内部变量新建一个TEST变量组,里面添加变量
在这里插入图片描述

3.3新建画面

在这里插入图片描述

四、脚本讲解

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

4.1 数据确认 按钮脚本

此脚本作用是把手动输入的合同号等,输入excel中,
脚本在单击鼠标处编写
在这里插入图片描述

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= Nothing

Dim 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_running
   
If 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
 
 

五、运行展示

在这里插入图片描述

好管坏管各测试生产一次
在这里插入图片描述

六、项目文件下载

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

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐