succd: tristate pirani safety detection
This commit is contained in:
parent
85d2afbdd0
commit
80f482b732
|
@ -123,7 +123,10 @@ func (d *daemon) processOnce(_ context.Context) error {
|
||||||
d.aboveRough.process(float64(mbar))
|
d.aboveRough.process(float64(mbar))
|
||||||
d.aboveHigh.process(float64(mbar))
|
d.aboveHigh.process(float64(mbar))
|
||||||
|
|
||||||
if d.piraniWireBreakDetection() {
|
// Check if the pirani gauge is disconnected. Note: this will assume the
|
||||||
|
// pirani gauge is connected for the first couple of processing runs as
|
||||||
|
// samples are still being captured.
|
||||||
|
if d.piraniDetection() == piraniDetectionDisconnected {
|
||||||
// Unrealistic result, Pirani probe probably disconnected. Failsafe mode.
|
// Unrealistic result, Pirani probe probably disconnected. Failsafe mode.
|
||||||
if !d.failsafe {
|
if !d.failsafe {
|
||||||
d.failsafe = true
|
d.failsafe = true
|
||||||
|
@ -191,9 +194,24 @@ func (d *daemon) processOnce(_ context.Context) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (d *daemon) piraniWireBreakDetection() bool {
|
type piraniDetection uint
|
||||||
|
|
||||||
|
const (
|
||||||
|
// piraniDetectionUnknown means the system isn't yet sure whether the pirani
|
||||||
|
// gauge is connected.
|
||||||
|
piraniDetectionUnknown piraniDetection = iota
|
||||||
|
// piraniDetectionConnected means the system assumes the pirani gauge is
|
||||||
|
// connected.
|
||||||
|
piraniDetectionConnected = iota
|
||||||
|
// piraniDetectionDisconnected means the system assumes the pirani gauge is
|
||||||
|
// disconnected.
|
||||||
|
piraniDetectionDisconnected = iota
|
||||||
|
)
|
||||||
|
|
||||||
|
// piraniDetection guesses whether the pirani gauge is connected.
|
||||||
|
func (d *daemon) piraniDetection() piraniDetection {
|
||||||
if len(d.adcPiraniVolts) < 3 {
|
if len(d.adcPiraniVolts) < 3 {
|
||||||
return true
|
return piraniDetectionUnknown
|
||||||
}
|
}
|
||||||
volts := float32(0.0)
|
volts := float32(0.0)
|
||||||
for _, v := range d.adcPiraniVolts[len(d.adcPiraniVolts)-3:] {
|
for _, v := range d.adcPiraniVolts[len(d.adcPiraniVolts)-3:] {
|
||||||
|
@ -204,7 +222,10 @@ func (d *daemon) piraniWireBreakDetection() bool {
|
||||||
bar := math.Pow(10.0, float64(volts)-8.5)
|
bar := math.Pow(10.0, float64(volts)-8.5)
|
||||||
mbar := float32(bar * 1000.0)
|
mbar := float32(bar * 1000.0)
|
||||||
|
|
||||||
return mbar < 4e-6
|
if mbar < 4e-6 {
|
||||||
|
return piraniDetectionDisconnected
|
||||||
|
}
|
||||||
|
return piraniDetectionConnected
|
||||||
}
|
}
|
||||||
|
|
||||||
// pirani returns the Pirani gauge voltage and pressure.
|
// pirani returns the Pirani gauge voltage and pressure.
|
||||||
|
|
Loading…
Reference in a new issue