Skip to content

Dokumentace: TDS

papouch.com edited this page Jan 8, 2019 · 17 revisions

Funkce jsou určeny pro displeje TDS57-4, TDS57-6, TDS101-4 a TDS101-6 od papouch.com.

Hlavní části této stránky:

Může se hodit:

Základní příklad použití

Nejjednodušší příklad pro 6-místný displej. C# WPF aplikace s TextBoxem a tlačítkem Zobrazit.

using Papouch.Communication;
using Papouch.Spinel.Spinel97;
using Papouch.Spinel.Spinel97.Device.Tds;
using System;
using System.Windows;

namespace TestApp
{
    public partial class MainWindow : Window
    {
        private ICommunicationInterface ci;
        public Tds MyDevice;

        public MainWindow()
        {
            InitializeComponent();

            // Příklad pro TDS ("sériový port" RS485):
            ci = new CiSerialPort();
            ci.ConfigString = "provider=SERIAL_PORT;PortName=COM4;BaudRate=9600;";

            // Příklad pro TDS na adrese 192.168.1.124 s datovým portem 10001:
            // Upozornění: TDS musí být v režimu TCP server!
            //ci = new CiTcpClient();
            //ci.ConfigString = "provider=TCP_CLIENT;Host=192.168.1.124;Port=10001;";

            if (!ci.Open(true))
            {
                MessageBox.Show("Spojení se nepodařilo otevřít!");
                Application.Current.Shutdown();
            }

            // 0x31 je výchozí adresa z výroby
            // 0xFE je univerzální adresa pokud je na lince jen jedno zařízení
            MyDevice = new Tds(ci, 0xFE);
            if (MyDevice == null)
            {
                MessageBox.Show("Zařízení se nepovedlo inicializovat!");
                Application.Current.Shutdown();
            }
        }

        private void Show_Click(object sender, RoutedEventArgs e)
        {

            if (MyDevice.CmdSetDataAscii(TxtDisplay.Text))
                Console.WriteLine("ok");
            else
                Console.WriteLine("error");

        }
    }
}

...a definice jednoduchého rozhraní ve WPF:

<Window x:Class="TestApp.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:QuidoApp"
        mc:Ignorable="d"
        Title="TestApp" Height="152" Width="400" ResizeMode="NoResize">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="2*" />
            <ColumnDefinition Width="1*" />
        </Grid.ColumnDefinitions>
        <TextBox x:Name="TxtDisplay" Text="12:34.56" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="12" TextWrapping="Wrap" Width="100px" />
        <Button Grid.Column="1" Content="Zobrazit" Margin="20" Click="Show_Click"/>
    </Grid>
</Window>

Funkce

CmdGetHwInfo() - zjištění typu hardwaru

Zjistí počet segmentovek, vstupů a teplotních senzorů, osazených na displeji.

Deklarace:

public bool CmdGetHwInfo(out int SegCount, out int InCount, out int SnsCount)

SegCount počet segmentovek displeje (většinou 4 nebo 6).
InCount počet digitálních vstupů displeje (většinou 4).
SnsCount počet vstupů pro externí teplotní senzor (většinou 1).

Příklad:

if (MyDevice.CmdGetHwInfo(out int SegCount, out int InCount, out int SnsCount))
{
    Console.WriteLine($"Počet segmentovek: {SegCount}");
    Console.WriteLine($"Počet vstupů: {InCount}");
    Console.WriteLine($"Počet vstupů pro teplotní senzor: {SnsCount}");
}
else
    Console.WriteLine("error");

Výstup pro diplej TDS57-6:

Počet segmentovek: 6
Počet vstupů: 4
Počet vstupů pro teplotní senzor: 1

CmdSetDataAscii() - zobrazení řetězce

Zobrazení dat na displeji - vstupem je string.

Deklarace:

public bool CmdSetDataAscii(string ascii)

ascii řetězec dat k zobrazení na displeji. Nepoužitá místa vyplňte mezerami. Formátování řetězce je detailněji popsáno v dokumentaci displeje.

Příklad:

// Zobrazení řetězce 12:34.56 na 6-místném displeji
if (MyDevice.CmdSetDataAscii("12:34.56"))
    Console.WriteLine("ok");
else
    Console.WriteLine("error");

Výstup:

ok

CmdSetDataBin() - zobrazení binárních dat

Zobrazení dat na displeji - vstupem jsou binární data. Je tak možné ovládat jednotlivé segmenty.

Deklarace:

public bool CmdSetDataBin(byte[] data)

data Binární data k zobrazení. První byte jsou kontrolky, další byty představují jednotlivé segmenty. Délka pole tedy musí být buď 1 (jen byte se stavem kontrolek) nebo počet segmentovek + 1 (kontrolky + hodnoty na segmentovky).
data[0] Byte ovládající kontrolky kolem displeje (dvojtečky a tečky mezi segmentovkami + dvojici kontrolek před první znakovkou). Každá kontrolka má svůj bit - pořadí je popsáno v dokumentaci.
data[1] Byte jehož bity představují jednotlivé segmenty na znakovce nejvíce vlevo. Nejnižší bit (LSb) představuje segment a. Pro výběr jednotlivých segmentů lze využít výčet SevenSeg.

Příklad 1:

// Příklad rozsvítí dvě pomlčky na prostředních dvou znakovkách 6-místného displeje a červenou kontrolku vlevo před displejem
byte[] data = { 0b0000_010, 0, 0, (byte)Tds.SevenSeg.g, (byte)Tds.SevenSeg.g, 0, 0 };

if (MyDevice.CmdSetDataBin(data))
    Console.WriteLine("ok");
else
    Console.WriteLine("error");

Výstup:

ok

Příklad 2:

// Příklad rozsvítí všechny okrajové segmanty na 6-místném displeji + obě dvojtečky. 
byte[] data = { 0b0011_1100, (byte)Tds.SevenSeg.e + (byte)Tds.SevenSeg.f + (byte)Tds.SevenSeg.d + (byte)Tds.SevenSeg.a, (byte)Tds.SevenSeg.a + (byte)Tds.SevenSeg.d, (byte)Tds.SevenSeg.a + (byte)Tds.SevenSeg.d, (byte)Tds.SevenSeg.a + (byte)Tds.SevenSeg.d, (byte)Tds.SevenSeg.a + (byte)Tds.SevenSeg.d, (byte)Tds.SevenSeg.a + (byte)Tds.SevenSeg.b + (byte)Tds.SevenSeg.c + (byte)Tds.SevenSeg.d + (byte)Tds.SevenSeg.dp };

if (MyDevice.CmdSetDataBin(data))
    Console.WriteLine("ok");
else
    Console.WriteLine("error");

Výstup:

ok

CmdSetBrightnessManual() - nastavení jasu - manuálně

Manuální nastavení jasu displeje. (Manuální nastavení jasu nemá vliv, pokud je aktivováno automatické řízení jasu.)

Deklarace:

public bool CmdSetBrightnessManual(byte brightness)

brightness jas displeje jako číslo z rozsahu 0 až 36.

Příklad:

if (MyDevice.CmdSetBrightnessManual(10))
    Console.WriteLine("ok");
else
    Console.WriteLine("error");

Výstup:

ok

CmdSetBrightnessAuto() - nastavení jasu - automaticky

Automatické nastavení jasu displeje podle údaje ze senzoru osvětlení.

Deklarace:

public bool CmdSetBrightnessAuto(bool enable, byte min, byte max)

enable true = automatické nastavení jasu zapnuto.
min minimální jas na který může automatika jít (rozsah 6-36).
max maximální jas na který může automatika jít (rozsah 6-36).

Příklad:

if (MyDevice.CmdSetBrightnessAuto(true, 6, 20))
    Console.WriteLine("ok");
else
    Console.WriteLine("error");

Výstup:

ok

CmdSetFlags() - nastavení parametrů času a zobrazení

Příkaz nastavuje parametry času jako automatická změna letního/zimního času, časový posun a způsob zobrazení automatických informací (čas, datum, teplota) na displeji.

Deklarace:

public bool CmdSetFlags(UInt16 flags, UInt16 offset, UInt16 zone = 0)

flags přepínače SetFlags, které určují režim zobrazení data, času, teploty, apod.
offset posun oproti UTC v minutách (jen pro Ethernetové varianty).

Příklad:

// Příklad nastaví automatické přepínání na letní čas a automatické zobrazení data, času a teploty po vypršení platnosti dat i po zapnutí zařízení
UInt16 flags = (ushort)(Tds.SetFlags.AutoSummerTime | Tds.SetFlags.ShowAutoAfterTimeout | Tds.SetFlags.ShowAutoOnPowerUp | Tds.SetFlags.ShowTimeInAutoItems | Tds.SetFlags.ShowDateInAutoItems | Tds.SetFlags.ShowTemperatureInAutoItems);
if (MyDevice.CmdSetFlags(flags, 60))
    Console.WriteLine("ok");
else
    Console.WriteLine("error");

Výstup:

ok

CmdSetDataValidity() - nastavení doby platnosti dat

Příkaz zobrazí na displeji datum, čas nebo teplotu podle CmdSetFlags. (Pokud je během automatického zobrazení dat zadána nějaká hodnota k zobrazení, je automatické zobrazení pozastaveno a dojde k zobrazení požadované hodnoty. Po vypršení doby její platnosti jsou opět zobrazovány automatické informace. Pokud zadaná hodnota nemá uvedenou dobu platnosti, znamená to, že hodnota má být zobrazena trvale. V takové situaci lze obnovit zobrazení automatických informací právě touto funkcí CmdSetDataValidity.)

Deklarace:

public bool CmdSetDataValidity(UInt16 sec)

sec doba platnosti v sekundách z rozsahu 0 až 65535. Pokud je zadána 0, je hodnota zobrazená trvale.

Příklad:

if (MyDevice.CmdSetDataValidity(120))
    Console.WriteLine("ok");
else
    Console.WriteLine("error");

Výstup:

ok

Datum a čas

CmdSetDateTime() - nastavení interních hodin

Příkaz nastaví datum a čas v interním obvodu reálného času (RTC).

Deklarace:

public bool CmdSetDateTime(DateTime date)

date datum a čas k nastavení (nepovinný parametr). Pokud parametr není uveden, nastaví se datum a čas podle systémových hodin Windows.

Příklad:

if (MyDevice.CmdSetDateTime())
    Console.WriteLine("ok");
else
    Console.WriteLine("error");

Výstup:

ok

CmdGetDateTime() - čtení interních hodin

Příkaz zjistí datum a čas z interního obvodu reálného času (RTC).

Deklarace:

public bool CmdGetDateTime(out DateTime date)

date datum a čas z interních hodin.

Příklad:

if (MyDevice.CmdGetDateTime(out DateTime date))
    Console.WriteLine($"Current date and time: {date}");
else
    Console.WriteLine("error");

Výstup:

Current date and time: 26.9.2018 13:59:37

Vstupy a teploměr

CmdGetInputs() - čtení stavu vstupů

Zjistí aktuální a předchozí stav digitálních vstupů displeje.

Deklarace:

public bool CmdGetInputs(out byte[] inputs)

inputs Pole 4 bytů se stavem vstupů. MSB je IN1. V každém bajtu je LSb (bit 0) aktuální stav vstupu. Bit 1 je v jedničce pokud byla od posledního čtení zaznamenána na vstupu úroveň 1 (stisk tlačítka).

Příklad:

if (MyDevice.CmdGetInputs(out byte[] inputs))
    Console.WriteLine($"{BitConverter.ToString(inputs)}");
else
    Console.WriteLine("error");

Výstup - IN1 byl od posledního čtení sepnutý, IN2 je sepnutý:

02-01-00-00

CmdGetTemperature() - měření teploty

Zjistí aktuálně naměřenou teplotu. (Jde o odpojitelný externí teplotní senzor na kabelu.)

Deklarace:

public ResponseACK CmdGetTemperature(out float temp)

temp aktuální teplota ve stupních Celsia

Příklad:

if (MyDevice.CmdGetTemperature(out float temp) == ResponseACK.AllIsOk)
    Console.WriteLine($"{temp:0.0} °C");
else
    Console.WriteLine("error");

Výstup:

25,9 °C

Deklarace

Zjednodušené přehledy výčtů, případně dalších datových typů deklarovaných v knihovně pro toto zřízení.

SevenSeg - pojmenovává jednotlivé segmenty

Výčet jednotlivých segmentů na jedné znakovce displeje.

Deklarace:

public enum SevenSeg : byte
{
    a = 1,
    b = 2,
    c = 4,
    d = 8,
    e = 16,
    f = 32,
    g = 64,
    dp = 128
}

SetFlags - přepínače pro konfiguraci zobrazení

Výčet jednotlivých možností pro konfiguraci zobrazení, režimu vnitřních hodin a zobrazení automatických informací. (Pro funkci CmdSetFlags.)

Deklarace:

public enum SetFlags : UInt16
{
    AutoSummerTime = 1,  // Automatické přepínaní na letní čas
    ShowAutoOnPowerUp = 4,  // Zobrazit automtické informace po zapnutí napájení
    ShowAutoAfterTimeout = 8,  // Po vypršení platnosti dat zobrazit automatické informace
    HoursMode12 = 16,  // Hodiny zobrazovat jako 0 až 12 hod.
    ShowMonthFirst = 32,  // Při zobrazení data používat formrát mm.dd.
    ShowTimeInAutoItems = 256,  // Do automatických informací zahrnout čas
    ShowDateInAutoItems = 512,  // Do automatických informací zahrnout datum
    ShowTemperatureInAutoItems = 1024    // Do automatických informací zahrnout teplotu
}
Clone this wiki locally