Re: Peripetie s termočlánky (Vianocna list..
Pavel Hudeček
edizon na seznam.cz
Čtvrtek Prosinec 26 16:20:48 CET 2024
No já to beru tak, že polynom je paroximace s nějakou přesností a
referenční je ta tabulka, tedy chci porovnávat s ní. A chci s ní
samozřejmě porovnat i ten polynom, čistě ze zvědavosti, k počítání
samozřejmě použiju long double alias extended, ten má 64 bitů jenom
mantisu. Když se tady potkávaj e-1 až e-25, tak se mi i těch 19 míst zdá
málo:-)
Je paradoxní, že se moc nepoužívá, přestože je to nativní formát FPU v
PC, tedy všechny floaty a doubly se na nej konvertěj a pak zas zpátky.
Třeba C# ho vůbec nemá. Nevím jak numpy, jestli má i float80?
PH
Dne 26.12.2024 v 15:51 Daniel Valuch napsal(a):
>
>> Prostě klasická zmatená dizkuze:-)
> Lebo nechodis do krcmy. Tam by sme to mali vyriesene za 5 minut :-)
>
> Preco tabulky? Mas tam polynom, ktoreho hodnotu si vyratas v bode,
> ktory ta zaujima. Ked je to na kontrolne/referencne ucely, tak si
> zadefinujes, ze to chces pocitat s vysokym rozlisenim aby hodnoty
> netrpeli stratou presnosti, pamat a rychlost v tomto pripade nie je
> dolezita. V kratkom floate to samozrejme nebude fungovat, ako uz bolo
> spomenute.
>
> t = numpy.arange(0,1301,1,dtype=numpy.float64)
>
> a0 = numpy.float64(-0.176004136860e-1);
> a1 = numpy.float64(0.389212049750e-1);
> a2 = numpy.float64(0.185587700320e-4);
> a3 = numpy.float64(-0.994575928740e-7);
> a4 = numpy.float64(0.318409457190e-9);
> a5 = numpy.float64(-0.560728448890e-12);
> a6 = numpy.float64(0.560750590590e-15);
> a7 = numpy.float64(-0.320207200030e-18);
> a8 = numpy.float64(0.971511471520e-22);
> a9 = numpy.float64(-0.121047212750e-25);
>
> c0 = numpy.float64( 0.118597600000E+00)
> c1 = numpy.float64(-0.118343200000E-03)
> c2 = numpy.float64( 0.126968600000E+03)
>
> # cleny polynomu
> Ep0 = a0
> Ep1 = a1* numpy.power(t,1)
> Ep2 = a2* numpy.power(t,2)
> Ep3 = a3* numpy.power(t,3)
> Ep4 = a4* numpy.power(t,4)
> Ep5 = a5* numpy.power(t,5)
> Ep6 = a6* numpy.power(t,6)
> Ep7 = a7* numpy.power(t,7)
> Ep8 = a8* numpy.power(t,8)
> Ep9 = a9* numpy.power(t,9)
>
> # polynom poskladany z clenov
> Ep = Ep0+Ep1+Ep2+Ep3+Ep4+Ep5+Ep6+Ep7+Ep8+Ep9
>
> # polynom priamo vypocitany
> Epp = a0*t**0 + a1*t**1 + a2*t**2 + a3*t**3 + a4*t**4 + a5*t**5 +
> a6*t**6 + a7*t**7 + a8*t**8 + a9*t**9
>
> # exponencialny clen
> Ee = c0 * numpy.exp(c1*(t-c2)*(t-c2))
>
>
>
>
> On 26/12/2024 15:36, Pavel Hudeček wrote:
>> Takže jsem to měl správně, v bodě 3 je hodnota vůči 0.
>>
>> A tohle taky. Těch několik sad koeficientů je vyjmenováno asi na 100
>> místech po netu a tak na 10 jsou ve formě rovnou do programu, je to
>> jen pár desítek čísel. Mě ale zajímá primární tabukla hodnot, těch je
>> asi 1500, to je ta větší část uvedeného txt. A s nima chci porovnat
>> výsledky různých způsobů výpočtu.
>>
>> PH
>>
>> Dne 26.12.2024 v 15:08 Daniel Valuch napsal(a):
>>>
>>> Asi si nerozumieme. Nerozumiem kde je problem ani s meranim, ani s
>>> koeficientami polynomov.
>>>
>>> Meranie: Ak mas k dispozicii/chces pouzit 0 °C, tak je jeden koniec
>>> termoclanku na tejto teplote. Odmeras napatie na druhej strane a
>>> rovno prepocitas na teplotu. Ak nepouzivas referenciu 0 °C, ale inu
>>> (napriklad izbovu teplotu svoriek multimetra) tak odmeras teplotu
>>> svoriek, prevedies na ekvivalentne napatie (voci 0 °C), odmeras
>>> napatie z termoclanku, napatie svoriek pouzijes ako offset. Vysledne
>>> napatie prevedies na teplotu.
>>>
>>> Koeficienty: V dokumentoch, ktore som posielal mas koeficienty
>>> polynomov. Netreba ziaden script ani odstranovat hlavicky. Aj na tej
>>> linke co si prave poslal ich mas uplne na konci. Priame aj inverzne.
>>> Pouzivas obidva. Priame na vypocet offsetu z teploty svoriek a
>>> inverzne na vypocet teploty zo ziskaneho napatia.
>>>
>>> Uryvok z dokumentu https://its90.nist.gov/downloadFiles/type_k.tab.txt
>>>
>>> ************************************
>>> * This section contains coefficients for type K thermocouples for
>>> * the two subranges of temperature listed below. The coefficients
>>> * are in units of °C and mV and are listed in the order of constant
>>> * term up to the highest order. The equation below 0 °C is of the form
>>> * E = sum(i=0 to n) c_i t^i.
>>> *
>>> * The equation above 0 °C is of the form
>>> * E = sum(i=0 to n) c_i t^i + a0 exp(a1 (t - a2)^2).
>>> *
>>> * Temperature Range (°C)
>>> * -270.000 to 0.000
>>> * 0.000 to 1372.000
>>> ************************************
>>> name: reference function on ITS-90
>>> type: K
>>> temperature units: °C
>>> emf units: mV
>>> range: -270.000, 0.000, 10
>>> 0.000000000000E+00
>>> 0.394501280250E-01
>>> 0.236223735980E-04
>>> -0.328589067840E-06
>>> -0.499048287770E-08
>>> -0.675090591730E-10
>>> -0.574103274280E-12
>>> -0.310888728940E-14
>>> -0.104516093650E-16
>>> -0.198892668780E-19
>>> -0.163226974860E-22
>>> range: 0.000, 1372.000, 9
>>> -0.176004136860E-01
>>> 0.389212049750E-01
>>> 0.185587700320E-04
>>> -0.994575928740E-07
>>> 0.318409457190E-09
>>> -0.560728448890E-12
>>> 0.560750590590E-15
>>> -0.320207200030E-18
>>> 0.971511471520E-22
>>> -0.121047212750E-25
>>> exponential:
>>> a0 = 0.118597600000E+00
>>> a1 = -0.118343200000E-03
>>> a2 = 0.126968600000E+03
>>>
>>>
>>>
>>> ************************************
>>> * This section contains coefficients of approximate inverse
>>> * functions for type K thermocouples for the subranges of
>>> * temperature and voltage listed below. The range of errors of
>>> * the approximate inverse function for each subrange is also given.
>>> * The coefficients are in units of °C and mV and are listed in
>>> * the order of constant term up to the highest order.
>>> * The equation is of the form t_90 = d_0 + d_1*E + d_2*E^2 + ...
>>> * + d_n*E^n,
>>> * where E is in mV and t_90 is in °C.
>>> *
>>> * Temperature Voltage Error
>>> * range range range
>>> * (°C) (mV) (° C)
>>> * -200. to 0. -5.891 to 0.000 -0.02 to 0.04
>>> * 0. to 500. 0.000 to 20.644 -0.05 to 0.04
>>> * 500. to 1372. 20.644 to 54.886 -0.05 to 0.06
>>> ********************************************************
>>> Inverse coefficients for type K:
>>>
>>> Temperature -200. 0. 500.
>>> Range: 0. 500. 1372.
>>>
>>> Voltage -5.891 0.000 20.644
>>> Range: 0.000 20.644 54.886
>>>
>>> 0.0000000E+00 0.000000E+00 -1.318058E+02
>>> 2.5173462E+01 2.508355E+01 4.830222E+01
>>> -1.1662878E+00 7.860106E-02 -1.646031E+00
>>> -1.0833638E+00 -2.503131E-01 5.464731E-02
>>> -8.9773540E-01 8.315270E-02 -9.650715E-04
>>> -3.7342377E-01 -1.228034E-02 8.802193E-06
>>> -8.6632643E-02 9.804036E-04 -3.110810E-08
>>> -1.0450598E-02 -4.413030E-05 0.000000E+00
>>> -5.1920577E-04 1.057734E-06 0.000000E+00
>>> 0.0000000E+00 -1.052755E-08 0.000000E+00
>>>
>>> Error -0.02 -0.05 -0.05
>>> Range: 0.04 0.04 0.06
>>>
>>>
>>>
>>> On 26/12/2024 14:49, Pavel Hudeček wrote:
>>>> Pokud v kroku 3 věta nemá pokračovat .. proti 0°C, tak přeci může
>>>> bej výsledek jakejkoli.
>>>> Naopak, pokud jednoduše vezmu změřenou T2, najdu jí v tabulce na
>>>> NIST, tak dostanu U který by TČ umístěný na tom místě dával vůči 0,
>>>> nebo ne?
>>>>
>>>> Žádný z linků související se Zenitem nevede na stránku, kde by byla
>>>> tabulka hodnot v nějakém formátu, aby šla copy-paste hodit do
>>>> programu, nebo binárně přilinkovat.
>>>> Nejblíž je asi tohle:
>>>> https://its90.nist.gov/downloadFiles/type_k.tab.txt
>>>> k tomu se dá proklikat z linku v programu.
>>>>
>>>> Ale pořád to znamená prohnat to nějakým py skriptem, co vyhází
>>>> všechny záhlaví + teploty a doplní čárky.
>>>> A potom teprve můžu třeba zkusit, co se stane když nechám totéž
>>>> napočítat originálními polynomy kolem 9. řádu, ale za použití
>>>> floatu v MCU.
>>>>
>>>> A tak nějak předpokládám, že když jste sem dávali ty grafy
>>>> odchylek, tak už takouvou tabulku odněkud máte:-)
------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20241226/d3c0b84c/attachment.htm>
Další informace o konferenci Hw-list