-
Notifications
You must be signed in to change notification settings - Fork 2
Dokumentace: TDS
Funkce jsou určeny pro displeje TDS57-4, TDS57-6, TDS101-4 a TDS101-6 od papouch.com.
- Odkaz na papouch.com: Kompletní info o TDS RS
- Dokumentace společných funkcí protokolu Spinel - většinu těchto funkcí umí i displeje TDS
-
Dokumentace funkce
SendAndReceive()
, kterou můžete snadno začít používat vlastní instrukce nebo ty, které nejsou v naší knihovně implementovány.
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>
Zjistí počet segmentovek, vstupů a teplotních senzorů, osazených na displeji.
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).
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");
Počet segmentovek: 6
Počet vstupů: 4
Počet vstupů pro teplotní senzor: 1
Zobrazení dat na displeji - vstupem je string.
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.
// 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");
ok
Zobrazení dat na displeji - vstupem jsou binární data. Je tak možné ovládat jednotlivé segmenty.
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 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");
ok
// 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");
ok
Manuální nastavení jasu displeje. (Manuální nastavení jasu nemá vliv, pokud je aktivováno automatické řízení jasu.)
public bool CmdSetBrightnessManual(byte brightness)
brightness
jas displeje jako číslo z rozsahu 0 až 36.
if (MyDevice.CmdSetBrightnessManual(10))
Console.WriteLine("ok");
else
Console.WriteLine("error");
ok
Automatické nastavení jasu displeje podle údaje ze senzoru osvětlení.
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).
if (MyDevice.CmdSetBrightnessAuto(true, 6, 20))
Console.WriteLine("ok");
else
Console.WriteLine("error");
ok
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.
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 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");
ok
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
.)
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.
if (MyDevice.CmdSetDataValidity(120))
Console.WriteLine("ok");
else
Console.WriteLine("error");
ok
Příkaz nastaví datum a čas v interním obvodu reálného času (RTC).
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.
if (MyDevice.CmdSetDateTime())
Console.WriteLine("ok");
else
Console.WriteLine("error");
ok
Příkaz zjistí datum a čas z interního obvodu reálného času (RTC).
public bool CmdGetDateTime(out DateTime date)
date
datum a čas z interních hodin.
if (MyDevice.CmdGetDateTime(out DateTime date))
Console.WriteLine($"Current date and time: {date}");
else
Console.WriteLine("error");
Current date and time: 26.9.2018 13:59:37
Zjistí aktuální a předchozí stav digitálních vstupů displeje.
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).
if (MyDevice.CmdGetInputs(out byte[] inputs))
Console.WriteLine($"{BitConverter.ToString(inputs)}");
else
Console.WriteLine("error");
02-01-00-00
Zjistí aktuálně naměřenou teplotu. (Jde o odpojitelný externí teplotní senzor na kabelu.)
public ResponseACK CmdGetTemperature(out float temp)
temp
aktuální teplota ve stupních Celsia
if (MyDevice.CmdGetTemperature(out float temp) == ResponseACK.AllIsOk)
Console.WriteLine($"{temp:0.0} °C");
else
Console.WriteLine("error");
25,9 °C
Zjednodušené přehledy výčtů, případně dalších datových typů deklarovaných v knihovně pro toto zřízení.
Výčet jednotlivých segmentů na jedné znakovce displeje.
public enum SevenSeg : byte
{
a = 1,
b = 2,
c = 4,
d = 8,
e = 16,
f = 32,
g = 64,
dp = 128
}
Výčet jednotlivých možností pro konfiguraci zobrazení, režimu vnitřních hodin a zobrazení automatických informací. (Pro funkci CmdSetFlags
.)
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
}