OBSAH


Úvod

Tento návod popisuje, jak v prostředí Thinknx vytvořit spolehlivý výpočet rosného bodu. Řešení je rozděleno na dva kroky, aby se předešlo problémům s různými datovými typy z KNX sběrnice, konkrétně při použití senzoru vlhkosti s 1-bajtovým datovým typem (DPT 5.001).


Cíl: Vypočítat rosný bod z teploty (DPT 9) a vlhkosti (DPT 5 nebo DPT 9) a výsledek poslat na sběrnici.


POZNÁMKA Zdrojové kódy v tomto článku naleznete také jako přílohu. Dále jako přílohu naleznete celý logický blok, který můžete do Logického modulu importovat. Budete ale muset změnit skupinové adresy, aby to odpovídalo vašemu projektu.

Doporučený postup

  1. Převod vlhkosti: Vytvoření samostatného skriptu, který převede hodnotu vlhkosti z DPT 5 (1-Byte) na DPT 9 (2-Byte Float).
  2. Výpočet rosného bodu: Použití druhého skriptu, který již pracuje pouze s hodnotami ve formátu DPT 9.

Krok 1: Převod hodnoty vlhkosti z DPT 5 na DPT 9

Krok 1 není potřeba, pokud KNX senzor měřící vlhkost posílá naměřenou hodnotu rovnou ve formátu DPT 9 DPT 9 (2-Byte Float).


Tento skript zajistí, že hodnota vlhkosti bude vždy ve správném formátu pro další výpočty.

Kód pro převodník

Zkopírujte následující kód do nového skriptovacího bloku v Thinknx Logic Module.

using System;
using System.Collections.Generic;
using System.Text;

public class Class1
{
    /// <summary>
    /// Převede hodnotu z 1-Byte (DPT 5.001) na 2-Byte Float (DPT 9.xxx).
    /// </summary>
    /// <param name="dpt5Value">Objekt obsahující 1-bajtovou hodnotu (0-255).</param>
    /// <returns>Hodnota v procentech jako 2-Byte Float (0.0 - 100.0).</returns>
    public static object MainMethod(object dpt5Value)
    {
    	const double divider = 2.55; // Dělitel pro převod čísla na %

        try
        {
            // Převedeme vstupní 1-bajtovou hodnotu na číslo.
            double rawValue = Convert.ToDouble(dpt5Value);

            // Přepočítáme hodnotu ze škály 0-255 na procenta 0-100
            // podle standardu pro DPT 5.001.
            double percentageValue = rawValue / divider;

            // Vrátíme výsledek jako 2-Byte Float.
            return percentageValue;
        }
        catch (Exception)
        {
            // V případě chyby vrátíme bezpečnou hodnotu 0.0.
            return 0.0;
        }
    }
}

Postup v Thinknx

  1. Vytvořte v logickém modulu nový blok Scripting.
  2. Vložte do něj výše uvedený kód.
  3. Jako vstup (dpt5Value) připojte KNX Input s adresou vaší vlhkosti (DPT 5).
  4. Výstup ze skriptu připojte na KNX Output. Tento výstupní objekt musí být virtuální adresa s datovým typem DPT 9.xxx (např. temperature (°C) nebo Value 2-byte float).

Krok 2: Výpočet rosného bodu

Tento skript provede finální výpočet. Jako vstup používá teplotu a již převedenou hodnotu vlhkosti.

Kód pro výpočet rosného bodu

Zkopírujte následující kód do druhého skriptovacího bloku.

using System;
using System.Collections.Generic;
using System.Text;

public class Class1
{
    /// <summary>
    /// Vypočítá rosný bod pomocí Magnusovy rovnice ze dvou samostatných parametrů.
    /// Správně zpracovává vlhkost jako Float (DPT 9) i jako 1-Byte (DPT 5).
    /// </summary>
    /// <param name="temperatureParam">Objekt obsahující teplotu (°C).</param>
    /// <param name="humidityParam">Objekt obsahující relativní vlhkost (%). Může být Float nebo 1-Byte.</param>
    /// <returns>Rosný bod ve stupních Celsia (°C) nebo 0 v případě chyby.</returns>
    public static object MainMethod(object temperatureParam, object humidityParam)
    {
        // Konstanty pro Magnusovu rovnici (běžně používané pro teploty nad 0°C)
        const double b = 17.62;
        const double c = 243.12;
        
        const double divider = 100.0; // Dělitel v rovnici výpočtu rosného bodu

        try
        {
            // Převedeme teplotu, ta je vždy float.
            double temperature = Convert.ToDouble(temperatureParam);
            double humidity = Convert.ToDouble(humidityParam);

            // Výpočet pomocné proměnné gamma podle vzorce.
            // Math.Log je přirozený logaritmus (ln).
            double gamma = Math.Log(humidity / divider) + (b * temperature) / (c + temperature);

            // Finální výpočet rosného bodu.
            double dewPoint = (c * gamma) / (b - gamma);

            // Vrátíme vypočtenou hodnotu.
            return dewPoint;
        }
        catch (Exception)
        {
            // Pokud dojde k chybě (např. špatný formát vstupních dat),
            // vrátíme bezpečnou hodnotu 0, aby nedošlo k selhání skriptu v Thinknx.
            return 0;
        }
    }
}

Postup v Thinknx

  1. Vytvořte druhý blok Scripting.
  2. Vložte do něj kód pro výpočet rosného bodu.
  3. Skript má dva vstupy:
    • temperatureParam: Připojte KNX Input s adresou vaší teploty (DPT 9).
    • humidityParam: Připojte KNX Input s adresou virtuálního objektu (DPT 9), který jste vytvořili v kroku 1, nebo KNX Input s adresou vaší vlhkosti (DPT 9).
  4. Výstup ze skriptu připojte na finální KNX Output s adresou, kde chcete zobrazovat hodnotu rosného bodu (DPT 9).

Celkové zapojení v Thinknx Logic Module

Výsledné schéma bude vypadat následovně. Tento modulární přístup zajišťuje maximální spolehlivost a snadnou diagnostiku.

  1. Vlhkost (DPT 5) jde do prvního skriptu (Převodník).
  2. Výstup z převodníku (nyní DPT 9) jde jako vstup do druhého skriptu (Výpočet rosného bodu).
  3. Teplota (DPT 9) jde také jako vstup do druhého skriptu.
  4. Výstup z výpočtu je finální hodnota rosného bodu (DPT 9), která se posílá na sběrnici.

Ukázka propojení bloků v Logickém modulu