Продолжая обсуждение из темы NTC 10K b3950:
Год назад был прогноз доработки “через месяц”. До сих пор изменений нет.
Продолжая обсуждение из темы NTC 10K b3950:
Год назад был прогноз доработки “через месяц”. До сих пор изменений нет.
Добрый день!
Прогноз не сбылся, к сожалению - задачу отложили. Передам ваш запрос разработчикам.
Сейчас эту задачу можно решить с помощью wb-rules (как в приведённой вами теме). Правда, не могу найти готовых скриптов в сообществе.
Если сделаете или найдёте такой скрипт, будем рады добавить в репозиторий. Я также постараюсь вас уведомить, если кто-то из пользователей или коллег его реализует.
Мы с коллегами заинтересовались, стали готовить скрипт на wb-rules.
Думаю в течение недели сделаем (неточный прогноз). По результату отпишемся.
Добрый день!
Прошу проверить работу скрипта.
Модуль настроен следующим образом:
// Таблица соответствия температуры и сопротивления (в кОм) для NTC 10K b3950
var resistanceTable = [
{ temp: -40, resistance: 277.2 },
{ temp: -39, resistance: 263.6 },
{ temp: -38, resistance: 250.1 },
{ temp: -37, resistance: 236.8 },
{ temp: -36, resistance: 224.0 },
{ temp: -35, resistance: 211.5 },
{ temp: -34, resistance: 199.6 },
{ temp: -33, resistance: 188.1 },
{ temp: -32, resistance: 177.3 },
{ temp: -31, resistance: 167.0 },
{ temp: -30, resistance: 157.2 },
{ temp: -29, resistance: 148.1 },
{ temp: -28, resistance: 139.4 },
{ temp: -27, resistance: 131.3 },
{ temp: -26, resistance: 123.7 },
{ temp: -25, resistance: 116.6 },
{ temp: -24, resistance: 110.0 },
{ temp: -23, resistance: 103.7 },
{ temp: -22, resistance: 97.9 },
{ temp: -21, resistance: 92.50 },
{ temp: -20, resistance: 87.43 },
{ temp: -19, resistance: 82.79 },
{ temp: -18, resistance: 78.44 },
{ temp: -17, resistance: 74.36 },
{ temp: -16, resistance: 70.53 },
{ temp: -15, resistance: 66.92 },
{ temp: -14, resistance: 63.54 },
{ temp: -13, resistance: 60.34 },
{ temp: -12, resistance: 57.33 },
{ temp: -11, resistance: 54.50 },
{ temp: -10, resistance: 51.82 },
{ temp: -9, resistance: 49.28 },
{ temp: -8, resistance: 46.89 },
{ temp: -7, resistance: 44.62 },
{ temp: -6, resistance: 42.48 },
{ temp: -5, resistance: 40.45 },
{ temp: -4, resistance: 38.53 },
{ temp: -3, resistance: 36.70 },
{ temp: -2, resistance: 34.97 },
{ temp: -1, resistance: 33.33 },
{ temp: 0, resistance: 31.77 },
{ temp: 1, resistance: 30.25 },
{ temp: 2, resistance: 28.82 },
{ temp: 3, resistance: 27.45 },
{ temp: 4, resistance: 26.16 },
{ temp: 5, resistance: 24.94 },
{ temp: 6, resistance: 23.77 },
{ temp: 7, resistance: 22.67 },
{ temp: 8, resistance: 21.62 },
{ temp: 9, resistance: 20.63 },
{ temp: 10, resistance: 19.68 },
{ temp: 11, resistance: 18.78 },
{ temp: 12, resistance: 17.93 },
{ temp: 13, resistance: 17.12 },
{ temp: 14, resistance: 16.35 },
{ temp: 15, resistance: 15.62 },
{ temp: 16, resistance: 14.93 },
{ temp: 17, resistance: 14.26 },
{ temp: 18, resistance: 13.63 },
{ temp: 19, resistance: 13.04 },
{ temp: 20, resistance: 12.47 },
{ temp: 21, resistance: 11.92 },
{ temp: 22, resistance: 11.41 },
{ temp: 23, resistance: 10.91 },
{ temp: 24, resistance: 10.45 },
{ temp: 25, resistance: 10.00 },
{ temp: 26, resistance: 9.575 },
{ temp: 27, resistance: 9.170 },
{ temp: 28, resistance: 8.784 },
{ temp: 29, resistance: 8.416 },
{ temp: 30, resistance: 8.064 },
{ temp: 31, resistance: 7.730 },
{ temp: 32, resistance: 7.410 },
{ temp: 33, resistance: 7.106 },
{ temp: 34, resistance: 6.815 },
{ temp: 35, resistance: 6.538 },
{ temp: 36, resistance: 6.273 },
{ temp: 37, resistance: 6.020 },
{ temp: 38, resistance: 5.778 },
{ temp: 39, resistance: 5.548 },
{ temp: 40, resistance: 5.327 },
{ temp: 41, resistance: 5.117 },
{ temp: 42, resistance: 4.915 },
{ temp: 43, resistance: 4.723 },
{ temp: 44, resistance: 4.539 },
{ temp: 45, resistance: 4.363 },
{ temp: 46, resistance: 4.195 },
{ temp: 47, resistance: 4.034 },
{ temp: 48, resistance: 3.880 },
{ temp: 49, resistance: 3.733 },
{ temp: 50, resistance: 3.592 },
{ temp: 100, resistance: 0.6744 }
];
// Функция интерполяции линейного значения
function interpolate(resistance) {
for (var i = 0; i < resistanceTable.length - 1; i++) {
var point1 = resistanceTable[i];
var point2 = resistanceTable[i + 1];
if (resistance <= point1.resistance && resistance >= point2.resistance) {
// Линейная интерполяция
var tempDiff = point2.temp - point1.temp;
var resDiff = point1.resistance - point2.resistance;
var temp = point1.temp + (point1.resistance - resistance) * tempDiff / resDiff;
return temp;
}
}
// Если сопротивление вне таблицы
return null;
}
// Виртуальное устройство для отображения температуры
defineVirtualDevice("temperature_sensor", {
title: "Temperature Sensor",
cells: {
Temperature: {
type: "text",
value: "N/A", // Температура по расчету
},
},
});
// Правило для обработки изменений сопротивления на входе wb-mai6_56/IN 6 Resistance
defineRule("read_resistance_and_calculate_temperature", {
whenChanged: "wb-mai6_56/IN 6 Resistance",
then: function (newValue) {
// Переводим значение в кОм (если приходит в Омах)
var resistance = newValue / 1000; // Преобразование в кОм
var temp = interpolate(resistance);
if (temp !== null) {
dev["temperature_sensor"]["Temperature"] = temp.toFixed(2) + " °C";
} else {
dev["temperature_sensor"]["Temperature"] = "Out of range";
}
},
});
Добрый день, удалось ли проверить скрипт?
Пока не проверял. Был в отъезде. Сейчас хотел проверить, но сразу есть вопрос: почему трёхпроводная схема, когда у датчика NTC всего 2 провода?
Добрый день!
Прошу прощения за долгий ответ! Не заметили сообщения. Попрошу коллегу ответить завтра.
Добрый день!
Перепроверил схему и я допустил ошибку — третий кабель не нужен, должно работать без него.
Подключение следует выполнять в соответствии с данным разделом. Необходимо получить данные в виде измерения сопротивления, которые затем будут обработаны и преобразованы скриптом.
Тогда почему на скриншоте трёхпроводная схема подключения?
В зависимости от электрических параметров (рассчётных) может быть как двухпроводная, так и трёхпроводная схема.
С точки зрения алгоритма обработки показаний - это неважно.
Трёхпроводная:
Двухпроводная:
Подскажите, удалось решить вопрос?