wincc吧 关注:2,649贴子:6,297
  • 14回复贴,共1

求大神帮我注解这段程序,细致一点,万谢!

只看楼主收藏回复

Sub OnClick(Byval Item)
'定义变量
Dim spro,sdsn,sser,scon,conn,ssql,ors,ocom
Dim tagdnsname
Dim m,i
Dim local_begin_time,local_end_time,utc_begin_time,utc_end_time
Dim count_data'数据记录的个数
Dim sum_data'数据记录的累积
Dim aver'平均值
item.Enabled=False
On Error Resume Next
'查询条件,utc开始时间,utc结束时间,时间间隔,catalog
Set tagdnsname=HMIRuntime.Tags("@DatasourceNameRT")
tagdnsname.Read
Set local_begin_time=HMIRuntime.Tags("timebegin")
local_begin_time.read
Set local_end_time=HMIRuntime.Tags("timeend")
local_end_time.Read
utc_begin_time=DateAdd("h",-8,local_begin_time.value)
utc_end_time=DateAdd("h",-8,local_end_time.value)
utc_begin_time=Year(utc_begin_time) & "-" & Month(utc_begin_time) & "-" & Day(utc_begin_time) & " " & Hour(utc_begin_time) & ":" & Minute(utc_begin_time) & ":" & Second(utc_begin_time)
utc_end_time=Year(utc_end_time) & "-" & Month(utc_end_time) & "-" & Day(utc_end_time) & " " & Hour(utc_end_time) & ":" & Minute(utc_end_time) & ":" & Second(utc_end_time)
'创建到数据库的链接
spro = "Provider=WinCCOLEDBProvider.1;"
sdsn = "Catalog=CC_upzjg_11_12_15_14_45_14R;"
sser = "Data Source=.\WinCC"
scon = spro + sdsn + sser
ssql = "Tag:R,('test\testdata'),'2011-12-15 7:27:00','2011-12-15 8:27:00'"
MsgBox "open with:" &vbCr & scon &vbCr &ssql &vbCr
Set conn = CreateObject("ADODB.Connection")
conn.ConnectionString = scon
conn.CursorLocation = 3
conn.Open
Set ors = CreateObject("ADODB.Recordset")
Set ocom = CreateObject("ADODB.Command")
ocom.CommandType = 1
Set ocom.ActiveConnection = conn
ocom.CommandText = ssql
Set ors=ocm.Execute
'读取数据
m=ors.RecordCount
count_data=0.0
sum_data=0.0
If(m>0)Then
Do While Not ors.eof'查看是否到记录结束
sum=sum+ors.fields(0).value
count_data=count_data+1.0
ors.movenext
Loop
Else
MsgBox "没有查询到数据............."
item.Enabled=True
Set ors=Nothing
conn.close
Set conn=Nothing
End If
Set ors=Nothing
conn.close
Set conn=Nothing
'写数据到wincc运行系统
aver=sum_data/count_data
HMIRuntime.Tags("average").Write aver
HMIRuntime.Tags("sumdata").Write sum_data
HMIRuntime.Tags("countdata").Write count_data
End Sub
@林羽风520


1楼2017-06-29 15:13回复
    这是我在网上找的一段程序,我是想用脚本访问归档变量数据库,按时间段把数据取出来,显示在输入输出域里,求大神帮忙@林羽风520


    2楼2017-06-29 15:15
    回复
      2025-12-26 15:50:22
      广告
      不感兴趣
      开通SVIP免广告
      做啥?


      IP属地:江苏来自Android客户端3楼2017-07-04 10:02
      回复
        如果按自己想设定的时间,把日期改为变量啊,Tag:R后面,你需要connectivity package 授权


        IP属地:江苏来自Android客户端4楼2017-07-04 10:07
        收起回复
          Sub OnClick(ByVal Item)
          Dim dataname,m
          Dim ltimebegin,ltimeend,utctimebegin,utctimeend
          Dim scon,ssql,ors,ocom
          Dim mint,moutt,boutt,bint
          item.Enabled=False
          On Error Resume Next
          Set dataname = HMIRuntime.Tags("@DatasourceNameRT").Read
          Set ltimebegin = HMIRuntime.Tags("tag_timebegin").Read
          Set ltimeend = HMIRuntime.Tags("tag_timeend").Read
          Msgbox "open with:"&dataname &ltimebegin
          utctimebegin = Dateadd("h",-8,ltimebegin.value)
          utctimeend = Dateadd("h",-8,ltimeend.value)
          utctimebegin = Year(utctimebegin) & "-" & Month(utctimebegin) & "-" & Day(utctimebegin) & " " & Hour(utctimebegin) & ":" & Minute(utctimebegin) & ":" & Second(utctimebegin)
          utctimeend = Year(utctimeend) & "-" & Month(utctimeend) & "-" & Day(utctimeend) & " " & Hour(utctimeend) & ":" & Minute(utctimeend) & ":" & Second(utctimeend)
          scon = "Provider=WinCCOLEDBProvider.1; Catalog='&dataname.value&'; Data Source=ES.\WinCC"
          Set conn = CreateObject("ADODB.Connection")
          conn.ConnectionString = scon
          conn.CursorLocation = 3
          conn.Open
          ssql = "Tag:R,('lsw\branch_intemperature,lsw\branch_outtemperature,lsw\main_outtemperature,lsw\main_intemperature'),'"&utctimebegin&"','"&utctimeend&"'"
          ssql = ssql + "order by timestamp ASC"
          MsgBox "open with:" &vbCr & scon &vbCr &ssql &vbCr
          Set ors = CreateObject("ADODB.Recordset")
          Set ocom = CreateObject("ADODB.Command")
          ocom.CommandType = 1
          Set ocom.ActiveConnection = conn
          ocom.CommandText = ssql
          Set ors=ocom.Execute
          m=ors.RecordCount
          If m > 0 Then
          bint = ors.fields(0).value
          boutt = ors.fields(1).value
          moutt = ors.fields(2).value
          mint = ors.fields(4).value
          Else
          MsgBox "没有查询到数据............."
          item.Enabled=True
          Set ors=Nothing
          conn.close
          Set conn=Nothing
          End If
          Set ors=Nothing
          conn.close
          Set conn=Nothing
          HMIRuntime.Tags("branch_int").Write bint
          HMIRuntime.Tags("branch_outt").Write boutt
          HMIRuntime.Tags("main_int").Write mint
          HMIRuntime.Tags("main_outt").Write moutt
          End Sub
          @林羽风520 大神,有空帮我看看这段程序哪里错了。


          5楼2017-07-05 08:56
          回复
            我大概看看


            IP属地:江苏来自Android客户端6楼2017-07-05 10:09
            回复
              scon = "Provider=WinCCOLEDBProvider.1; Catalog='&dataname.value&'; Data Source=ES.\WinCC"
              这里有问题吧?
              scon = "Provider=WinCCOLEDBProvider.1;"& _
              "Catalog"= &dataname; & _
              " Data Source"="ES.\WinCC" '这里忘记了,ES=LOCAL PC NAME. 有没有点 我记不得了
              ssql = "Tag:R,('lsw\branch_intemperature,lsw\branch_outtemperature,lsw\main_outtemperature,lsw\main_intemperature'),'"&utctimebegin&"','"&utctimeend&"'" '读取多个归档过程值,中间用 分号!!


              IP属地:江苏7楼2017-07-05 10:19
              回复
                还有时间格式,感觉有问题啊,暂时还没想到哪里。。。。感觉没有按官方的结尾啊 .000
                '2017-02-02 12:00:00.000'


                IP属地:江苏8楼2017-07-05 10:22
                回复
                  2025-12-26 15:44:22
                  广告
                  不感兴趣
                  开通SVIP免广告
                  Sub OnClick(ByVal Item)
                  Dim dataname,m
                  Dim ltimebegin,ltimeend,utctimebegin,utctimeend
                  Dim scon,ssql,ors,ocom
                  item.Enabled=False
                  On Error Resume Next
                  dataname = HMIRuntime.Tags("@DatasourceNameRT").Read
                  ltimebegin = HMIRuntime.Tags("tbe").Read
                  ltimeend = HMIRuntime.Tags("ten").Read
                  Msgbox "open with:" &vbCr & dataname &vbCr &ltimebegin &vbCr
                  utctimebegin = Dateadd("h",-8,ltimebegin.value)
                  utctimeend = Dateadd("h",-8,ltimeend.value)
                  utctimebegin = Year(utctimebegin) & "-" & Month(utctimebegin) & "-" & Day(utctimebegin) & " " & Hour(utctimebegin) & ":" & Minute(utctimebegin) & ":" & Second(utctimebegin)
                  utctimeend = Year(utctimeend) & "-" & Month(utctimeend) & "-" & Day(utctimeend) & " " & Hour(utctimeend) & ":" & Minute(utctimeend) & ":" & Second(utctimeend)
                  scon = "Provider=WinCCOLEDBProvider.1; Catalog= &dataname; Data Source=ES.\WinCC"
                  Set conn = CreateObject("ADODB.Connection")
                  conn.ConnectionString = scon
                  conn.CursorLocation = 3
                  conn.Open
                  ssql = "Tag:R,('lsw\branch_intemperature,lsw\branch_outtemperature,lsw\main_outtemperature,lsw\main_intemperature'),'"&utctimebegin&"','"&utctimeend&"'"
                  ssql = ssql + "order by timestamp ASC"
                  MsgBox "open with:" &vbCr & scon &vbCr &ssql &vbCr
                  Set ors = CreateObject("ADODB.Recordset")
                  Set ocom = CreateObject("ADODB.Command")
                  ocom.CommandType = 1
                  Set ocom.ActiveConnection = conn
                  ocom.CommandText = ssql
                  Set ors=ocom.Execute
                  m=ors.RecordCount
                  If m > 0 Then
                  HMIRuntime.Tags("vbint").Write ors.fields(0).value
                  HMIRuntime.Tags("vbout").Write ors.fields(1).value
                  HMIRuntime.Tags("vmint").Write ors.fields(2).value
                  HMIRuntime.Tags("vmout").Write ors.fields(4).value
                  Else
                  MsgBox "没有查询到数据............."
                  item.Enabled=True
                  Set ors=Nothing
                  conn.close
                  Set conn=Nothing
                  End If
                  Set ors=Nothing
                  conn.close
                  Set conn=Nothing
                  End Sub


                  9楼2017-07-05 14:38
                  回复
                    @林羽风520
                    官方给的无数人说好应该是感谢吧,但这段代码错误太多了,我一个初学者,都发现了,下在一步步改,一样样的试。 上面是我新改的,还是有毛病,日期时间上有问题,还有就是“&”这个字符的应用上我还没整太明白。
                    dataname = HMIRuntime.Tags("@DatasourceNameRT").Read 读取变量内容不应该有set,网上流传最多的那个版本里加set了,我试过了,不加set 就能正常读了


                    10楼2017-07-05 14:42
                    回复
                      读取变量 2中方法:
                      直接型:
                      dataname = HMIRuntime.Tags("@DatasourceNameRT").Read
                      或 利用属性读取
                      dim dataname
                      set dataname = HMIRuntime.Tags("@DatasourceNameRT") '这里不能写.READ
                      dataname.read
                      dataname.value.
                      dataname.write
                      。。
                      如果不加set 就不能用它的 method等
                      ScreenItems()一样,可以SET 也可以不写。 区别见上。
                      a = a&b是 组合的意思。对应C语言中是 strcat(a,b)


                      IP属地:江苏11楼2017-07-05 15:16
                      回复
                        你需要的是 项目实践经验,慢慢来吧。


                        IP属地:江苏12楼2017-07-05 15:17
                        收起回复