109 lines
2.0 KiB
Go
109 lines
2.0 KiB
Go
|
package thermocouple
|
||
|
|
||
|
import (
|
||
|
"math"
|
||
|
"th7/data/thermocouple"
|
||
|
)
|
||
|
|
||
|
const (
|
||
|
K_MAX_C = 1372.0
|
||
|
K_MIN_C = -270.0
|
||
|
K_MAX_UV = 54886.0
|
||
|
K_MIN_UV = -5891.0
|
||
|
)
|
||
|
|
||
|
func k_c_to_uv(c float64) (float64, error) {
|
||
|
|
||
|
if c < K_MIN_C || c > K_MAX_C {
|
||
|
return 0, thermocouple.ErrC
|
||
|
}
|
||
|
|
||
|
var c0, c1, c2, c3, c4, c5, c6, c7, c8, c9, c10 float64
|
||
|
var t, et, E, a0, a1 float64
|
||
|
|
||
|
a0 = 1.185976e2
|
||
|
a1 = -1.183432e-4
|
||
|
|
||
|
if c < 0.0 {
|
||
|
c0 = 0.0
|
||
|
c1 = 3.9450128025e1
|
||
|
c2 = 2.3622373598e-2
|
||
|
c3 = -3.2858906784e-4
|
||
|
c4 = -4.9904828777e-6
|
||
|
c5 = -6.7509059173e-8
|
||
|
c6 = -5.7410327428e-10
|
||
|
c7 = -3.1088872894e-12
|
||
|
c8 = -1.0451609365e-14
|
||
|
c9 = -1.9889266878e-17
|
||
|
c10 = -1.6322697486e-20
|
||
|
et = 0.0
|
||
|
} else {
|
||
|
c0 = -1.7600413686e1
|
||
|
c1 = 3.8921204975e1
|
||
|
c2 = 1.8558770032e-2
|
||
|
c3 = -9.9457592874e-5
|
||
|
c4 = 3.1840945719e-7
|
||
|
c5 = -5.6072844889e-10
|
||
|
c6 = 5.6075059059e-13
|
||
|
c7 = -3.2020720003e-16
|
||
|
c8 = 9.7151147152e-20
|
||
|
c9 = -1.2104721275e-23
|
||
|
c10 = 0.0
|
||
|
t = c
|
||
|
t -= 126.9686
|
||
|
t = t * t
|
||
|
t = t * a1
|
||
|
et = math.Exp(t) * a0
|
||
|
}
|
||
|
t = c
|
||
|
E = c0 + t*(c1+t*(c2+t*(c3+t*(c4+t*(c5+t*(c6+t*(c7+t*(c8+t*(c9+t*(c10)))))))))) + et
|
||
|
return E, nil
|
||
|
}
|
||
|
|
||
|
func k_uv_to_c(uv float64) (float64, error) {
|
||
|
|
||
|
if uv < K_MIN_UV || uv > K_MAX_UV {
|
||
|
return 0, thermocouple.ErrUV
|
||
|
}
|
||
|
|
||
|
var c0, c1, c2, c3, c4, c5, c6, c7, c8, c9, T float64
|
||
|
|
||
|
if uv < 0.0 {
|
||
|
c0 = 0.0
|
||
|
c1 = 2.5173462e-2
|
||
|
c2 = -1.1662878e-6
|
||
|
c3 = -1.0833638e-9
|
||
|
c4 = -8.9773540e-13
|
||
|
c5 = -3.7342377e-16
|
||
|
c6 = -8.6632643e-20
|
||
|
c7 = -1.0450598e-23
|
||
|
c8 = -5.1920577e-28
|
||
|
c9 = 0.0
|
||
|
} else if uv < 20644.0 {
|
||
|
c0 = 0.0
|
||
|
c1 = 2.508335e-2
|
||
|
c2 = 7.860106e-8
|
||
|
c3 = -2.503131e-10
|
||
|
c4 = 8.315270e-14
|
||
|
c5 = -1.228034e-17
|
||
|
c6 = 9.804036e-22
|
||
|
c7 = -4.413030e-26
|
||
|
c8 = 1.057734e-30
|
||
|
c9 = -1.052755e-35
|
||
|
} else {
|
||
|
c0 = -1.318058e2
|
||
|
c1 = 4.830222e-2
|
||
|
c2 = -1.646031e-6
|
||
|
c3 = 5.464731e-11
|
||
|
c4 = -9.650715e-16
|
||
|
c5 = 8.802193e-21
|
||
|
c6 = -3.110810e-26
|
||
|
c7 = 0.0
|
||
|
c8 = 0.0
|
||
|
c9 = 0.0
|
||
|
}
|
||
|
|
||
|
T = c0 + uv*(c1+uv*(c2+uv*(c3+uv*(c4+uv*(c5+uv*(c6+uv*(c7+uv*(c8+uv*(c9)))))))))
|
||
|
return T, nil
|
||
|
}
|