Поиск

И вновь продолжается… метрология!


Работы по зеркалу как-то уж очень форсировали. Неожиданно оказалось, что завтра мне нужно ехать и отрывать старые датчики от зеркала №1 (и отрывать аккуратно, т.к. их нужно будет использовать на зеркале №2). Возможно, уже в понедельник будет произведена «рокировка» зеркал.
Я тем временем решил-таки сравнить показания тех термодатчиков, что у меня оставались, чтобы хотя бы по одной точке привести их к единой шкале.

Для начала просто замотал пучок из 28 датчиков тряпкой, поверх обмотал фольгой и снова тряпкой.

Паутина…

Однако, такой метод не позволяет зафиксировать температуру: она постоянно плывет (в последней — самой длинной — серии за 3000 с лишним секунд температура поднялась аж на 0.12°C!). В результате данные получаются не очень…
Нужно будет прикупить побольше фольги и сделать более приличную теплоизоляцию. А по-хорошему, конечно, нужно бы еще и внутри термостат соорудить…
Для того, чтобы логгировать данные, пришлось написать небольшую утилиту (заодно еще раз воспользовался своей библиотечкой сниппетов). Она просто сохраняет в текстовый файл время начала измерений и измеренные величины. Дальше этот файл считывается:

function rdfile(infile, graph) XX=dlmread(infile, '', 1, 0); time = XX(:,1) - XX(1,1); XX(:, 1)=[]; medval = median(XX,2); Tcorr = XX - medval; plot(time, Tcorr); legend("0-10","0-11","0-20","0-21","0-30","0-31","0-40","0-41","0-50","0-51","0-60","0-61","0-70","0-71", ... "1-10","1-11","1-20","1-21","1-30","1-31","1-40","1-41","1-50","1-51","1-60","1-61","1-70","1-71"); xlabel("time, s"); ylabel("T, {}^\\circ{}C"); plotgr(sprintf("%s_corrected", graph)); Corrections = median(Tcorr); printf("Correction values:\n"); for x = 1:size(Corrections,2) if(x != 1) printf(", "); endif; printf("%g", Corrections(x)); endfor printf("\n"); plot(time, Tcorr - Corrections); legend("0-10","0-11","0-20","0-21","0-30","0-31","0-40","0-41","0-50","0-51","0-60","0-61","0-70","0-71", ... "1-10","1-11","1-20","1-21","1-30","1-31","1-40","1-41","1-50","1-51","1-60","1-61","1-70","1-71"); xlabel("time, s"); ylabel("T, {}^\\circ{}C"); plotgr(sprintf("%s_zeroed", graph));
endfunction


а этот скрипт строит графики:

function plotgr(nm) h = gcf(); TL = get(gca, 'ticklength'); set(gca, 'ticklength', TL*1.5); set(gca, 'linewidth', 3); H = 8; W = 12; lg = findobj(h, "type","axes", "Tag","legend"); set(lg, "FontSize", 16); set(gca, 'fontsize', 16); set(get(gca(), "xlabel"), 'fontsize', 16); set(get(gca(), "ylabel"), 'fontsize', 16); set(h,'PaperUnits','inches') set(h,'PaperOrientation','landscape'); set(h,'PaperSize',[W,H]); set(h,'PaperPosition',[0,0,W,H]); print(h, '-dpdf', sprintf("%s.pdf", nm)); print(h, '-dpng', sprintf("%s.png", nm));
endfunction


Вот такой кошмар получается:

Даже на короткой серии видно, как ползут температуры.

Невязки после приведения к общему нулю.

Более длинная серия, здесь вообще вначале черт знает что творится…

И невязки длинной серии.

Всего сделал четыре серии измерений. В каждой серии для каждого момента времени вычислялась медианная температура, которая вычиталась из показаний (это первый и третий графики). Далее вычислялись медианы для каждого термодатчика — это как бы и есть их «нуль-пункты», которые нужно вычитать из результатов измерения, чтобы получить правильные данные.
То, что в результате таких неправильных измерений, которые заставили бы плакать любого метролога, ничего не получилось, можно судить по RMS полученных данных:
0.03, 0.02, 0.01, 0.01, 0.02, 0.02, 0.02, 0.01, 0.00, 0.01, 0.03, 0.01, 0.01, 0.01, 0.01, 0.01, 0.02, 0.02, 0.02, 0.01, 0.02, 0.03, 0.01, 0.01, 0.02, 0.02, 0.01, 0.02 (а хотелось бы меньше единицы в третьем знаке!).
А вот — сами нуль-пункты:
0.08, -0.03, -0.10, -0.03, -0.05, 0.01, -0.03, -0.08, 0.03, -0.01, 0.10, 0.03, 0.08, 0.06, -0.01, 0.04, 0.07, 0.04, -0.01, -0.03, 0.04, -0.03, 0.02, -0.04, -0.01, 0.00, 0.03, -0.02.
Если под «точность 0.1°C» понимать ±0.1°C, то все датчики честно это условие выполняют (правда, только на одной точке — замерить хотя бы в двух-трех точках я не смогу — полноценного термостата нет). В принципе, будь датчиков сотни три, из них вполне бы можно было отобрать 80-100 штук, имеющих расхождение меньше ±0.05°C и не париться с вводом калибровочных параметров в систему сбора.
Но все же нужно попробовать провести измерения с лучшей теплоизоляцией. Как вариант, можно расположиться с ноутбуком в пяте БТА, где температура в течение года меняется не больше, чем на ±2°C. Заодно и температура там ниже (в кабинете у меня 23°C, зеркало до такой температуры никогда не нагревалось, максимум был около 18°C).
eddy_em.livejournal.com

Добавить комментарий