NTC 10K b3950 в модуле WB-MAI6

Продолжая обсуждение из темы 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 провода?

Добрый день!

Прошу прощения за долгий ответ! Не заметили сообщения. Попрошу коллегу ответить завтра.

Добрый день!

Перепроверил схему и я допустил ошибку — третий кабель не нужен, должно работать без него.

Подключение следует выполнять в соответствии с данным разделом. Необходимо получить данные в виде измерения сопротивления, которые затем будут обработаны и преобразованы скриптом.

Тогда почему на скриншоте трёхпроводная схема подключения?

В зависимости от электрических параметров (рассчётных) может быть как двухпроводная, так и трёхпроводная схема.

С точки зрения алгоритма обработки показаний - это неважно.

Трёхпроводная:

Двухпроводная:

(Документация)

Подскажите, удалось решить вопрос?