#### 画面加载脚本 ```Pascal On Error Resume Next '---------------------------------------------------------------------------------------------------------- '---------------------------------------------------------------------------------------------------------- Dim cmbDataLoggingA,cmbDataLoggingB Set cmbDataLoggingA = ScreenItems("DataLoggingA") Set cmbDataLoggingB = ScreenItems("DataLoggingB") cmbDataLoggingA.CountVisibleItems = 2 cmbDataLoggingB.CountVisibleItems = 2 cmbDataLoggingA.SelectedIndex = 1 cmbDataLoggingA.SelectedText = "设定值监视" cmbDataLoggingA.SelectedIndex = 2 cmbDataLoggingA.SelectedText = "实际值监视" cmbDataLoggingB.SelectedIndex = 1 cmbDataLoggingB.SelectedText = "设定值监视" cmbDataLoggingB.SelectedIndex = 2 cmbDataLoggingB.SelectedText = "实际值监视" cmbDataLoggingA.SelectedIndex = 1 cmbDataLoggingB.SelectedIndex = 1 '---------------------------------------------------------------------------------------------------------- SmartTags("数据记录趋势A值轴最大值").Value = 100.0 SmartTags("数据记录趋势A值轴最小值").Value = 0.0 SmartTags("数据记录趋势B值轴最大值").Value = 100.0 SmartTags("数据记录趋势B值轴最小值").Value = 0.0 '---------------------------------------------------------------------------------------------------------- Dim ctrl,objTimeAxisOne,objTimeAxisTwo '获取对象 Set ctrl = ScreenItems("趋势图") Set objTimeAxisOne = ctrl.GetTimeAxis(0) Set objTimeAxisTwo = ctrl.GetTimeAxis(1) 'objTimeAxis.Label = "Time axis 2" '定义显示日期的格式 objTimeAxisOne.DateFormat = "yyyy/MM/dd" objTimeAxisTwo.DateFormat = "yyyy/MM/dd" '定义显示时间的格式 objTimeAxisOne.TimeFormat = "HH:mm:ss" objTimeAxisTwo.TimeFormat = "HH:mm:ss" '0 时间范围 指定时间列的开始时间和时间范围。 '1 结束时间 指定时间列的开始时间和结束时间。 '2 测量点 定义时间列的开始时间和测量点数量。 objTimeAxisOne.RangeType = 1 objTimeAxisTwo.RangeType = 1 Dim endDate,beginDate,beginTime,endTime '当前时间减去一小时 beginDate = DateAdd("d", -1, Now) '当前时间 endDate = Now beginTime = Year(beginDate) & "/" & Month(beginDate) & "/" & Day(beginDate) & " " & Hour(beginDate)&":"& Minute(beginDate) &":"& Second(beginDate) endTime = Year(endDate) & "/" & Month(endDate) & "/" & Day(endDate) & " " & Hour(endDate)&":"& Minute(endDate) &":"& Second(endDate) '开始时间,依据电脑定格式 objTimeAxisOne.BeginTime = beginTime objTimeAxisTwo.BeginTime = beginTime '结束时间 objTimeAxisOne.EndTime = endTime objTimeAxisTwo.EndTime = endTime '---------------------------------------------------------------------------------------------------------- '动态化数值轴 Dim objValueAxisOne,objValueAxisTwo Set objValueAxisOne = ctrl.GetValueAxis(0) '取消自动值轴 objValueAxisOne.AutoRange = False '起始值 objValueAxisOne.BeginValue = 0 '结束值 objValueAxisOne.EndValue = 350 Set objValueAxisTwo = ctrl.GetValueAxis(1) '取消自动值轴 objValueAxisTwo.AutoRange = False '起始值 objValueAxisTwo.BeginValue = 0 '结束值 objValueAxisTwo.EndValue = 350 '---------------------------------------------------------------------------------------------------------- '设置控件时间 ScreenItems("DateTimeBeginA").Value = beginTime ScreenItems("DateTimeBeginB").Value = beginTime ScreenItems("DateTimeEndA").Value = endTime ScreenItems("DateTimeEndB").Value = endTime '---------------------------------------------------------------------------------------------------------- Dim tagDSNName,sCon Dim conn,oRs,oCom Dim strDSN,sSql Set tagDSNName = HMIRuntime.Tags("@DatasourceNameRT") tagDSNName.Read strDSN = tagDSNName.Value 'strDSN =Mid(strDSN,1,Len(strDSN)-1) 'sCon = "Provider=WinCCOLEDBProvider.1;Integrated Security=SSPI;Persist SecurityInfo=False;Initial Catalog=" & strDSN & ";Data Source=.\WINCC" sCon = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist SecurityInfo=False;Initial Catalog=" & strDSN & ";Data Source=.\WINCC" 'MsgBox sCon Set conn = CreateObject("ADODB.Connection") conn.CursorLocation = 3 conn.Open sCon sSql = "SELECT ValueName FROM dbo.Archive WHERE ValueName LIKE N'设定值监视%' ORDER BY ValueID" 'MsgBox sSql Set oRs = CreateObject("ADODB.Recordset") oRs.Open sSql,conn,1,3 Dim recordCount recordCount = oRs.RecordCount 'MsgBox recordCount Dim cmbA,cmbB,i Set cmbA = ScreenItems("TrendListA") Set cmbB = ScreenItems("TrendListB") cmbA.CountVisibleItems = recordCount cmbB.CountVisibleItems = recordCount If recordCount > 0 Then Do While Not oRs.EOF i = i+1 'MsgBox(oRs.Fields(0).Value) cmbA.SelectedIndex = i cmbA.SelectedText = Trim(oRs.Fields(0).Value) cmbB.SelectedIndex = i cmbB.SelectedText = Trim(oRs.Fields(0).Value) oRs.MoveNext Loop End If cmbA.SelectedIndex = 1 cmbB.SelectedIndex = 1 oRs.Close Set oRs = Nothing conn.Close Set conn = Nothing '---------------------------------------------------------------------------------------------------------- End Sub ``` #### 记录集选择A脚本 选择相应记录集合后,通过按钮的按下鼠标左键事件脚本将筛选出来的结果填充至TrendListA组合框; ```Pascal On Error Resume Next Dim selectText selectText = ScreenItems("DataLoggingA").SelectedText Dim tagDSNName,sCon Dim conn,oRs,oCom Dim strDSN,sSql Set tagDSNName = HMIRuntime.Tags("@DatasourceNameRT") tagDSNName.Read strDSN = tagDSNName.Value 'strDSN =Mid(strDSN,1,Len(strDSN)-1) 'sCon = "Provider=WinCCOLEDBProvider.1;Integrated Security=SSPI;Persist SecurityInfo=False;Initial Catalog=" & strDSN & ";Data Source=.\WINCC" sCon = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist SecurityInfo=False;Initial Catalog=" & strDSN & ";Data Source=.\WINCC" Set conn = CreateObject("ADODB.Connection") conn.CursorLocation = 3 conn.Open sCon sSql = "SELECT ValueName FROM dbo.Archive WHERE ValueName LIKE N'"& selectText &"%' ORDER BY ValueID" 'MsgBox sSql Set oRs = CreateObject("ADODB.Recordset") oRs.Open sSql,conn,1,3 Dim recordCount recordCount = oRs.RecordCount Dim cmbA,i Set cmbA = ScreenItems("TrendListA") cmbA.CountVisibleItems = recordCount If recordCount > 0 Then Do While Not oRs.EOF i = i+1 'MsgBox(oRs.Fields(0).Value) cmbA.SelectedIndex = i cmbA.SelectedText = Trim(oRs.Fields(0).Value) oRs.MoveNext Loop End If cmbA.SelectedIndex = 1 oRs.Close Set oRs = Nothing conn.Close Set conn = Nothing ``` #### 记录集选择B脚本 选择相应记录集合后,通过按钮的按下鼠标左键事件脚本将筛选出来的结果填充至TrendListB组合框; ```Pascal On Error Resume Next Dim selectText selectText = ScreenItems("DataLoggingB").SelectedText Dim tagDSNName,sCon Dim conn,oRs,oCom Dim strDSN,sSql Set tagDSNName = HMIRuntime.Tags("@DatasourceNameRT") tagDSNName.Read strDSN = tagDSNName.Value 'strDSN =Mid(strDSN,1,Len(strDSN)-1) 'sCon = "Provider=WinCCOLEDBProvider.1;Integrated Security=SSPI;Persist SecurityInfo=False;Initial Catalog=" & strDSN & ";Data Source=.\WINCC" sCon = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist SecurityInfo=False;Initial Catalog=" & strDSN & ";Data Source=.\WINCC" Set conn = CreateObject("ADODB.Connection") conn.CursorLocation = 3 conn.Open sCon sSql = "SELECT ValueName FROM dbo.Archive WHERE ValueName LIKE N'"& selectText &"%' ORDER BY ValueID" 'MsgBox sSql Set oRs = CreateObject("ADODB.Recordset") oRs.Open sSql,conn,1,3 Dim recordCount recordCount = oRs.RecordCount Dim cmbA,i Set cmbA = ScreenItems("TrendListB") cmbA.CountVisibleItems = recordCount If recordCount > 0 Then Do While Not oRs.EOF i = i+1 'MsgBox(oRs.Fields(0).Value) cmbA.SelectedIndex = i cmbA.SelectedText = Trim(oRs.Fields(0).Value) oRs.MoveNext Loop End If cmbA.SelectedIndex = 1 oRs.Close Set oRs = Nothing conn.Close Set conn = Nothing ``` #### TrendListA脚本 当TrendListA对象数据改变时通过对象改变事件脚本更改趋势图趋势A的变量名称。 ```Pascal Dim ctrl,objTimeAxis '获取对象 Set ctrl = ScreenItems("趋势图") Set objTimeAxis = ctrl.GetTimeAxis(0) 'objTimeAxis.Label = "Time axis 2" '定义显示日期的格式 objTimeAxis.DateFormat = "dd.MM.yy" objTimeAxis.DateFormat = "dd.MM.yy" '定义显示时间的格式 objTimeAxis.TimeFormat = "HH:mm:ss" objTimeAxis.TimeFormat = "HH:mm:ss" '趋势的索引 ctrl.TrendIndex = 0 '定义趋势连接的变量 ctrl.TrendTagName = ScreenItems("TrendListA").SelectedText ``` #### TrendListB脚本 当TrendListB对象数据改变时通过对象改变事件脚本更改趋势图趋势B的变量名称。 ```Pascal Dim ctrl,objTimeAxis '获取对象 Set ctrl = ScreenItems("趋势图") Set objTimeAxis = ctrl.GetTimeAxis(1) 'objTimeAxis.Label = "Time axis 2" '定义显示日期的格式 objTimeAxis.DateFormat = "dd.MM.yy" objTimeAxis.DateFormat = "dd.MM.yy" '定义显示时间的格式 objTimeAxis.TimeFormat = "HH:mm:ss" objTimeAxis.TimeFormat = "HH:mm:ss" '趋势的索引 ctrl.TrendIndex = 1 '定义趋势连接的变量 ctrl.TrendTagName = ScreenItems("TrendListB").SelectedText ``` #### 值轴最大值A脚本 当值轴最大值A对象数据改变时通过对象改变事件脚本将趋势图的值轴A最大值更改为数据记录趋势A值轴最大值变量数据。 ```Pascal Dim ctrl,objTimeAxis '获取对象 Set ctrl = ScreenItems("趋势图") Dim objValueAxis Set objValueAxis = ctrl.GetValueAxis(0) '取消自动值轴 objValueAxis.AutoRange = False '结束值 objValueAxis.EndValue = SmartTags("数据记录趋势A值轴最大值").Value ``` #### 值轴最大值B脚本 当值轴最大值B对象数据改变时通过对象改变事件脚本将趋势图的值轴B最大值更改为数据记录趋势B值轴最大值变量数据。 ```Pascal Dim ctrl,objTimeAxis '获取对象 Set ctrl = ScreenItems("趋势图") Dim objValueAxis Set objValueAxis = ctrl.GetValueAxis(1) '取消自动值轴 objValueAxis.AutoRange = False '结束值 objValueAxis.EndValue = SmartTags("数据记录趋势B值轴最大值").Value ``` #### 值轴最小值A脚本 当值轴最小值A对象数据改变时通过对象改变事件脚本将趋势图的值轴B最小值更改为数据记录趋势A值轴最小值变量数据。 ```Pascal Dim ctrl,objTimeAxis '获取对象 Set ctrl = ScreenItems("趋势图") Dim objValueAxis Set objValueAxis = ctrl.GetValueAxis(0) '取消自动值轴 objValueAxis.AutoRange = False '起始值 objValueAxis.BeginValue =SmartTags("数据记录趋势A值轴最小值").Value ``` #### 值轴最小值B脚本 当值轴最小值B对象数据改变时通过对象改变事件脚本将趋势图的值轴B最小值更改为数据记录趋势B值轴最小值变量数据。 ```Pascal Dim ctrl,objTimeAxis '获取对象 Set ctrl = ScreenItems("趋势图") Dim objValueAxis Set objValueAxis = ctrl.GetValueAxis(1) '取消自动值轴 objValueAxis.AutoRange = False '起始值 objValueAxis.BeginValue =SmartTags("数据记录趋势B值轴最小值").Value ``` #### 时间设置A脚本 当时间设置A的按下鼠标左键事件触发时,读取日期时间控件DateTimeBeginA和DateTimeEndA的时间日期,分别修改趋势图时间轴A的开始时间和结束时间,并更改显示的时间范围模式。 ```Pascal Dim ctrl,objTimeAxis '获取对象 Set ctrl = ScreenItems("趋势图") Set objTimeAxis = ctrl.GetTimeAxis(0) 'objTimeAxis.Label = "Time axis 2" '定义显示日期的格式 objTimeAxis.DateFormat = "yyyy/MM/dd" objTimeAxis.DateFormat = "yyyy/MM/dd" '定义显示时间的格式 objTimeAxis.TimeFormat = "HH:mm:ss" objTimeAxis.TimeFormat = "HH:mm:ss" '0 时间范围 指定时间列的开始时间和时间范围。 '1 结束时间 指定时间列的开始时间和结束时间。 '2 测量点 定义时间列的开始时间和测量点数量。 objTimeAxis.RangeType = 1 Dim beginTime,endTime beginTime = ScreenItems("DateTimeBeginA").Value & ":00" endTime = ScreenItems("DateTimeEndA").Value & ":00" '开始时间,依据电脑定格式 objTimeAxis.BeginTime = beginTime objTimeAxis.EndTime = endTime ``` #### 时间设置B脚本 当时间设置B的按下鼠标左键事件触发时,读取日期时间控件DateTimeBeginB和DateTimeEndB的时间日期,分别修改趋势图时间轴B的开始时间和结束时间,并更改显示的时间范围模式。 ```Pascal Dim ctrl,objTimeAxis '获取对象 Set ctrl = ScreenItems("趋势图") Set objTimeAxis = ctrl.GetTimeAxis(1) 'objTimeAxis.Label = "Time axis 2" '定义显示日期的格式 objTimeAxis.DateFormat = "yyyy/MM/dd" objTimeAxis.DateFormat = "yyyy/MM/dd" '定义显示时间的格式 objTimeAxis.TimeFormat = "HH:mm:ss" objTimeAxis.TimeFormat = "HH:mm:ss" '0 时间范围 指定时间列的开始时间和时间范围。 '1 结束时间 指定时间列的开始时间和结束时间。 '2 测量点 定义时间列的开始时间和测量点数量。 objTimeAxis.RangeType = 1 Dim beginTime,endTime beginTime = ScreenItems("DateTimeBeginB").Value & ":00" endTime = ScreenItems("DateTimeEndB").Value & ":00" '开始时间,依据电脑定格式 objTimeAxis.BeginTime = beginTime objTimeAxis.EndTime = endTime ``` ### 实现效果