为什么生成的报表每行都是一样的?

全局动作,每隔10分钟执行一次,用wincc自带的仿真器改变变量的值,脚本如下:
Option Explicit
Function action
Dim objExcelApp,objExcelBook,objExcelSheet 
Dim tagyali1,tagyali2,tagyali3,tagyali4 
Dim tagliuliang1,tagliuliang2
Dim tago2 
Dim tagshijian,sheetname 
Dim i,j 
Dim msg 

'声明
Set tagyali1=HMIRuntime.Tags("aa1")
Set tagyali2=HMIRuntime.Tags("aa2")
Msg="ok" 
sheetname="sheet1" 


On Error Resume Next 
Dim ExcelApp,ExcelBook 
Set ExcelApp=GetObject(,"Excel.Application") 
If TypeName(ExcelApp)="Application" Then 
 For Each ExcelBook In ExcelApp.WorkBooks 
  If ExcelBook.FullName="E:\temp\ee\biao.xls" Then 
    ExcelApp.ActiveWorkbook.Save 
    ExcelApp.Workbooks.Close 
    ExcelApp.Quit 
    Set ExcelApp=Nothing
    Exit For 
  End If 
 Next 
End If 

Set objExcelApp=CreateObject("Excel.Application") 
objExcelApp.Visible=True 
objExcelApp.Workbooks.Open"E:\temp\ee\biao.xls" 
objExcelApp.Worksheets(sheetname).Activate  

'清除模版数据
With objExcelApp.Worksheets(sheetname) 
For i=5 To 25 
For j=1 To 8 
.cells(i,j)=Null 
Next 
Next 
For i=26 To 26 
For j=1 To 7 
.cells(i,j)=Null 
Next 
Next 
End With 


'实时数据写入
tagshijian=Now 
objExcelApp.Worksheets(sheetname).cells(2,2).value=tagshijian 
For i=5 To 25 
With objExcelApp.Worksheets(sheetname)
.cells(i,1).value=tagshijian 
tagyali1.Read
.cells(i,2).value=tagyali1.value
tagyali2.Read
.cells(i,3).value=tagyali2.value 
End With 
Next
MsgBox   
'关闭保存
Dim patch,filename 
filename=CStr(Month(Now))&CStr(Day(Now))+CStr(Hour(Now))&CStr(Minute(Now)) 
patch="E:\temp\ee\"&filename&".xls" 
objExcelApp.ActiveWorkbook.SaveAs patch 
objExcelApp.Workbooks.Close 
objExcelApp.Quit 
Set objExcelApp=Nothing

End Function
问题:第5行到第25行的数据都是一样的,为什么不发生变化?能不能第5行采集某一时刻第1秒的值,第6行采集第2秒的值。。。?

问题补充:
我想实现这样的功能:
1.每个整点对变量进行读值,比如:10:00将变量a1读到单元格里cells(5,1);11:00将变量a1读到单元格里cells(6,1)。。。
2.当读到整点00:00时进行保存,保存的文件名为当天的日期。请问该怎么改这段程序,谢谢!

最佳答案

把tagshijian=Now写在循环里。
你这样写,tagshijian在进入循环前取得了时间值,进入循环后,tagshijian并没变呀,当然你每次的时间都是一样的呀。
同理,变量的值也要在循环里写。

如果你想每秒记录,那没必要写循环,一个是时间不好控制,或者控制不准,再是脚本,不宜执行时间过长。
你再创建一个全局动作,假设叫action1,把触发器设置为按秒触发。
原来的这个动作里只有判断是不是开始记录数据就可以,如果可以,置某变量为1,不可以时置为0,假设变量为ok。

那么action1里面
if HMIRuntime.Tags("ok") = 1 then
''获得当前时间
‘获得各变量的值
''写一条数据
……

end if

提问者对于答案的评价:
谢谢了,我再试试.

原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc263790.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2019年6月11日 上午2:31
下一篇 2019年6月11日 上午2:31

相关推荐