Guten Morgen,
schreibe ein Programm für Kalibrierungen, und wollte bei einer bestimmten Kalibrierung eine Log-Datei über den Verlauf von dieser. Die Prozedur sieht bis jetzt so aus.
Variable
Diese wird aber mehrmals ausgeführt in einer höheren Methode
Die Idee ist die Klasse
Geht es anders als jetzt vor jedem Log.Write zu checken ob LogRequested oder
Die hier benutzte Log Klasse, ist selbstgeschrieben, einfach eine
Danke im Voraus und schönen Tag
RG
schreibe ein Programm für Kalibrierungen, und wollte bei einer bestimmten Kalibrierung eine Log-Datei über den Verlauf von dieser. Die Prozedur sieht bis jetzt so aus.
VB.NET-Quellcode
- Public Function SetMessPointAndMeasure(messPoint As Single, calibrationHoldTimeForReading As Integer, Optional shunt As Single = Nothing) As CalibrationStepResult 'TODO:Maybe method for calibrator initialize
- Dim actualReading As Single
- Dim calibrationStepResult As CalibrationStepResult
- Dim signalDeviation As KeyValuePair(Of Single, Single)
- With calibration
- .PressureCalibrator.SetPressureControlMode(PressureCalibratorPpc.PpcControlMode.StaticMode)
- .PressureCalibrator.SetTargetPressure(messPoint)
- My.Application.Log.WriteEntry()
- Log.WriteLog("Pressure set to " & messPoint & " bar")
- While Not .PressureCalibrator.PressureReady()
- Thread.Sleep(500)
- End While
- Log.WriteLog($"Pressure set successfully. Waiting {calibrationHoldTimeForReading / 1000} sec. for reading...")
- Thread.Sleep(calibrationHoldTimeForReading) 'BUG: Setting in DLL
- Log.WriteLog("Trying to read")
- 'KeysightNEEDED
- 'actualReading = DigitalMultimeter.Read()
- If Not IsNothing(shunt) Then
- actualReading = GetCurrentFromMeasuredVoltage(actualReading, shunt)
- End If
- .OutputSignalList.Add(actualReading)
- signalDeviation = GetSignalDeviation(messPoint, actualReading)
- Log.WriteLog("Read successful---Pressure:" & messPoint & " signal:" & actualReading)
- calibrationStepResult = New CalibrationStepResult(messPoint, actualReading, signalDeviation.Key, signalDeviation.Value) 'TODO:Check for output type
- .CalibrationSteps.Add(calibrationStepResult)
- End With
- Return calibrationStepResult
- End Function
Variable
calibration
ist ein private Field im CalibrationManager (Klasse der oben gennanten Methode) und enthält Info über die KlaibrierungDiese wird aber mehrmals ausgeführt in einer höheren Methode
DoCalibrationAsync
, die von der Klasse CalibrationManager ausgeführt wird, die für den Kaibriervorgang zuständig ist und so aussieht:VB.NET-Quellcode
- Public Function DoCalibrationAsync(calibrationHoldTimeForReading As Integer, Optional progress As IProgress(Of CalibrationStepResult) = Nothing, Optional cancellationToken As CancellationToken = Nothing) As Task 'TODO:Check for Type and check how to log the best way
- With calibration
- Return Task.Run((Sub()
- If IsNothing(cancellationToken) Then
- cancellationToken = CancellationToken.None
- End If
- If Not .PressureCalibrator.SerialPort.IsOpen() Then
- .PressureCalibrator.SerialPort.Open()
- End If
- .PressureCalibrator.SetPressureUnit(PressureUnit.bar)
- For Each point In .InputList
- Dim measureResult = SetMessPointAndMeasure(point, calibrationHoldTimeForReading)
- cancellationToken.ThrowIfCancellationRequested()
- If Not IsNothing(progress) Then
- progress.Report(measureResult)
- End If
- Next
- .PressureCalibrator.Vent()
- .PressureCalibrator.SerialPort.Close()
- End Sub), cancellationToken)
- End With
- End Function
Die Idee ist die Klasse
CalibrationManager
kriegt eine Prop z.B LogRequested as Boolean
, welche dann entscheidet, ob die Kalibrierung bzw. die Methoden, die das Log unterstützen würden, geloggt werden. Geht es anders als jetzt vor jedem Log.Write zu checken ob LogRequested oder
If IsNothing(Log.Write)...
o.ä zu machen bzw. ist diese die vernünftige Art zu loggen? Ich kenne über die Existenz von My.Application.Log etc..aber 1. ich habs sie noch nie benutzt 2.Was ich gelesen habe ist alles über Events und Exceptions.(Was aber auch nicht heissen soll... )Die hier benutzte Log Klasse, ist selbstgeschrieben, einfach eine
Write
-Methode, und 3 Props FileName
, FilePath
, FullPath
(ReadOnly)Danke im Voraus und schönen Tag
RG
Life doesn't give you a datasheet. Sometimes the docs are wrong and you have to try it.
Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von „rgomez“ ()