Модуль PhysRtdTc содержит функции, относящиеся к термопарам (TC, ThermoCouple) и резистивным температурным датчикам (RTD, Resistive Temperature Detectors). Функции соответствуют ГОСТ Р 8.585—2001 (термопары) и ГОСТ 6651-2009 (датчики RTD).
_con_PhysRtdTc.inc константы
_var_PhysRtdTc.inc переменные
_fun_PhysRtdTc.inc функции

Константы:

   Следующие константы идентифицируют тип idn термопары или датчика RTD:
   
   Имя               Значение  Тип датчика                   Диапазон [°C]  Документ
   thermocouple_R    82        Термопара type R               -50  .. 1768  ГОСТ Р 8.585—2001
   thermocouple_S    83        Термопара type S               -50  .. 1768  ГОСТ Р 8.585—2001
   thermocouple_B    66        Термопара type B                 0  .. 1820  ГОСТ Р 8.585—2001
   thermocouple_J    74        Термопара type J              -210  .. 1200  ГОСТ Р 8.585—2001
   thermocouple_T    84        Термопара type T              -270  ..  400  ГОСТ Р 8.585—2001
   thermocouple_E    69        Термопара type E              -270  .. 1000  ГОСТ Р 8.585—2001
   thermocouple_K    75        Термопара type K              -270  .. 1372  ГОСТ Р 8.585—2001
   thermocouple_N    78        Термопара type N              -270  .. 1300  ГОСТ Р 8.585—2001
   thermocouple_A1   16689     Термопара type A1                0  .. 2500  ГОСТ Р 8.585—2001
   thermocouple_A2   16690     Термопара type A2                0  .. 1800  ГОСТ Р 8.585—2001
   thermocouple_A3   16691     Термопара type A3                0  .. 1800  ГОСТ Р 8.585—2001
   thermocouple_L    76        Термопара type L              -200  ..  800  ГОСТ Р 8.585—2001
   thermocouple_M    77        Термопара type M              -200  ..  100  ГОСТ Р 8.585—2001
   rtd_id_pt100_385  385       Датчик RTD Pt100 a=0.00385    -200  ..  850  ГОСТ 6651-2009
   rtd_id_pt100_391  391       Датчик RTD Pt100 a=0.00391    -200  ..  850  ГОСТ 6651-2009
   rtd_id_cu100_428  428       Датчик RTD Cu100 a=0.00428    -180  ..  200  ГОСТ 6651-2009
   rtd_id_cu100_426  426       Датчик RTD Cu100 a=0.00426     -50  ..  200  ГОСТ 6651-2009
   rtd_id_ni100_617  617       Датчик RTD Ni100 a=0.00617     -60  ..  180  ГОСТ 6651-2009
   
   Примечания:
   1)Для термопар x=R,S,B,J,T,E,K,N,L,M справедливо равенство thermocouple_x = Ord('x'), 
     Для термопар x=A1,A2,A3            справедливо равенство thermocouple_x = Ord('A')*256+Ord('x),
     Например:    thermocouple_R=Ord('R'); thermocouple_A1=Ord('A')*256+Ord('1');
   2)Датчики RTD идентифицируются фактически по значению параметра alfa
  

Переменные:

   Имя               Тип      НачальноеЗначение  Комментарий
   thermocouple_cnt  Real     0                  Число вызовов функции thermocouple_emf для контроля производительности
   thermocouple_eps  Real     macheps            Значение машинной   точности (epsilon)   при расчете thermocouple_ttc
   thermocouple_tol  Real     macheps*10         Значение допустимой точности (tolerance) при расчете thermocouple_ttc
   thermocouple_met  Integer  1                  Метод поиска нуля 1=ZeroIn 2=Bisection   при расчете thermocouple_ttc
   thermocouple_mit  Integer  128                Максимальное число итераций поиска нуля  при расчете thermocouple_ttc
   restemperdet_cnt  Real     0                  Число вызовов функции restemperdet_ohm для контроля производительности
   restemperdet_eps  Real     macheps            Значение машинной   точности (epsilon)   при расчете restemperdet_ttc
   restemperdet_tol  Real     macheps*10         Значение допустимой точности (tolerance) при расчете restemperdet_ttc
   restemperdet_met  Integer  1                  Метод поиска нуля 1=ZeroIn 2=Bisection   при расчете restemperdet_ttc
   restemperdet_mit  Integer  128                Максимальное число итераций поиска нуля  при расчете restemperdet_ttc
   
   Здесь macheps - значение машинной точности, равное 2-52 ≈ 2.22E-16 для используемого типа Real (IEEE 754 double)
  

Функции:

  thermocouple_xxx(..) - относятся к термопарам.
  restemperdet_xxx(..) - относятся к датчикам RTD.

function thermocouple_emf(t:Real; idn:Integer):Real;

Вычисляет ТермоЭДС термопары в зависимости от температуры t и типа термопары idn.
Возвращает ТермоЭДС (EMF, ElectroMotive Force) термопары, [mV].
Возвращает NaN при неверном значении idn.
Аргумент t задает температуру термопары в градусах Цельсия [°C].
Аргумент idn задает тип термопары, см. константы.

При расчете thermocouple_emf предполагается температура холодного спая 0 [°C].
При температуре холодного спая tcj [°C] EMF расчитывается как:

   emf:=thermocouple_emf(t,idn)-thermocouple_emf(tcj,idn);
  

При вычислении thermocouple_emf за границами номинального диапазона используется линейная экстраполяция с сохранением непрерывности значения функции и её первой производной в крайней точке диапазона. Это позволяет надежно расчитывать значение при небольшом (1-2 °C) выходе температуры за номинальный диапазон, однако при значительном выходе за номинальный диапазон температур точность расчета не гарантируется.

function thermocouple_ttc(emf:Real; idn:Integer):Real;

Вычисляет температуру термопары в зависимости от ТермоЭДС и типа термопары idn.
Возвращает температуру термопары в градусах Цельсия [°C].
Возвращает NaN при неверном значении idn или ошибке расчета.
Аргумент emf задает ТермоЭДС (EMF, ElectroMotive Force) термопары, [mV].
Аргумент idn задает тип термопары, см. константы.

thermocouple_ttc вычисляется решением уравнения thermocouple_emf(t,idn)-emf=0 относительно переменной t. Контролировать расчеты можно с помощью переменных thermocouple_cnt, thermocouple_eps, thermocouple_tol, thermocouple_met, thermocouple_mit. По умолчанию расчет ведется с высокой точностью. При этом решение уравнения требует в среднем 12 вычислений thermocouple_emf. Понижение точности расчета может понизить объем вычислений.

При расчете thermocouple_ttc предполагается температура холодного спая 0 [°C].
При температуре холодного спая tcj [°C] температура термопары t расчитывается как:

   t:=thermocouple_tcc(emf+thermocouple_emf(tcj,idn),idn);
  

function thermocouple_lot(idn:Integer):Real;
function thermocouple_hit(idn:Integer):Real;

Вычисляют для типа термопары idn номинальный диапазон температуры t, [°C].
thermocouple_lot возвращает нижний номинальный диапазон термопары, [°C].
thermocouple_hit возвращает верхний номинальный диапазон термопары, [°C].
Возвращает NaN при неверном значении idn.
Аргумент idn задает тип термопары, см. константы.

function thermocouple_idn(ids:String):Integer;
function thermocouple_ids(idn:Integer):String;

Вычисляют числовой или строковый идентификатор термопары.
thermocouple_idn возвращает числовой идентификатор idn по строковому идентификатору ids термопары.
thermocouple_ids возвращает строковый идентификатор ids по числовому идентификатору idn термопары.
Возвращает 0 или пустую строку при неверном значении idn или ids.
Аргумент ids задает тип термопары в виде строки (R,S,B,J,T,E,K,N,A1,A2,A3,L,M).
Аргумент idn задает тип термопары, см. константы.

function thermocouple_tst:Integer;

Выполняет тестирование расчетного модуля термопар, возвращает число найденных ошибок.

function restemperdet_ohm(t:Real; idn:Integer):Real;

Вычисляет сопротивление датчика RTD в зависимости от температуры t и типа idn.
Возвращает сопротивление датчика RTD, [Ом].
Возвращает NaN при неверном значении idn.
Аргумент t задает температуру датчика RTD в градусах Цельсия [°C].
Аргумент idn задает тип датчика RTD, см. константы.

При вычислении restemperdet_ohm за границами номинального диапазона используется линейная экстраполяция с сохранением непрерывности значения функции и её первой производной в крайней точке диапазона. Это позволяет надежно расчитывать значение при небольшом (1-2 °C) выходе температуры за номинальный диапазон, однако при значительном выходе за номинальный диапазон температур точность расчета не гарантируется.

function restemperdet_ttc(ohm:Real; idn:Integer):Real;

Вычисляет температуру датчика RTD в зависимости от сопротивления ohm и типа idn.
Возвращает температуру датчика RTD в градусах Цельсия [°C].
Возвращает NaN при неверном значении idn или ошибке расчета.
Аргумент ohm задает сопротивление датчика RTD, [Ом].
Аргумент idn задает тип датчика RTD, см. константы.

restemperdet_ttc вычисляется решением уравнения restemperdet_ohm(t,idn)-ohm=0 относительно переменной t. Контролировать расчеты можно с помощью переменных restemperdet_cnt, restemperdet_eps, restemperdet_tol, restemperdet_met, restemperdet_mit. По умолчанию расчет ведется с высокой точностью. При этом решение уравнения требует в среднем 10 вычислений restemperdet_ohm. Понижение точности расчета может понизить объем вычислений.

function restemperdet_lot(idn:Integer):Real;
function restemperdet_hit(idn:Integer):Real;

Вычисляют для типа датчика RTD idn номинальный диапазон температуры t, [°C].
restemperdet_lot возвращает нижний номинальный диапазон датчика RTD, [°C].
restemperdet_hit возвращает верхний номинальный диапазон датчика RTD, [°C].
Возвращает NaN при неверном значении idn.
Аргумент idn задает тип датчика RTD, см. константы.

function restemperdet_idn(ids:String):Integer;
function restemperdet_ids(idn:Integer):String;

Вычисляют числовой или строковый идентификатор датчика RTD.
restemperdet_idn возвращает числовой идентификатор idn по строковому ids идентификатору датчика RTD.
restemperdet_ids возвращает строковый идентификатор ids по числовому идентификатору idn датчика RTD.
Возвращает 0 или пустую строку при неверном значении idn или ids.
Аргумент ids задает тип датчика RTD в строковом виде (PT100_385,PT100_391,CU100_428,CU100_426,NI100_617).
Аргумент idn задает тип датчика RTD в числовом виде, см. константы.

function restemperdet_tst:Integer;

Выполняет тестирование расчетного модуля RTD, возвращает число найденных ошибок.

Example:

   idn := Ord('K');                                          // choose thermocouple type K
   emf := getEMF;                                            // read electromotive force, mV
   tcj := getTCJ;                                            // read temperature of cold junction, °C
   t := thermocouple_ttc(emf+thermocouple_emf(tcj,idn),idn); // calculate temperature of thermocouple, °C
   
   idn := 385;                                               // choose RTD sensor Pt100 with alfa=0.00385
   ohm := getOHM;                                            // read RTD resistance, ohm
   t := restemperdet_ttc(ohm,idn);                           // calculate temperature of RTD, °C