From 3c1bdca8f8c8f4647cee883babd1df60d8cb8889 Mon Sep 17 00:00:00 2001 From: zcwBit Date: Wed, 18 Jun 2025 21:08:28 +0800 Subject: [PATCH] =?UTF-8?q?0618=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- protocol/TCP/TemToMv.py | 598 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 598 insertions(+) create mode 100644 protocol/TCP/TemToMv.py diff --git a/protocol/TCP/TemToMv.py b/protocol/TCP/TemToMv.py new file mode 100644 index 0000000..c5ad029 --- /dev/null +++ b/protocol/TCP/TemToMv.py @@ -0,0 +1,598 @@ +import math + +def pt100(t): + """ + PT100, 温度到电阻转换公式 + + 从0℃~850℃: + Rt=R0(1+A*t+B*t^2) + + 从-200℃~0℃: + Rt=R0[1+A*t+Bt^2+C(t-100)*t^3] + 式中: + Rt----温度为t时的铂电阻的阻值 + R0----温度为0时的铂电阻的阻值,即100Ω + + A=3.9083*10^(-3)℃^(-1) + B=-5.775*10^(-7) ℃^(-2) + C=-4.183*10^(-12) ℃^(-4) + + """ + A = 3.9083 * (10 ** -3) + B = -5.775 * (10 ** -7) + C = -4.183 * (10 ** -12) + R0 = 100 + if 0 <= t <= 850: + Rt = R0 * (1 + A * t + B * t * t) + return Rt + elif -200 <= t < 0: + Rt = R0 * (1 + A * t + B * t * t + C * (t - 100) * t ** 3) + return Rt + else: + raise ValueError("温度超范围 -200 ~ 800 度") + + +def TC_T(t): + ''' + https://max.book118.com/html/2018/0907/8061021016001123.shtm + RTD_T 热电偶 温度转电动势 计算函数 + 输入 : t (摄氏度) + 输出 : e (毫伏) + ''' + if -270 <= t <= 0: + a0 = 0.000_000_000_0 * 10 ** 0 + a1 = 3.874_810_636_4 * 10 ** 1 + a2 = 4.419_443_434_7 * 10 ** -2 + a3 = 1.184_432_310_5 * 10 ** -4 + a4 = 2.003_297_355_4 * 10 ** -5 + a5 = 9.013_801_955_9 * 10 ** -7 + a6 = 2.265_115_420_5 * 10 ** -8 + a7 = 3.607_115_659_3 * 10 ** -10 + a8 = 3.849_393_988_3 * 10 ** -12 + a9 = 2.821_352_192_5 * 10 ** -14 + a10 = 1.425_159_477_9 * 10 ** -16 + a11 = 4.876_866_228_6 * 10 ** -19 + a12 = 1.079_553_927_0 * 10 ** -21 + a13 = 1.394_502_706_2 * 10 ** -24 + a14 = 7.979_515_392_7 * 10 ** -28 + result = sum([ + 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, + a10 * t ** 10, + a11 * t ** 11, + a12 * t ** 12, + a13 * t ** 13, + a14 * t ** 14, + ]) / 1000 + elif 0 < t <= 400: + a0 = 0.000_000_000_0 * 10 ** 0 + a1 = 3.874_810_636_4 * 10 ** 1 + a2 = 3.329_222_788_0 * 10 ** -2 + a3 = 2.061_824_340_4 * 10 ** -4 + a4 = -2.188_225_684_6 * 10 ** -6 + a5 = 1.099_688_092_8 * 10 ** -8 + a6 = -3.081_575_877_2 * 10 ** -11 + a7 = 4.547_913_529_0 * 10 ** -14 + a8 = -2.751_290_167_3 * 10 ** -17 + result = sum([ + 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, + ]) / 1000 + return result + + +def TC_E(t): + '''TC/E 热电偶 温度转电动势 计算函数 + 输入 : t (摄氏度) + 输出 : e (毫伏) + ''' + if -270 <= t <= 0: + a0 = 0.000_000_000_0 * 10 ** 0 + a1 = 5.866_550_870_8 * 10 ** 1 + a2 = 4.541_097_712_4 * 10 ** -2 + a3 = -7.799_804_868_6 * 10 ** -4 + a4 = -2.580_016_084_3 * 10 ** -5 + a5 = -5.945_258_305_7 * 10 ** -7 + a6 = -9.321_405_866_7 * 10 ** -9 + a7 = -1.028_760_553_4 * 10 ** -10 + a8 = -8.037_012_362_1 * 10 ** -13 + a9 = -4.397_949_739_1 * 10 ** -15 + a10 = -1.641_477_635_5 * 10 ** -17 + a11 = -3.967_361_951_6 * 10 ** -20 + a12 = -5.582_732_872_1 * 10 ** -23 + a13 = -3.465_784_201_3 * 10 ** -26 + return sum([ + 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, + a10 * t ** 10, + a11 * t ** 11, + a12 * t ** 12, + a13 * t ** 13, + ]) / 1000 + elif 0 < t <= 100: + a0 = 0.000_000_000_0 * 10 ** 0 + a1 = 5.866_550_871_0 * 10 ** 1 + a2 = 4.503_227_558_2 * 10 ** -2 + a3 = 2.890_840_721_2 * 10 ** -5 + a4 = -3.305_689_665_2 * 10 ** -7 + a5 = 6.502_440_327_0 * 10 ** -10 + a6 = -1.919_749_550_4 * 10 ** -13 + a7 = -1.253_660_049_7 * 10 ** -15 + a8 = 2.148_921_756_9 * 10 ** -18 + a9 = -1.438_804_178_2 * 10 ** -21 + a10 = 3.596_089_948_1 * 10 ** -25 + return sum([ + 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, + a10 * t ** 10, + ]) / 1000 + + +def TC_S(t): + '''TC/S 热电偶 温度转电动势 计算函数 + 输入 : t (摄氏度) + 输出 : e (毫伏) + ''' + if -50 <= t <= 1064.18: + a0 = 0.00000000000 * 10 ** 0 + a1 = 5.40313308631 * 10 ** 0 + a2 = 1.25934289740 * 10 ** -2 + a3 = -2.32477968689 * 10 ** -5 + a4 = 3.22028823036 * 10 ** -8 + a5 = -3.31465196389 * 10 ** -11 + a6 = 2.55744251786 * 10 ** -14 + a7 = -1.25068871393 * 10 ** -17 + a8 = 2.71443176145 * 10 ** -21 + return sum([ + 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, + ]) / 1000 + elif 1064.18 < t <= 1664.5: + a0 = 1.32900444085 * 10 ** 3 + a1 = 3.34509311344 * 10 ** 0 + a2 = 6.54805192818 * 10 ** -3 + a3 = -1.64856259209 * 10 ** -6 + a4 = 1.29989605174 * 10 ** -11 + return sum([ + a0 * t ** 0, + a1 * t ** 1, + a2 * t ** 2, + a3 * t ** 3, + a4 * t ** 4, + ]) / 1000 + elif 1664.5 < t <= 1768.1: + a0 = 1.46628232636 * 10 ** 5 + a1 = -2.58430516752 * 10 ** 2 + a2 = 1.63693574641 * 10 ** -1 + a3 = -3.30439046987 * 10 ** -5 + a4 = -9.43223690612 * 10 ** -12 + return sum([ + a0 * t ** 0, + a1 * t ** 1, + a2 * t ** 2, + a3 * t ** 3, + a4 * t ** 4, + ]) / 1000 + + +def TC_R(t): + '''TC/R 热电偶 温度转电动势 计算函数 + 输入 : t (摄氏度) + 输出 : e (毫伏) + ''' + if -50 <= t <= 1064.18: + a0 = 0.00000000000 * 10 ** 0 + a1 = 5.28961729765 * 10 ** 0 + a2 = 1.39166589782 * 10 ** -2 + a3 = -2.38855693017 * 10 ** -5 + a4 = 3.56916001063 * 10 ** -8 + a5 = -4.62347666298 * 10 ** -11 + a6 = 5.00777441034 * 10 ** -14 + a7 = -3.73105886191 * 10 ** -17 + a8 = 1.57716482367 * 10 ** -20 + a9 = -2.81038625251 * 10 ** -24 + return sum([ + 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, + ]) / 1000 + elif 1064.18 < t <= 1664.5: + a0 = 2.95157925316 * 10 ** 3 + a1 = -2.52061251332 * 10 ** 0 + a2 = 1.59564501865 * 10 ** -2 + a3 = -7.64085947576 * 10 ** -6 + a4 = 2.05305291024 * 10 ** -9 + a5 = -2.93359668173 * 10 ** -13 + return sum([ + a0 * t ** 0, + a1 * t ** 1, + a2 * t ** 2, + a3 * t ** 3, + a4 * t ** 4, + a5 * t ** 5, + ]) / 1000 + elif 1664.5 < t <= 1768.1: + a0 = 1.52232118209 * 10 ** 5 + a1 = -2.68819888545 * 10 ** 2 + a2 = 1.71280280471 * 10 ** -1 + a3 = -3.45895706453 * 10 ** -5 + a4 = -9.34633971046 * 10 ** -12 + return sum([ + a0 * t ** 0, + a1 * t ** 1, + a2 * t ** 2, + a3 * t ** 3, + a4 * t ** 4, + ]) / 1000 + + +def TC_B(t): + '''TC/B 热电偶 温度转电动势 计算函数 + 输入 : t (摄氏度) + 输出 : e (毫伏) + ''' + if 0 <= t <= 630.615: + a0 = 0.00000000000 * 10 ** 0 + a1 = -2.4650818346 * 10 ** -1 + a2 = 5.9040421171 * 10 ** -3 + a3 = -1.3257931636 * 10 ** -6 + a4 = 1.5668291901 * 10 ** -9 + a5 = -1.6944529240 * 10 ** -12 + a6 = 6.2990347094 * 10 ** -16 + return sum([ + a0 * t ** 0, + a1 * t ** 1, + a2 * t ** 2, + a3 * t ** 3, + a4 * t ** 4, + a5 * t ** 5, + a6 * t ** 6, + ]) / 1000 + elif 630.615 < t <= 1820: + a0 = -3.8938168621 * 10 ** 3 + a1 = 2.8571747470 * 10 ** 1 + a2 = -8.4885104785 * 10 ** -2 + a3 = 1.5785280164 * 10 ** -4 + a4 = -1.6835344864 * 10 ** -7 + a5 = 1.1109794013 * 10 ** -10 + a6 = -4.4515431033 * 10 ** -14 + a7 = 9.8975640821 * 10 ** -18 + a8 = -9.3791330289 * 10 ** -22 + return sum([ + 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, + ]) / 1000 + + +def TC_J(t): + '''TC/J 热电偶 温度转电动势 计算函数 + 输入 : t (摄氏度) + 输出 : e (毫伏) + ''' + if -210 <= t <= 760: + a0 = 0.00000000000 * 10 ** 0 + a1 = 5.0381187815 * 10 ** 1 + a2 = 3.0475836930 * 10 ** -2 + a3 = -8.5681065720 * 10 ** -5 + a4 = 1.3228195295 * 10 ** -7 + a5 = -1.7052958337 * 10 ** -10 + a6 = 2.0948090697 * 10 ** -13 + a7 = -1.2538395336 * 10 ** -16 + a8 = 1.5631725697 * 10 ** -20 + return sum([ + 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, + ]) / 1000 + elif 760 < t <= 1200: + a0 = 2.9645625681 * 10 ** 5 + a1 = -1.4976127786 * 10 ** 3 + a2 = 3.1787103924 * 10 ** 0 + a3 = -3.1847686701 * 10 ** -3 + a4 = 1.5720819004 * 10 ** -6 + a5 = -3.0691369056 * 10 ** -10 + return sum([ + a0 * t ** 0, + a1 * t ** 1, + a2 * t ** 2, + a3 * t ** 3, + a4 * t ** 4, + a5 * t ** 5, + ]) / 1000 + +def TC_N(t): + '''TC/N 热电偶 温度转电动势 计算函数 + 输入 : t (摄氏度) + 输出 : e (毫伏) + ''' + if -270 <= t <= 0: + a0 = 0.00000000000 * 10 ** 0 + a1 = 2.6159105962 * 10 ** 1 + a2 = 1.0957484228 * 10 ** -2 + a3 = -9.3841111554 * 10 ** -5 + a4 = -4.6412039759 * 10 ** -8 + a5 = -2.6303357716 * 10 ** -9 + a6 = -2.2653438003 * 10 ** -11 + a7 = -7.6089300791 * 10 ** -14 + a8 = -9.3419667835 * 10 ** -17 + return sum([ + 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, + ]) / 1000 + elif 0 < t <= 1300: + a0 = 0.00000000000 * 10 ** 0 + a1 = 2.5929394601 * 10 ** 1 + a2 = 1.5710141880 * 10 ** -2 + a3 = 4.3825627237 * 10 ** -5 + a4 = -2.5261169794 * 10 ** -7 + a5 = 6.4311819339 * 10 ** -10 + a6 = -1.0063471519 * 10 ** -12 + a7 = 9.9745338992 * 10 ** -16 + a8 = -6.0863245607 * 10 ** -19 + a9 = 2.0849229339 * 10 ** -22 + a10 = -3.0682196151 * 10 ** -26 + return sum([ + 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, + a10 * t ** 10, + ]) / 1000 + +def TC_C(t): + '''TC/c 热电偶 温度转电动势 计算函数 + 输入 : t (摄氏度) + 输出 : e (毫伏) + ''' + if 0 <= t <= 630: + a0 = 0.00000000000 * 10 ** 0 + a1 = 1.3406032 * 10 ** 1 + a2 = 1.1924992 * 10 ** -2 + a3 = -7.9806354 * 10 ** -6 + a4 = -5.0787515 * 10 ** -9 + a5 = 1.3164197 * 10 ** -11 + a6 = -7.9197332 * 10 ** -15 + return sum([ + a0 * t ** 0, + a1 * t ** 1, + a2 * t ** 2, + a3 * t ** 3, + a4 * t ** 4, + a5 * t ** 5, + a6 * t ** 6, + ]) / 1000 + elif 630 < t <= 2315: + a0 = 4.0528823 * 10 ** 2 + a1 = 1.1509355 * 10 ** 1 + a2 = 1.5696453 * 10 ** -2 + a3 = -1.3704412 * 10 ** -5 + a4 = 5.2290873 * 10 ** -9 + a5 = -9.2082758 * 10 ** -13 + a6 = 4.5245112 * 10 ** -17 + return sum([ + a0 * t ** 0, + a1 * t ** 1, + a2 * t ** 2, + a3 * t ** 3, + a4 * t ** 4, + a5 * t ** 5, + a6 * t ** 6, + ]) / 1000 + +def TC_A(t): + '''TC/A 热电偶 温度转电动势 计算函数 + 输入 : t (摄氏度) + 输出 : e (毫伏) + ''' + if 0 <= t <= 2500: + a0 = 0.00000000000 * 10 ** 0 + a1 = 1.1951905 * 10 ** 1 + a2 = 1.6672625 * 10 ** -2 + a3 = -2.8287807 * 10 ** -5 + a4 = 2.8397839 * 10 ** -8 + a5 = -1.8505007 * 10 ** -11 + a6 = 7.3632123 * 10 ** -15 + a7 = -1.6148878 * 10 ** -18 + a8 = 1.4901679 * 10 ** -22 + return sum([ + 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, + ]) / 1000 + +def TC_K(t): + '''TC/T 热电偶 温度转电动势 计算函数 + 输入 : t (摄氏度) + 输出 : e (毫伏) + ''' + if -270 <= t <= 0: + a0 = 0.000_000_000_0 * 10 ** 0 + a1 = 3.945_012_802_5 * 10 ** 1 + a2 = 2.362_237_359_8 * 10 ** -2 + a3 = -3.285_890_678_4 * 10 ** -4 + a4 = -4.990_482_877_7 * 10 ** -6 + a5 = -6.750_905_917_3 * 10 ** -8 + a6 = -5.741_032_742_8 * 10 ** -10 + a7 = -3.108_887_289_4 * 10 ** -12 + a8 = -1.045_160_936_5 * 10 ** -14 + a9 = -1.988_926_687_8 * 10 ** -17 + a10 = -1.632_269_748_6 * 10 ** -20 + return sum([ + 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, + a10 * t ** 10, + ]) / 1000 + elif 0 < t <= 1300: + a0 = -1.760_041_368_6 * 10 ** 1 + a1 = 3.892_120_497_5 * 10 ** 1 + a2 = 1.855_877_003_2 * 10 ** -2 + a3 = -9.945_759_287_4 * 10 ** -5 + a4 = 3.184_094_571_9 * 10 ** -7 + a5 = -5.607_284_488_9 * 10 ** -10 + a6 = 5.607_505_905_9 * 10 ** -13 + a7 = -3.202_072_000_3 * 10 ** -16 + a8 = 9.715_114_715_2 * 10 ** -20 + a9 = -1.210_472_127_5 * 10 ** -23 + c0 = 1.185_976 * 10 ** 2 + c1 = -1.183_432 * 10 ** -4 + # return (sum([ + # a0 * t ** 0 + c0 * math.exp(c1 * (t - 126.968_6) ** 2), + # a1 * t ** 1 + c0 * math.exp(c1 * (t - 126.968_6) ** 2), + # a2 * t ** 2 + c0 * math.exp(c1 * (t - 126.968_6) ** 2), + # a3 * t ** 3 + c0 * math.exp(c1 * (t - 126.968_6) ** 2), + # a4 * t ** 4 + c0 * math.exp(c1 * (t - 126.968_6) ** 2), + # a5 * t ** 5 + c0 * math.exp(c1 * (t - 126.968_6) ** 2), + # a6 * t ** 6 + c0 * math.exp(c1 * (t - 126.968_6) ** 2), + # a7 * t ** 7 + c0 * math.exp(c1 * (t - 126.968_6) ** 2), + # a8 * t ** 8 + c0 * math.exp(c1 * (t - 126.968_6) ** 2), + # a9 * t ** 9 + c0 * math.exp(c1 * (t - 126.968_6) ** 2), + # ]) + a0) / 1000 + result = (((((((((a9 * t + a8) * t + a7) * t + a6) * t + a5) * t + a4) * t + a3) * t + a2) * t + a1) * t + a0) / 1000 + if 0 < t <= 19: + result += 0.02 + elif 21 <= t <= 39 : + result += 0.04 + elif 40 <= t <= 49 : + result += 0.05 + elif 50 <= t <= 69 : + result += 0.06 + elif 70 <= t <= 79 : + result += 0.07 + elif 80 <= t <= 89 : + result += 0.08 + elif 90 <= t <= 99 : + result += 0.09 + elif 100 <= t <= 119 : + result += 0.1 + elif 120 <= t <= 149 : + result += 0.11 + elif 150 <= t <= 169 : + result += 0.12 + elif 170 <= t <= 179 : + result += 0.11 + elif 180 <= t <= 189 : + result += 0.1 + elif 190 <= t <= 199 : + result += 0.08 + elif 200 <= t <= 209 : + result += 0.07 + elif 210 <= t <= 219 : + result += 0.06 + elif 220 <= t <= 229 : + result += 0.05 + elif 230 <= t <= 239 : + result += 0.03 + elif 240 <= t <= 269 : + result += 0.02 + elif 270 <= t <= 299 : + result += 0.01 + return result + +def temToMv(varType, temValue): + if varType == 'T': + return TC_T(temValue) + elif varType == 'E': + return TC_E(temValue) + elif varType == 'S': + return TC_S(temValue) + elif varType == 'R': + return TC_R(temValue) + elif varType == 'K': + return TC_K(temValue) + elif varType == 'J': + return TC_J(temValue) + elif varType == 'N': + return TC_N(temValue) + elif varType == 'C': + return TC_C(temValue) + elif varType == 'A': + return TC_A(temValue) + elif varType == 'B': + return TC_B(temValue) + elif varType == 'PT100': + return pt100(temValue)