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

全局动作,每隔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

相关推荐

  • wincc7.5报警器响后报警确认声音不停

    wincc7.5Sp1+Udp4,设置horn报警器,报警响了,但是报警确认后报警声音没有停止,一直响,怎么搞呢 问题补充:horn报警器不行,要么响不停,要么不响,还有其它办法吗…

    SIMATIC WinCC 2021年7月5日
  • Wincc与多台PLC通讯的方案选择

    目前我们这边的情况是这样的,现场有多台西门子1200PLC,需要上位机做数据采集,上位机选用WINCC,但是听说wincc最多连接8台PLC,那么就有如下几个方案:1、由单独的PL…

    SIMATIC WinCC 2020年11月1日
  • Wincc变量复制问题

    原wincc项目和400PLC通讯,在原项目基础上新建了一个1500通道将400通道下的变量组复制粘贴到1500通道下,显示连接成功但运行画面变量处是灰色的。怎么办呀各位老铁。 最…

    SIMATIC WinCC 2021年7月5日
  • WinCC与S7-300以太网通讯问题

    这几天做项目,现场发现一个奇怪的现象,硬件配置是315-2PN通过以太网和上位WinCC6.0通讯,每次启动WinCC后5秒时间后就什么都点不动了,那位高手遇到过这种情况啊,谢谢指…

    SIMATIC WinCC 2017年7月25日
  • 怎样在WINCC上显示小数?

    我下位机的数是个整型数(有符号16位数),怎样在上位机I/O域上显示成小数,精确到小数点后一位; 怎样在上位机I/O域中输入负值,请各位高手指教,多谢! 问题补充:这个数…

    SIMATIC WinCC 2019年6月11日
  • OPC服务器和客户端互访数据

    现在手上有套项目,wincc和315-2pn/dp通过mpi进行通讯监控参数,别人也有套项目,是套国产的DCS系统,客户要求我方的wincc上部分参数能够显示到对方DCS系统的上位…

    SIMATIC WinCC 2017年7月25日
  • WINCC中C语言编译错误

    我的WINCC项目中,新建一个按钮,在事件中,里面什么代码都还没有,可是 ,编译的时候还是提示说有错误我,而且基本上是每行都有错误,现在是每个事件的代码写完后总有错,编译…

    SIMATIC WinCC 2019年6月11日
  • 如果学习好WINCC中的脚本语言?

    WINCC简单的一些开关按钮一些模拟量图形变量等赋值是比较简单的,至于那些其中所使用的脚本语言,如C动作,VB动作,这些东西好难学啊?大家有什么好的方法没?是不是要把自己计算机里的…

    SIMATIC WinCC 2019年6月11日
  • wincc结构变量使用中遇到问题

    在wincc组态I/o域中和量程控件引用结构变量,改变结构变量的值,两个并不会同时改变,按道理,这两个应该是一样的显示,但是并不是,每次只改变一个,另外一个就不会改变,这是怎么回事…

    2017年6月13日
  • wincc 疑问请高手解答

    曾看到过一个项目是这样做的,在PLC里对模拟量只进行了接收操作,即是0-32768之间的数,然后在WINCC的画面输入量程就把数显示在画面上了,请问这个WINCC画面是怎么做的。 …

    SIMATIC WinCC 2018年3月6日