<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body>
    <p>NIST pise ze "<span
style="caret-color: rgb(58, 71, 77); color: rgb(58, 71, 77); font-family: Cambria, "Helvetica Neue", Helvetica, Arial; font-size: 16px; font-style: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: auto; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(245, 245, 245); text-decoration: none; display: inline !important; float: none;">For
        Type K thermocouples above 0 °C, there is an additional term to
        account for a magnetic ordering effect:</span>"<br>
    </p>
    <br>
    <div class="moz-cite-prefix">On 25/12/2024 14:38, Pavel Hudeček
      wrote:<br>
    </div>
    <blockquote type="cite"
      cite="mid:57cce643-b631-4f1d-92ef-e37e017d6092@seznam.cz">
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      Díky za zajímavé čtení.<br>
      Potvrdili mi podezření, že není moc horších možností než právě K.<br>
      Příjemné je, že hodnoty v tabulkách neobsahují mezery a tak se
      dají přímo kopírovat do programu.<br>
      <br>
      Ale odpověď na mojí otázku, zda/proč nejde pro K upravit hodnoty
      koeficientů polynomu tak, aby tam nemusela bejt ta dodatečná část,
      jsem nenašel.<br>
      <br>
      PH<br>
      <br>
      <div class="moz-cite-prefix">Dne 25.12.2024 v 13:58 Daniel Valuch
        napsal(a):<br>
      </div>
      <blockquote type="cite"
        cite="mid:4c4f63ed-6d8f-4008-acda-257e93e92d63@k-net.fr">
        <meta http-equiv="Content-Type"
          content="text/html; charset=UTF-8">
        <p>nechcem byt vlezly, ale naozaj stoji za precitanie
          dokumentacia priamo od BIPM. Preco nepouzivat literaturu
          priamo od zdroja? Metrologovia zarucene poznaju lepsie
          vsetkych diablikov ako firma co zvara draty z roznych kovov...</p>
        <p><a class="moz-txt-link-freetext"
href="https://www.bipm.org/en/committees/cc/cct/guides-to-thermometry"
            moz-do-not-send="true">https://www.bipm.org/en/committees/cc/cct/guides-to-thermometry</a><br>
        </p>
        <p>tam si najdi Guide on Secondary Thermometry Thermocouple
          Thermometry: 1. General Usage<br>
        </p>
        <p><a class="moz-txt-link-freetext"
href="https://www.bipm.org/documents/20126/41773843/Thermocouple_Thermometry_Part1.pdf/d23088f8-3bab-bacc-0cae-7358eb2666b4?version=1.4&t=1700233754743&download=true"
            moz-do-not-send="true">https://www.bipm.org/documents/20126/41773843/Thermocouple_Thermometry_Part1.pdf/d23088f8-3bab-bacc-0cae-7358eb2666b4?version=1.4&t=1700233754743&download=true</a></p>
        <p>Tam najdes popis kazdeho typu aj s vysvetlenim dolezitych
          javov. Dokonca take veci, ze termoclanok typu K trpi
          hysterezou v rozsahu 1-8 stupnov ked je vystaveny teplote nad
          150 stupnov, alebo degradacia teplotneho koeficientu podla
          toho ci je vystaveny redukcnej atmosfere, alebo nerezovej
          trubke. <br>
        </p>
        <p>A na konci je Appendix A: Thermocouple reference functions,
          kde zistis, ze dodatocna exponencialna funkcia je pouzita len
          pre typ K a len v smere teplota -> napatie. Pre opacny smer
          (napatie -> teplota) su vypocitane koeficienty polynomov
          (strany 44-56)<br>
        </p>
        <p>Dokonca je tam rozvedene aj spominane zatvorkovanie...</p>
        <p><br>
        </p>
        <p><br>
        </p>
        <p><br>
        </p>
        <div class="moz-cite-prefix">On 25/12/2024 13:10, Pavel Hudeček
          wrote:<br>
        </div>
        <blockquote type="cite"
          cite="mid:1e7248b5-9556-4ff6-872b-2f31b9192b0b@seznam.cz">
          <meta http-equiv="Content-Type"
            content="text/html; charset=UTF-8">
          Jsem si říkal, proč má ten týpek na gitu hromady závorek, tak
          díky za vysvětlení.<br>
          <br>
          Nejvíc se mi samozřejmě líbí varianta s forem.<br>
          <br>
          Pak je ještě otázka, zda je nějaká optimalizace na to, když
          přibudou ještě ty další věci:<br>
          <img src="cid:part1.C78760K2.t0XS6w08@k-net.fr" alt=""
            class=""><br>
          <a class="moz-txt-link-freetext"
href="https://www.omega.co.uk/temperature/z/pdf/z198-201.pdf"
            moz-do-not-send="true">https://www.omega.co.uk/temperature/z/pdf/z198-201.pdf</a><br>
          <br>
          A vlastně proč je to takhle a není prostě jen jiná sada
          koeficientů polynomu tak, aby se docílilo stejného tvaru
          funkce?<br>
          <br>
          PH<br>
          <br>
          <div class="moz-cite-prefix">Dne 25.12.2024 v 11:34 Miroslav
            Mraz napsal(a):<br>
          </div>
          <blockquote type="cite"
            cite="mid:75b017f9-8e9a-4da6-b3c2-5c03d345c800@volny.cz">Koukal
            jsem na to a trochu si hrál s překladačem a jak definovat
            polynomy. Zkusil jsem 3 způsoby <br>
            <br>
            static constexpr int coeff [] = {1,2,3,4,5}; <br>
            // default optimize -Os <br>
            int poly_a (const int x) { <br>
              int y = coeff[4]; <br>
              int t = x; <br>
              y += coeff[3] * t;  t *= x; <br>
              y += coeff[2] * t;  t *= x; <br>
              y += coeff[1] * t;  t *= x; <br>
              y += coeff[0] * t; <br>
              return y; <br>
            } <br>
            int poly_b (const int x) { <br>
              return  ((((coeff[0]  * x) <br>
                        + coeff[1]) * x <br>
                        + coeff[2]) * x <br>
                        + coeff[3]) * x <br>
                        + coeff[4]; <br>
            } <br>
            [[using gnu: optimize("O3")]] // unroll loop <br>
            int poly_c (const int x) { <br>
              int y = 0; <br>
              for (auto c : coeff) { y *= x; y += c; } <br>
              return y; <br>
            } <br>
            <br>
            Způsob a) je podobný kódu, co poslal balu, odděleně počítá
            mocninu argumentu, což není příliš efektivní. Způsob b)
            vyplyne z toho, pokud polynom napíšeme podle definice a
            uvědomíme si, že x je z toho možné povytýkat, ozávovorkovat
            to a je to jednodušší. A nakonec způsob c) jednoduchou
            smyčkou umožní to celé napsat jednodušeji. <br>
            <br>
            Ale proč to píšu. Uvědomil jsem si jak chytré jsou moderní
            překladače. Když donutím překladač, aby smyčku rozvinul,
            výsledný kód pro b) a c) jsou (pro RISC-V, ale zřejmě i
            jinde) naprosto stejné. Překladač pozná, že první násobení 0
            je zbytečné a vyhodí ho. A nejen to - pozná i zbytečnost
            násobení 1 (1. koeficient, je konstatní), neprovádí ho. <br>
            <br>
            Mrazík <br>
            <br>
            On 24. 12. 24 16:13, Daniel Valuch wrote: <br>
            <blockquote type="cite">poslane sukromne... <br>
              <br>
              Ano, ja som to tiez minuly rok studoval spracovanie
              signalov od RTD a termoclankov cele vianoce. Zaujimava
              problematika. Dokumenty priamo z BIPM na temu ITS-90 a
              tabulky koeficientov pre RTD aj termoclanky od NISTu su
              velmi dobry zaklad a su velmi informativne. <br>
              <br>
              Prikladam vycuc z kodu <br>
              <br>
                 if (MeasureTC1) { <br>
                     // measure cold junction temperature first <br>
                     RColdJunction = (float)ADCavrgCJ /
              (float)ADCavrgRef * R0; // scaling of cold junction and
              reference cancels out <br>
                     TemperatureCJ =
              RTDpolynomial(WCorrection(RColdJunction/R0nominal)); //
              calculate cold junction temperature <br>
              <br>
                     VCJ = ThermoCoupleK_TtoE(TemperatureCJ - 273.16);
              // equivalent Cold Junction voltage <br>
                     VTC1raw = (float)ADCavrgTC1 * QueueBitShift * LSBmV
              * TC1InvGain;  // convert measured ADC number to voltage
              in mV <br>
                     VTC1raw = VTC1raw -
              TC1offsetVoltage;                              // suppress
              analogue offset (e.g. from the op-amp) <br>
                     VTC1comp = VTC1raw +
              VCJ;                                          // cold
              junction voltage added to measured voltage <br>
                     TemperatureTC1 = ThermoCoupleK_EtoT(VTC1comp); <br>
                     // 0=Celsius, 1=Kelvin, 2=Farenheit, 3=Ohm,
              4=microVolt <br>
                     if (unit == 0) { <br>
                       PrepareText(TemperatureTC1, 0); <br>
                     } else if (unit == 1) { <br>
                       PrepareText(TemperatureTC1 + 273.15, 1); <br>
                     } else if (unit == 2) { <br>
                       PrepareText(TemperatureTC1 * 1.8 + 32.0, 2); <br>
                     } else if (unit == 3) { <br>
                       PrepareText(VTC1raw, 4); <br>
                     } <br>
                   } <br>
              <br>
              <br>
              float ThermoCoupleK_EtoT(float e) { <br>
                 // type K ITS-90 polynomial <br>
                 // <a class="moz-txt-link-freetext"
href="https://srdata.nist.gov/its90/type_k/kcoefficients_inverse.html"
                moz-do-not-send="true">https://srdata.nist.gov/its90/type_k/kcoefficients_inverse.html</a>
              <br>
                 const float d0m = 0.0e0; <br>
                 const float d1m = 2.5173462e1; <br>
                 const float d2m = -1.1662878e0; <br>
                 const float d3m = -1.0833638e0; <br>
                 const float d4m = -8.9773540e-1; <br>
                 const float d5m = -3.7342377e-1; <br>
                 const float d6m = -8.6632643e-2; <br>
                 const float d7m = -1.0450598e-2; <br>
                 const float d8m = -5.1920577e-4; <br>
              <br>
                 const float d0p = 0.000000e0; <br>
                 const float d1p = 2.508355e1; <br>
                 const float d2p = 7.860106e-2; <br>
                 const float d3p = -2.503131e-1; <br>
                 const float d4p = 8.315270e-2; <br>
                 const float d5p = -1.228034e-2; <br>
                 const float d6p = 9.804036e-4; <br>
                 const float d7p = -4.413030e-5; <br>
                 const float d8p = 1.057734e-6; <br>
                 const float d9p = -1.052755e-8; <br>
              <br>
                 float E = 0.0; <br>
                 float t90 = 0.0; <br>
              <br>
                 E = e; <br>
              <br>
                 if (e < 0.00) {  // negative temperature <br>
                   t90 = t90 + d1m * E; <br>
                   E = E * e; <br>
                   t90 = t90 + d2m * E; <br>
                   E = E * e; <br>
                   t90 = t90 + d3m * E; <br>
                   E = E * e; <br>
                   t90 = t90 + d4m * E; <br>
                   E = E * e; <br>
                   t90 = t90 + d5m * E; <br>
                   E = E * e; <br>
                   t90 = t90 + d6m * E; <br>
                   E = E * e; <br>
                   t90 = t90 + d7m * E; <br>
                   E = E * e; <br>
                   t90 = t90 + d8m * E; <br>
                 } else if (e >= 0 && e < 20.644) {  //
              positive temperature <500 C <br>
                   t90 = t90 + d1p * E; <br>
                   E = E * e; <br>
                   t90 = t90 + d2p * E; <br>
                   E = E * e; <br>
                   t90 = t90 + d3p * E; <br>
                   E = E * e; <br>
                   t90 = t90 + d4p * E; <br>
                   E = E * e; <br>
                   t90 = t90 + d5p * E; <br>
                   E = E * e; <br>
                   t90 = t90 + d6p * E; <br>
                   E = E * e; <br>
                   t90 = t90 + d7p * E; <br>
                   E = E * e; <br>
                   t90 = t90 + d8p * E; <br>
                   E = E * e; <br>
                   t90 = t90 + d9p * E; <br>
                 } else { <br>
                   t90 = -273.0; <br>
                 } <br>
              <br>
                 return t90; <br>
              } <br>
              <br>
              <br>
            </blockquote>
            _______________________________________________ <br>
            HW-list mailing list  -  sponsored by <a
              class="moz-txt-link-abbreviated" href="http://www.HW.cz"
              moz-do-not-send="true">www.HW.cz</a> <br>
            <a class="moz-txt-link-abbreviated moz-txt-link-freetext"
              href="mailto:Hw-list@list.hw.cz" moz-do-not-send="true">Hw-list@list.hw.cz</a>
            <br>
            <a class="moz-txt-link-freetext"
              href="http://list.hw.cz/mailman/listinfo/hw-list"
              moz-do-not-send="true">http://list.hw.cz/mailman/listinfo/hw-list</a>
            <br>
          </blockquote>
          <br>
          <br>
          <fieldset class="moz-mime-attachment-header"></fieldset>
          <pre wrap="" class="moz-quote-pre">_______________________________________________
HW-list mailing list  -  sponsored by <a
          class="moz-txt-link-abbreviated" href="http://www.HW.cz"
          moz-do-not-send="true">www.HW.cz</a>
<a class="moz-txt-link-abbreviated moz-txt-link-freetext"
          href="mailto:Hw-list@list.hw.cz" moz-do-not-send="true">Hw-list@list.hw.cz</a>
<a class="moz-txt-link-freetext"
          href="http://list.hw.cz/mailman/listinfo/hw-list"
          moz-do-not-send="true">http://list.hw.cz/mailman/listinfo/hw-list</a>
</pre>
        </blockquote>
        <br>
        <fieldset class="moz-mime-attachment-header"></fieldset>
        <pre wrap="" class="moz-quote-pre">_______________________________________________
HW-list mailing list  -  sponsored by <a
        class="moz-txt-link-abbreviated" href="http://www.HW.cz"
        moz-do-not-send="true">www.HW.cz</a>
<a class="moz-txt-link-abbreviated moz-txt-link-freetext"
        href="mailto:Hw-list@list.hw.cz" moz-do-not-send="true">Hw-list@list.hw.cz</a>
<a class="moz-txt-link-freetext"
        href="http://list.hw.cz/mailman/listinfo/hw-list"
        moz-do-not-send="true">http://list.hw.cz/mailman/listinfo/hw-list</a>
</pre>
      </blockquote>
      <br>
      <br>
      <fieldset class="moz-mime-attachment-header"></fieldset>
      <pre wrap="" class="moz-quote-pre">_______________________________________________
HW-list mailing list  -  sponsored by <a class="moz-txt-link-abbreviated" href="http://www.HW.cz">www.HW.cz</a>
<a class="moz-txt-link-abbreviated" href="mailto:Hw-list@list.hw.cz">Hw-list@list.hw.cz</a>
<a class="moz-txt-link-freetext" href="http://list.hw.cz/mailman/listinfo/hw-list">http://list.hw.cz/mailman/listinfo/hw-list</a>
</pre>
    </blockquote>
  </body>
</html>