MSchart控件除了生成曲线和方图,还可以生成饼图。假设有一个车间,里面有5套同样的生产装置,每天各装置的产量已经生成了报表,如果我们希望在wincc上能够查询到各个装置的产量所占总产量百分比,就可以用MSChart的饼图来实现。
画面上有一个listview控件,名字叫做LV已经读取了每天各装置的产量,如图所示(ListView如何读取数据库不在这里描述)。
在画面上放置一个MSChart控件,名字叫做Chart,在控件的itemclick事件中添加以下vbs代码:
Sub ItemClick(ByVal Item, ByRef ObjectItem)
Dim LV,Chart,txt,RowIndex,CtrlRowIndex
Dim produce(5),RowCount,i,SumProduce
Set LV=ScreenItems("LV")
ctrlRowIndex=LV.SelectedItem.Index
Set Chart=ScreenItems("Chart")
'RowCount=LV.listitems.count
RowCount=5
SumProduce=0
For i=1 To 5
produce(i)=CInt(LV.listItems.item(ctrlRowIndex).listsubitems.item(i+1).text)
SumProduce=SumProduce+produce(i)
Next
'图标初始化
'.Axis坐标轴有两个参数,第一个axisId指坐标轴编号;第二个参数为保留参数,此处为1,可以不写
'坐标轴编号0,1,2,3,4
'0为x轴,1为y轴,2位第二y轴,3为z轴,4表示无坐标轴
With Chart
.TitleText = "产量"
.Column = 1
.ColumnCount=6 '5个子成员
.RandomFill=False '不使用随机数
' '设置图线的外观
.chartType = 14 '2d饼图
.ShowLegend = 1 '显示图例
.AllowSeriesSelection=False '不允许选取整个系列
.row=1
For i = 1 To 5
.column=i
.data=produce(i)
.columnLabel=produce(i)
Next
With .DataGrid
.RowLabelCount = 1
.ColumnCount = 5
.RowCount = 1
For i = 1 To .ColumnCount
.ColumnLabel(i, 1) = "产量 " & i & ":" & CStr(produce(i)) & "所占百分比:" & CStr(Formatnumber((100*produce(i)/SumProduce),2)) & "%"
Next
.RowLabel(1, 1) = "各产量所占百分比%"
End With
For i = 1 To .Plot.SeriesCollection.Count
With .Plot.SeriesCollection(i).DataPoints(-1)
.DataPointLabel.LocationType = 1
.DataPointLabel.VtFont.Size = 20
.Marker.Visible = True
.Marker.Style = 1
End With
Next
End With
End Sub
保存后运行,当鼠标点击ListView某一行时,这一行所在日期各装置的产量百分比情况就会显示在饼图里面,如图所示。