Skip to content

Commit 7c77086

Browse files
committed
UPS_Device: small cleanup, culture tweak
- Create region for Static/ReadOnly variables for reference. - Change how the invariant culture is provided to code in this class, and attempting to make it as static as possible. - Applied invariant culture to load variable parsing code, hopefully fixing #125. - Completely define timers and connect event handlers in initializing code.
1 parent fb071ef commit 7c77086

File tree

1 file changed

+36
-24
lines changed

1 file changed

+36
-24
lines changed

Diff for: WinNUT_V2/WinNUT-Client_Common/UPS_Device.vb

+36-24
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,15 @@ Imports System.Globalization
1111
Imports System.Windows.Forms
1212

1313
Public Class UPS_Device
14+
#Region "Statics/Defaults"
15+
Private ReadOnly INVARIANT_CULTURE = CultureInfo.InvariantCulture
16+
Private Const CosPhi As Double = 0.6
17+
18+
' How many milliseconds to wait before the Reconnect routine tries again.
19+
Private Const DEFAULT_RECONNECT_WAIT_MS As Double = 5000
20+
Private Const DEFAULT_UPDATE_INTERVAL_MS As Double = 1000
21+
#End Region
22+
1423
#Region "Properties"
1524

1625
Public ReadOnly Property Name As String
@@ -35,6 +44,10 @@ Public Class UPS_Device
3544
End Get
3645
End Property
3746

47+
''' <summary>
48+
''' How often UPS data is updated, in milliseconds.
49+
''' </summary>
50+
''' <returns></returns>
3851
Public Property PollingInterval As Integer
3952
Get
4053
Return Update_Data.Interval
@@ -102,16 +115,11 @@ Public Class UPS_Device
102115

103116
#End Region
104117

105-
Private Const CosPhi As Double = 0.6
106-
' How many milliseconds to wait before the Reconnect routine tries again.
107-
Private Const DEFAULT_RECONNECT_WAIT_MS As Double = 5000
108-
109118
Private WithEvents Update_Data As New Timer
110119
Private WithEvents Reconnect_Nut As New Timer
111120
Private WithEvents Nut_Socket As Nut_Socket
112121

113122
Private Freq_Fallback As Double
114-
Private ciClone As CultureInfo
115123
Public Nut_Config As Nut_Parameter
116124
Public Retry As Integer = 0
117125
Public MaxRetry As Integer = 30
@@ -121,13 +129,18 @@ Public Class UPS_Device
121129
Me.LogFile = LogFile
122130
Me.Nut_Config = Nut_Config
123131
PollingInterval = pollInterval
124-
ciClone = CType(CultureInfo.InvariantCulture.Clone(), CultureInfo)
125-
ciClone.NumberFormat.NumberDecimalSeparator = "."
126132
Nut_Socket = New Nut_Socket(Me.Nut_Config, LogFile)
127133

128134
With Reconnect_Nut
129135
.Interval = DEFAULT_RECONNECT_WAIT_MS
130136
.Enabled = False
137+
AddHandler .Tick, AddressOf AttemptReconnect
138+
End With
139+
140+
With Update_Data
141+
.Interval = DEFAULT_UPDATE_INTERVAL_MS
142+
.Enabled = False
143+
AddHandler .Tick, AddressOf Retrieve_UPS_Datas
131144
End With
132145
End Sub
133146

@@ -191,7 +204,7 @@ Public Class UPS_Device
191204
End If
192205
End Sub
193206

194-
Private Sub Reconnect_Socket(sender As Object, e As EventArgs) Handles Reconnect_Nut.Tick
207+
Private Sub AttemptReconnect(sender As Object, e As EventArgs)
195208
Retry += 1
196209
If Retry <= MaxRetry Then
197210
RaiseEvent New_Retry()
@@ -250,46 +263,45 @@ Public Class UPS_Device
250263
End Try
251264

252265
' Other constant values for UPS calibration.
253-
freshData.UPS_Value.Batt_Capacity = Double.Parse(GetUPSVar("battery.capacity", 7), ciClone)
254-
Freq_Fallback = Double.Parse(GetUPSVar("output.frequency.nominal", (50 + CInt(Arr_Reg_Key.Item("FrequencySupply")) * 10)), ciClone)
266+
freshData.UPS_Value.Batt_Capacity = Double.Parse(GetUPSVar("battery.capacity", 7), INVARIANT_CULTURE)
267+
Freq_Fallback = Double.Parse(GetUPSVar("output.frequency.nominal", (50 + CInt(Arr_Reg_Key.Item("FrequencySupply")) * 10)), INVARIANT_CULTURE)
255268

256269
LogFile.LogTracing("Completed retrieval of basic UPS product information.", LogLvl.LOG_NOTICE, Me)
257270
Return freshData
258271
End Function
259272

260273
Private oldStatusBitmask As Integer
261-
262-
Private Sub Retrieve_UPS_Datas() Handles Update_Data.Tick
274+
Private Sub Retrieve_UPS_Datas(sender As Object, e As EventArgs)
263275
LogFile.LogTracing("Enter Retrieve_UPS_Datas", LogLvl.LOG_DEBUG, Me)
264276

265277
Try
266278
Dim UPS_rt_Status As String
267279

268280
If IsConnected Then
269281
With UPS_Datas.UPS_Value
270-
.Batt_Charge = Double.Parse(GetUPSVar("battery.charge", 255), ciClone)
271-
.Batt_Voltage = Double.Parse(GetUPSVar("battery.voltage", 12), ciClone)
272-
.Batt_Runtime = Double.Parse(GetUPSVar("battery.runtime", 86400), ciClone)
273-
.Power_Frequency = Double.Parse(GetUPSVar("input.frequency", Double.Parse(GetUPSVar("output.frequency", Freq_Fallback), ciClone)), ciClone)
274-
.Input_Voltage = Double.Parse(GetUPSVar("input.voltage", 220), ciClone)
275-
.Output_Voltage = Double.Parse(GetUPSVar("output.voltage", .Input_Voltage), ciClone)
276-
.Load = Double.Parse(GetUPSVar("ups.load", 0), ciClone)
282+
.Batt_Charge = Double.Parse(GetUPSVar("battery.charge", 255), INVARIANT_CULTURE)
283+
.Batt_Voltage = Double.Parse(GetUPSVar("battery.voltage", 12), INVARIANT_CULTURE)
284+
.Batt_Runtime = Double.Parse(GetUPSVar("battery.runtime", 86400), INVARIANT_CULTURE)
285+
.Power_Frequency = Double.Parse(GetUPSVar("input.frequency", Double.Parse(GetUPSVar("output.frequency", Freq_Fallback), INVARIANT_CULTURE)), INVARIANT_CULTURE)
286+
.Input_Voltage = Double.Parse(GetUPSVar("input.voltage", 220), INVARIANT_CULTURE)
287+
.Output_Voltage = Double.Parse(GetUPSVar("output.voltage", .Input_Voltage), INVARIANT_CULTURE)
288+
.Load = Double.Parse(GetUPSVar("ups.load", 0), INVARIANT_CULTURE)
277289

278290
' Retrieve and/or calculate output power if possible.
279291
If _PowerCalculationMethod <> PowerMethod.Unavailable Then
280292
Dim parsedValue As Double
281293

282294
Try
283295
If _PowerCalculationMethod = PowerMethod.RealPower Then
284-
parsedValue = Double.Parse(GetUPSVar("ups.realpower"))
296+
parsedValue = Double.Parse(GetUPSVar("ups.realpower"), INVARIANT_CULTURE)
285297

286298
ElseIf _PowerCalculationMethod = PowerMethod.NominalPowerCalc Then
287-
parsedValue = Double.Parse(GetUPSVar("ups.realpower.nominal"))
299+
parsedValue = Double.Parse(GetUPSVar("ups.realpower.nominal"), INVARIANT_CULTURE)
288300
parsedValue *= UPS_Datas.UPS_Value.Load / 100.0
289301

290302
ElseIf _PowerCalculationMethod = PowerMethod.VoltAmpCalc Then
291-
Dim nomCurrent = Double.Parse(GetUPSVar("input.current.nominal"))
292-
Dim nomVoltage = Double.Parse(GetUPSVar("input.voltage.nominal"))
303+
Dim nomCurrent = Double.Parse(GetUPSVar("input.current.nominal"), INVARIANT_CULTURE)
304+
Dim nomVoltage = Double.Parse(GetUPSVar("input.voltage.nominal"), INVARIANT_CULTURE)
293305

294306
parsedValue = (nomCurrent * nomVoltage * 0.8) * (UPS_Datas.UPS_Value.Load / 100.0)
295307
Else
@@ -331,7 +343,7 @@ Public Class UPS_Device
331343
.UPS_Status = [Enum].Parse(GetType(UPS_States), UPS_rt_Status)
332344
Catch ex As ArgumentException
333345
LogFile.LogTracing("Likely encountered an unknown/invalid UPS status. Using previous status." &
334-
vbNewLine & ex.Message, LogLvl.LOG_ERROR, Me)
346+
vbNewLine & ex.Message, LogLvl.LOG_ERROR, Me)
335347
End Try
336348

337349
' Get the difference between the old and new statuses, and filter only for active ones.

0 commit comments

Comments
 (0)