回复:像DCS一样为输出IO域带上曲线

已锁定

龟仙人

西门子1847工业学习平台

  • 帖子

    928
  • 精华

    15
  • 被关注

    163

论坛等级:奇侠

注册时间:2006-12-15

普通 普通 如何晋级?

发布于 2022-03-28 10:55:28

1楼

上面是十年前做的项目了,很多时候客户只要不要求就懒得做了,做的多了客户也不会多给钱,客户总是要加这个功能,哪个功能,但是总不提钱的事,我们做上位机开发的劳动成果总是被贱卖。


这个是我用VBS新写了一个弹出窗口的测试项目,首先变量管理对话框中添加System Info驱动程序,然后新建Sys连接,建立四个变量,AVAILABLE_MEMORY(剩余内存)CPU_IDEL_TIME(CPU空闲时间)CPU_PROCESS(CPU进程)CPU_TOAL_LOAD(CPU负载率),并添加到用户归档中。


新建画面,并在画面中添加趋势曲线控件和输入输出IO域控件,并放置诊断窗口,然后给输入输出域添加VBS脚本:

CPU负载率和空闲时间脚本

Sub OnLButtonDown(Byval Item, Byval Flags, Byval x, Byval y)      

Dim objTrend,dblParentWidth,dblParentHeight,dblTrendWidth,dblTrendHeight

Const ARCPREFIX = "ComputerArchive\"

Const LEFTOFFSET = 20

Const TOPOFFSET =20

On Error Resume Next '如果有错误继续执行

Set objTrend = ScreenItems("TrendControl") '把趋势趋势曲线控件赋给对象变量

dblTrendWidth = objTrend.Width '获取趋势控件宽度

dblTrendHeight = objTrend.Height '获取趋势控件高度

dblParentWidth = objTrend.Parent.Width '获取父级窗口宽度

dblParentHeight = objTrend.Parent.Height '获取父级窗口高度

Rem VBS诊断窗口输出

HMIRuntime.Trace "父级窗体宽度为:" & dblParentWidth & vbCrlf 

HMIRuntime.Trace "父级窗体高度为:" & dblParentHeight & vbCrlf

'Msgbox dblParentWidth & "," & dblParentHeight

With objTrend

.Visible= vbFalse '隐藏就控件

'删除所有曲线

While .TrendCount > 0 

.TrendIndex = .TrendCount -1

.TrendRemove = .TrendName 

Wend

.TrendAdd = "CPU空闲时间" '添加曲线

.Caption = "CPU空闲时间曲线(单位:%)" '趋势曲线标题

.TrendVisible = 0 '曲线不显示

.TrendTagName = ARCPREFIX & "CPU_IDEL_TIME" '分配归档变量

Rem 下面两条语句在没有使用标尺的情况下可以不用

.ValueAxisAutoPrecisions = 0 '不自动显示小数点

.ValueAxisPrecisions = 1 '分配小数点位数

.TrendTrendWindow  = "趋势窗口 1" '分配趋势窗口

.TrendTimeAxis = "时间轴 1" '分配时间轴

.TrendColor = RGB(0,0,0) '分配趋势曲线颜色

.TrendValueAxis = "数值轴 1" '分配数值轴

.TrendVisible = 1 '显示曲线


'趋势控件显示位置随着鼠标移动,如果超出窗口显示范围则在窗口边缘显示

'控件显示在IO域正上方,控件LEFT= x-控件宽度/2

If (x+dblTrendWidth/2)>= dblParentWidth  Or (x - dblTrendWidth/2)<= 0 Then 

If (x+dblTrendWidth/2)>= dblParentWidth Then

.Left = dblParentWidth-dblTrendWidth - LEFTOFFSET

HMIRuntime.Trace "控件超出窗口右边缘" & vbCrlf

Else

.Left = LEFTOFFSET

HMIRuntime.Trace "控件超出窗口左边缘" & vbCrlf

End If

Else

.Left = x-dblTrendWidth/2

End If

'控件显示高度= 鼠标位置 - 控件高度 -偏移量

If (y -dblTrendHeight -TOPOFFSET)<0 Then

.Top = TOPOFFSET

HMIRuntime.Trace "控件超出窗口上缘" & vbCrlf

Else

.Top = y -dblTrendHeight -TOPOFFSET

End If

.Visible= vbTrue

End With

'如果有错误,显示错误信息

If Err.Number<> 0 Then

HMIRuntime.Trace "error: " & Err.Description

Msgbox "error: " & Err.Description

End If

End Sub


CPU进程和剩余内存脚本:

Sub OnLButtonDown(ByVal Item, ByVal Flags, ByVal x, ByVal y)      

Dim objTrend,dblParentWidth,dblParentHeight,dblTrendWidth,dblTrendHeight

Const ARCPREFIX = "ComputerArchive\"

Const LEFTOFFSET = 20

Const TOPOFFSET =20

On Error Resume Next '如果有错误继续执行

Set objTrend = ScreenItems("TrendControl") '把趋势趋势曲线控件赋给对象变量

dblTrendWidth = objTrend.Width '获取趋势控件宽度

dblTrendHeight = objTrend.Height '获取趋势控件高度

dblParentWidth = objTrend.Parent.Width '获取父级窗口宽度

dblParentHeight = objTrend.Parent.Height '获取父级窗口高度

Rem VBS诊断窗口输出

HMIRuntime.Trace "父级窗体宽度为:" & dblParentWidth & vbCrlf 

HMIRuntime.Trace "父级窗体高度为:" & dblParentHeight & vbCrlf

'Msgbox dblParentWidth & "," & dblParentHeight

With objTrend

.Visible= vbFalse '隐藏就控件

.TrendRename = "CPU进程" '添加曲线

.Caption = "CPU进程趋势曲线(单位:%)" '趋势曲线标题

.TrendVisible = 0 '曲线不显示

.TrendTagName = ARCPREFIX & "CPU_PROCESS" '分配归档变量

Rem 下面两条语句在没有使用标尺的情况下可以不用

.ValueAxisAutoPrecisions = 0 '不自动显示小数点

.ValueAxisPrecisions = 1 '分配小数点位数

.TrendTrendWindow  = "趋势窗口 1" '分配趋势窗口

.TrendTimeAxis = "时间轴 1" '分配时间轴

.TrendValueAxis = "数值轴 1" '分配数值轴

.TrendVisible = 1 '显示曲线

.TrendColor = RGB(255,0,0) '分配趋势曲线颜色


'趋势控件显示位置随着鼠标移动,如果超出窗口显示范围则在窗口边缘显示

'控件显示在IO域正上方,控件LEFT= x-控件宽度/2

If (x+dblTrendWidth/2)>= dblParentWidth  Or (x - dblTrendWidth/2)<= 0 Then 

If (x+dblTrendWidth/2)>= dblParentWidth Then

.Left = dblParentWidth-dblTrendWidth - LEFTOFFSET

HMIRuntime.Trace "控件超出窗口右边缘" & vbCrlf

Else

.Left = LEFTOFFSET

HMIRuntime.Trace "控件超出窗口左边缘" & vbCrlf

End If

Else

.Left = x-dblTrendWidth/2

End If

'控件显示高度= 鼠标位置 - 控件高度 -偏移量

If (y -dblTrendHeight -TOPOFFSET)<0 Then

.Top = TOPOFFSET

HMIRuntime.Trace "控件超出窗口上缘" & vbCrlf

Else

.Top = y -dblTrendHeight -TOPOFFSET

End If

.Visible= vbTrue

End With

'如果有错误,显示错误信息

If Err.Number<> 0 Then

HMIRuntime.Trace "error: " & Err.Description

Msgbox "error: " & Err.Description

End If

End Sub

两个脚本不同之处在于第一个脚本是把所有曲线删除,重新添加曲线,第二个脚本是将曲线重新名称,没有删除曲线(初始状态下有一条曲线)

评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC WinCC / Panel

共有33031条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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