-
Notifications
You must be signed in to change notification settings - Fork 2
Dokumentace: TQS
papouch.com edited this page Nov 18, 2019
·
14 revisions
- Teploměry TQS na papouch.com: TQS3O (venkovní), TQS3I (interiérové), TQS3P (na trubku), TQS4E (samotná elektronika)
- Dokumentace společných funkcí protokolu Spinel - většinu těchto funkcí umí i teploměry TQS
-
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 C# WPF aplikace s tlačítkem Měřit.
using Papouch.Communication;
using Papouch.Spinel.Spinel97;
using System;
using System.Windows;
namespace TqsApp
{
public partial class MainWindow : Window
{
private ICommunicationInterface ci;
public Papouch.Spinel.Spinel97.Device.Tqs.Tqs MyDevice;
public MainWindow()
{
InitializeComponent();
ci = new CiSerialPort();
ci.ConfigString = "provider=SERIAL_PORT;PortName=COM4;BaudRate=9600;";
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 Papouch.Spinel.Spinel97.Device.Tqs.Tqs(ci, 0x31);
if (MyDevice == null)
{
MessageBox.Show("Zařízení se nepovedlo inicializovat!");
Application.Current.Shutdown();
}
}
private void Measure_Click(object sender, RoutedEventArgs e)
{
ResponseACK resp = MyDevice.CmdGetTemperature(out float temp);
switch (resp)
{
// Vše je v pořádku, vypíšme teplotu
case ResponseACK.AllIsOk:
Temperature.Text = $"{temp:0.0} °C";
break;
// Pravděpodobně odpojený senzor nebo chyba senzoru
case ResponseACK.DeviceMalfunction:
Temperature.Text = "Chyba senzoru";
break;
// Při jiné chybě se vypíše její kód
default:
Temperature.Text = resp.ToString();
break;
}
}
}
}
...a definice jednoduchého rozhraní ve WPF:
<Window x:Class="TqsApp.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="TqsApp" Height="120" Width="400" ResizeMode="NoResize">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="2*" />
<ColumnDefinition Width="1*" />
</Grid.ColumnDefinitions>
<TextBox x:Name="Temperature" Text="?" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" FontSize="50" />
<Button Grid.Column="1" Content="Měřit" Margin="20" Click="Measure_Click"/>
</Grid>
</Window>
public ResponseACK CmdGetTemperature(out float temp)
temp
Aktuálně naměřená teplota. Pokud z nějakého důvodu není aktuální teplota dostupná, vrací se konstanta float.NaN
. Přesnost teploty je většinou 0,5 °C. Detailní informace o přesnosti jsou v dokumentaci zařízení.
ResponseACK resp = MyDevice.CmdGetTemperature(out float temp);
switch (resp)
{
case ResponseACK.AllIsOk:
Console.WriteLine($"Current temperature is {temp} °C"); // Výpis teploty bez zaokrouhlení
Console.WriteLine($"Current temperature is {temp:0.0} °C"); // Výpis teploty se zaokrouhlením na formát 0.0
break;
case ResponseACK.DeviceMalfunction:
Console.WriteLine("Sensor error");
break;
default:
Console.WriteLine(resp.ToString());
break;
}
Current temperature is 27,78125 °C
Current temperature is 27,8 °C