技成培训网 技成学习APP 技成工具箱 技成企业服务

欢迎回到技成培训网

技成培训网

电工题库宝典

技成电工课堂

PLC练习题

技成PLC课堂

变频器故障查询

技成PLC学吧

伺服驱动故障查询

技成PLC网校

当前位置:技成首页 > 文章中心 > 技成百科 > 为什么生成的报表每行都是一样的?

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

刘玉蓉 发布于2014-09-04 17:50 65 0 标签:

全局动作,每隔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: empeeiao.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: empeeiao.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: empee"&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

若有收获,就点个赞吧!

文章来源于网络及文献如有侵权请联系站长
分享到:

微信扫一扫分享

阅读与本文标签相同的文章

相关推荐

最新文章 热门文章
最新课程 免费课程
PLC资料下载 电工电气资料下载
应用新秀
变频器故障代码查询APP
伺服故障代码查询APP
技成
手机APP
热门标签