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