·81·
文章编号:1006-1576(2009)03-0081-02
WinCC6.0 CSV 文件在复杂报表输出中的应用
赵凯
(中国兵器工业第五八研究所 工业自动化工程技术部,四川 绵阳 621000)
摘要:通过对winCC6.0中的基于报表格式的CSV 文件结构的分析,应用CSV -Provider 控件和VBScript 脚本代码,动态实现复杂报表的输出。应用CSV-Provider 方式所建立的报表输出系统则能克服ODBC 方式的不足。通过该方式,用户可任意改变报表数据的输出格式,使报表具有个性化地输出,满足用户对报表数据输出的各种需求。
关键词:winCC ;报表布局;CSV 文件;VBScript 中图分类号:TP311 文献标识码:A
Application of WinCC6.0 CSV File in Complex Report Output
ZHAO Kai
(Dept. of Industrial Automation Engineering Technology, No. 58 Research Institute of China Ordnance Industries,
Mianyang 621000, China)
Abstract: Through analysis of architecture of CSV file based on report format in WinCC6.0, complex report is dynamic output by application of CSV-Provider controls and VB Script code. The report output system built by CSV-Provider is able to overcome defects of ODBC method. By means of the method, consumer can freely change the output format of statement data; the personalized report output can meet consumer’s various needs of the statement data output.
Keywords: WinCC; Report layout; CSV file; VBScript
0 引言
在工控系统的人机界面监控管理系统中,报表输出功能是系统中不可或缺的重要功能。为快速、可靠地建立工控系统的人机界面实时监控管理系统所要求的各项功能,如工况图形的实时监控、数据的快速动态采集,报警消息的记录和存储及依据实时数据和历史数据建立报表等,选择由西门子公司提供的工控组态软件WinCC ,以构成集成的实时监控和管理系统。在winCC 报表系统中,可通过ODBC 方式和CSV -Provider 方式建立报表输出系统。由于应用CSV -Provider 方式能克服ODBC 方式在报表输出格式方面灵活性不足的缺点,故应用WinCC6.0 CSV 文件实现复杂报表输出。
1 CSV 文件的报表结构
使用CSV -Provider 方式建立应用系统的报表输出时,需要使用CSV 文件系统,报表数据必须按照CSV 文件所规定的结构格式输出到CSV 文件中,供CSV -Provider 控件使用。以表格形式输出的CSV 文件结构中的表格、列和数据须定义如下:
文件第1行结构为:
#Table; Name; Columns; Font; Font size
其中:-Name 为表格控件名或文件名,-Columns 为列数,-Font 为表格字体,-Font Size 为表格的字体大小。
文件第2行结构为:
#Column; Num; Header; Width; Alignment
其中:-Num 为列号,-Header 为列标题,-Width 为以字符为单位的列宽,-Alignment 为“左对齐/居中/右对齐”。
文件第3行结构为:
#Data; Color; Col1; Col2; Col3; Col4; ...
其中:-Color 为行的颜色属性(0xbbggrr),-Col1 为列1的数据,-Coln 为第n 列的数据。
需要注意的是,CSV 文件的数据行中颜色、对齐等控制字符始终位于输出文本的开始处,并可互相组合(例如“输出文本”)。不区分大小写。“Width ”参数指示列的相对宽度。表中的有效列宽可如下进行计算:
[以字符数计算的表格宽度]×[以%计算的相对列宽] / [所有相对列宽的总和]
在CSV 文件中为表格定义的行,比数据行多包含1列。如果使用诸如Excel 等电子表格程序编辑数据,则标题列与数据列将不再匹配。为避免这种
收稿日期:2008-09-11;修回日期:2008-10-07 作者简介:赵凯(1963-),女,黑龙江人,高级工程师,1986年毕业于电子科技大学,从事工业自动化技术研究。
兵工自动化
·82·
情况,可输入一个分号作为CSV 文件数据行的第1个字符。但在CSV 文件的数据块中不会出现空白行作为结果。在Excel 中打开CSV 时,数据列将右移1列。这样,标题列与数据列即可匹配。如果第1列要保持空白,必须输入“空格<;空格;第1个数据值;...>”。
通过对该文件结构的分析可知,根据应用需要动态设置文件结构中的各项即可输出所需要的各种报表的格式。
2 CSV 文件具体应用
2.1 建立报表格式
在winCC6.0Explorer 中选择“报表编辑器→布局”,鼠标双击即可打开报表布局器,如图1。在该界面中右侧的运行系统选项中选择CSV -Provider 表格控件到中间的报表内容页面上,鼠标右键点击该控件选择“属性”,弹出属性对话框,在属性对话框中,点击“连接”选项,选择“CSV 表格选择”后点击“编辑”按钮,即弹出“CSV 表格选择”对话框,如图1。在该对话框中可为CSV 文件指定文件名或指定CSV 文件所输出的变量名。通过该变量名可灵活定义CSV 文件所在的路径和文件名,增加了报表数据输出的灵活性。
图1 报表布局界面
2.2 动态输出报表格式和数据
通过编写VBScript 脚本,向CSV 文件输出报表格式和数据,实现动态设置报表格式和数据的功能。主要代码段如下:
Sub queryRealData() Dim sL , fso, fo,sCsv
Dim k,cols,colsName(3)
sCsv = HMIRuntime.Tags("rep_realTbl_csv").Read ‘获取报表文件名
‘根据CSV 文件格式要求,向CSV 文件写入第1行内容,设置表格信息
Set fso = CreateObject("Scripting.FileSystemObject") Set fo = fso.CreateTextFile(sCsv,True)
sL="#Table;Name;Columns;Font;Fontsize" fo.Writeline sL
‘根据CSV 文件格式要求,向CSV 文件写入第2行内容,设置表头信息
sL=";RealTbl;" & cols & ";Arial;10" fo.Writeline sL
fo.WriteBlankLines(1)
sL="#Column;Num;Header;Width;Alignment" fo.Writeline sL
“根据CSV 文件格式要求,向CSV 文件写入表格各列标题和设置各列宽度及对齐格式
cols=3
colsName(0)=”列名1” colsName(1)=”列名2” colsName(2)=”列名3” For k = 0 To cols - 1
sL=";" & CStr(k) & ";" & Chr(34) & colsName(k) & Chr(34) & ";" & CStr(Len(colsName(k))+10) & ";C"
fo.Writeline sL Next
fo.WriteBlankLines(1)
‘第4行,向CSV 文件写入各列数据设置格式 sL="#Data; Color;" For k = 1 To cols
sL=sL & "Col" & k & ";" Next
fo.Writeline sL
‘从第5行开始,向CSV 文件写入各行数据 sL=";0x00ffffff;" ' 以下为假设数据
data1=1 data2=2 data3=3
‘构成一行数据
sL=sL & data1 & data2 & data3 ‘向文件中写入一行数据
fo.Writeline sL
End If End Sub
3 结论
通过应用winC6.0 提供的CSV 控件和所特有的CSV 文件格式,实现了复杂报表格式的动态输出,提高了winCC6.0应用系统的灵活性和可维护性,满足了用户对报表数据输出的各种需求。通过该方法也可实现实时曲线的动态输出,不过需要根据winCC6.0所提供的CSV 对曲线格式输出的特殊要求,向CSV 文件写入相应的信息。下载本文