技术论坛

 经典WinCC7.5Sp2 仪表圆弧图形报警角度的脚本设计

返回主题列表
作者 主题
xiatianyun
侠圣

经验值:4876
发帖数:741
精华帖:10
楼主    2023-07-20 15:57:43
主题:经典WinCC7.5Sp2 仪表圆弧图形报警角度的脚本设计 精华帖 

模拟量弹窗用指针仪表WinCC Gauge Control显示,但我没研究明白它的报警区如何显示,所以还是参考LBP的做法,配合圆弧来指示报警区。

这里就不给出Gauge了,只截取圆弧。


控制圆弧的起始角度和结束角度就可以控制显示报警区指示。

圆弧的角度问题实在是反人性,0度是X坐标的正向,顺时针增加到360度和0度重回。也可以逆时针用负角度表示。

起始和结束都以顺时针方向来划分,幸好这样。

接受大于360度的角度,自己会处理成360度内的角度,这个是我的分析。

LBP处理脚本不能实现任意刻度角度下的角度适配,只能处理180度如图所示的刻度。

比如下图所示的圆弧刻度LBP就需要自己修改脚本来适应:


偷懒是每个技术员的基本需求和技能修炼。

----------------------------------------------------------

刻度一共有5条圆弧构成,其中基本圆弧cirNoraml是最重要的圆弧,设置它的两个控制角度也就设置了刻度角度。这样需要打开画面时自动把其他四条圆弧的控制角度先设置成和cirNormal一致。这样并不需要组态时设置其他圆弧的角度。


在某个圆弧的几何属性中处理模拟量范围限值、报警限值改变的事件,以此来修改报警圆弧的角度:

Function StartAngle_Trigger(ByVal Item)

Dim NormObj, HHObj, HObj, LObj, LLObj


Dim min, max, spanValue

Dim startDeg, endDeg, spanDeg

Dim degreePer1

Dim x, y

' 记忆各个控制点的原始数据,方便做不合理情况的处理比较。

Dim HH, H, L, LL


Set NormObj = ScreenItems("cirNormal")

Set LLObj = ScreenItems("cirAlarmLow")

Set LObj = ScreenItems("cirWarningLow")

Set HObj = ScreenItems("cirWarningHigh")

Set HHObj = ScreenItems("cirAlarmHigh")


min = SmartTags(".Cfg_Y1").Value

max = SmartTags(".Cfg_Y2").Value

spanValue = max - min

' show decimal point

ScreenItems("gau").ShowDecimalPoint = (spanValue / 5) < 1

startDeg = NormObj.StartAngle

endDeg   = NormObj.EndAngle

startDeg = startDeg Mod 360

endDeg = endDeg Mod 360

If startDeg < 0 Then

startDeg = startDeg + 360

End If

If endDeg < 0 Then

endDeg = endDeg + 360

End If

If endDeg < startDeg Then

spanDeg = 360 - startDeg + endDeg

Else

spanDeg = endDeg - startDeg

End If

degreePer1 = spanDeg/spanValue

'---------------------------------------------------------

' 处理HH圆弧 

x = SmartTags(".Cfg_LimitAH").Value

y = (x - min) * degreePer1 

HH = y

' 适配仪表弧度

y = (y + startDeg) Mod 360

' 修正防止出现不合理情况

If y = endDeg Then

y = endDeg - 1

HHObj.Visible = False

Else

HHObj.Visible = True

End if

' 设置HH圆弧的起始角度

HHObj.StartAngle = y

'----------------------------------------------------------

'处理LL圆弧

x = SmartTags(".Cfg_LimitAL").Value

y = (x - min) * degreePer1

LL = y 


' 适配仪表弧度

y = (y + startDeg) Mod 360


' 修正防止出现不合理情况

If y = startDeg Then

y = startDeg + 1

LLObj.Visible = False

Else

LLObj.Visible = True

End If

' 设置LL圆弧的结束角度

LLObj.EndAngle = y

'----------------------------------------------------------

'处理L圆弧

' 设置L圆弧的开始角度为LL圆弧的结束角度

LObj.StartAngle = LLObj.EndAngle

x = SmartTags(".Cfg_LimitWL").Value

y = (x - min) * degreePer1 

L = y

 

' 适配仪表弧度

y = (y + startDeg) Mod 360

' 修正防止出现不合理情况

If L = LL Or LL > L Then

y = LObj.StartAngle + 1

LObj.Visible = False

Else

LObj.Visible = True

End If

' 设置L圆弧的结束角度

LObj.EndAngle = y

'----------------------------------------------------------

'处理H圆弧

' 设置H圆弧的结束角度为HH圆弧的开始角度

HObj.EndAngle = HHObj.StartAngle

x = SmartTags(".Cfg_LimitWH").Value

y = (x - min) * degreePer1 

H = y

 

' 适配仪表弧度

y = (y + startDeg) Mod 360

' 修正防止出现不合理情况

If H = HH Or H > HH Then

y = HObj.EndAngle - 1

HObj.Visible = False

Else

HObj.Visible = True

End If

' 设置L圆弧的结束角度

HObj.StartAngle = y

HMIRuntime.Trace  "LL= " & LL & " L= " & L & " H= " & H & " HH= " & HH & vbNewLine

End Function


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