回复:技术专题探讨-WinCC实现报表的不同方法及其应用-发帖整理之方案汇总

万泉河

  • 帖子

    10900
  • 精华

    132
  • 被关注

    1009

论坛等级:至圣

注册时间:2003-06-06

钻石 钻石 如何晋级?

发布于 2009-03-19 16:42:48

0楼


quote:以下是引用虚心+学习在2009-03-09 16:23:37的发言:
我来谈一下我的报表,wincc从5.0一直用到今天,做了不下10几个项目,尝试了很多报表的做法,如VB前台画面、水晶报表、网页报表、wincc自带报表、EXCEL报表等,数据库从开始的ACCESS、SQL server自定义数据库、最终将报表定型在EXCEL+在用户归档,为什么要这么做,主要是为了考虑这样做花的精力少,省时省力,用户归档的数据可以冗余,而且让公司代码水平不高的年轻人可以很快上手。首先是整点数据的采集存储,我是采用用户归档,在用户归档里建张存储实时数据的表,变量的存储按照串行的方式存储,另外再建张表,用来保存需要归档的变量的信息:归档名、显示在表头的中文名、单位,小数点位数等信息。存储数据的过程是先将需要存储的变量名读出,再一个变量一条保存到数据库里。这样的好处就是,代码写好后不再需要改动,其他工程师到现场只有将需要的归档变量填在“归档变量名”表里就行了。
报表输出采用填EXCEL单元格的方式,这样好处是充分利用EXCEL的强大统计计算功能,如日报里的班累计、合计、平均等实现起来非常简单。
下面是我最近帮一个朋友做的印度烧结的报表,供大家斧正:
在用户归档中加入如下2个表:
创建2个归档,归档类型:无限制;通讯:无;控制变量:无;标记:上一次修改。
gdblm:别名:归档变量名
字段名 数据类型 长度 别名
BLWB 字符串 30 变量文本
DW 字符串 10 单位
Tag_name 字符串 30 变量名

ZDGD:整点归档
字段名 数据类型 长度 别名
BM 字符串 30 别名
RQ 日期/时间 日期
SJ 日期/时间 时间
Tag_name 字符串 30 变量名
ZHI 数(浮点) 值

WINCC动作,触发器按每小时的00:00触发。
Option Explicit
Function action

Dim gzd,RM_MASTER,tagstr,tag_name,table_name
Dim tag_N,tag_T,tag_U,i,tag_W
Dim Atag_N,Atag_T,Atag_U,max,Atag_W,idd,sql1,db_time

' On Error Resume Next
RM_MASTER=GetTag("@RM_MASTER")
'RM_MASTER=1
'If RM_MASTER=1 Then
table_name="UA#ZDGD"
db_open
sql="SELECT * FROM " & table_name & " ORDER BY ID DESC"
Set rs = CreateObject("ADODB.Recordset")
rs.Open sql, conn, 1, 1
If Not rs.eof And Not rs.bof Then
idd=rs(0)
db_time=rs("SJ")
Else
idd=0
db_time="00:00"
End If
If Hour(db_time)<>Hour(Now()) Then


sql="SELECT * FROM UA#gdblm ORDER BY ID"
Set rs = CreateObject("ADODB.Recordset")
rs.Open sql, conn, 1, 1
If Not rs.eof And Not rs.bof Then
rs.MoveFirst
i=0
Do While Not rs.Eof
tag_N=tag_N & ";" & rs(1)
tag_T=tag_T & ";" & rs(2)
tag_U=tag_U & ";" & rs(3)
i=i+1
rs.movenext
Loop
tag_N=Right(tag_N,Len(tag_N)-1)
tag_T=Right(tag_T,Len(tag_T)-1)
tag_U=Right(tag_U,Len(tag_U)-1)
Atag_N=Split(tag_N,";")
Atag_T=Split(tag_T,";")
Atag_U=Split(tag_U,";")
max= UBound(Atag_N)
For i=0 To max
idd=idd+1
tagstr=Atag_N(i)
tag_name=Atag_T(i)
'If RM_MASTER=1 Then
sql1=zdgd_sql1 (idd,tagstr,tag_name,table_name)
'MsgBox sql
conn.execute sql1
'End If
Next
'MsgBox sql
End If

End If
'End If





End Function

相关的项目函数:
Function zdgd_sql1(idd,tagstr,tag_name,table_name)
'2008-01-18 chenm 秦皇岛项目
Dim temp_str1,max,i,tagvalue,sql_str,aa,hh

aa=Hour(Now())
If Len(Trim(aa))=1 Then
aa="0" & aa
End If
aa=aa & ":00"
tagvalue=GetTag(tagstr)
sql_str="INSERT INTO [" & table_name & "] "
sql_str=sql_str& " (id,Tag_name, BM, ZHI, RQ, SJ) "
sql_str=sql_str & " VALUES (" & idd & ",N'" & tagstr &"',N'"& tag_name & "'," & tagvalue &

",N'"& longdatestr(Now())&"',N'" & aa & "')"
zdgd_sql1=sql_str
End Function
function longdatestr(str)
dim yyyy,mm,dd
if isdate(str) then
yyyy=year(str)
mm=month(str)
dd=day(str)
if len(trim(mm))=1 then
mm="0" & mm
end if
if len(trim(dd))=1 then
dd="0" & dd
end if
longdatestr=yyyy & "-" & mm & "-" & dd
else
longdatestr=str
end if
end function
快下班了晚上回家继续写


微信公众号:PLC标准化编程,ZHO6371995
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC WinCC / Panel

共有32568条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。