-
Notifications
You must be signed in to change notification settings - Fork 2
Dokumentace: THT2, TH2E
- Odkazy na papouch.com: THT2, THT2I, TH2E
- Dokumentace společných funkcí protokolu Spinel - většinu těchto funkcí umí i senzory THT2 a TH2E
-
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 Papouch.Spinel.Spinel97.Device.Tht2Th2e;
using System;
using System.Windows;
namespace TestApp
{
public partial class MainWindow : Window
{
private ICommunicationInterface ci;
public Tht2Th2e MyDevice;
public MainWindow()
{
InitializeComponent();
// Příklad pro THT2 ("sériový port" RS485):
ci = new CiSerialPort();
ci.ConfigString = "provider=SERIAL_PORT;PortName=COM4;BaudRate=9600;";
// Příklad pro TH2E na adrese 192.168.1.124 s datovým portem 10001:
// Upozornění: TH2E 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 Tht2Th2e(ci, 0xFE);
if (MyDevice == null)
{
MessageBox.Show("Zařízení se nepovedlo inicializovat!");
Application.Current.Shutdown();
}
}
private void Measure_Click(object sender, RoutedEventArgs e)
{
ResponseACK MeasureAck = MyDevice.CmdGetMeasure(out Tht2Th2e.MeasuredValues values);
string output = "";
if (MeasureAck == ResponseACK.AllIsOk)
{
output += $"Statusy teploty: {values.TemperatureStatus} \n";
if (values.TemperatureStatus.HasFlag(Tht2Th2e.FlagsStatus.Valid))
output += $"Teplota: {values.Temperature:0.0} ° \n";
output += $"Statusy vlhkosti: {values.HumidityStatus} \n";
if (values.HumidityStatus.HasFlag(Tht2Th2e.FlagsStatus.Valid))
output += $"Vlhkost: {values.Humidity:0.0} % \n";
output += $"Statusy rosného bodu: {values.DewPointStatus} \n";
if (values.DewPointStatus.HasFlag(Tht2Th2e.FlagsStatus.Valid))
output += $"Rosný bod: {values.DewPoint:0.0} ° \n";
}
else
output += $"Chyba: {MeasureAck}";
TxtOutput.Text = output.Trim();
}
}
}
...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="TxtOutput" Text="?" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" FontSize="12" />
<Button Grid.Column="1" Content="Měřit" Margin="20" Click="Measure_Click"/>
</Grid>
</Window>
Provede jeden odměr aktuálních hodnot ze senzoru.
public ResponseACK CmdGetMeasure(out MeasuredValues values)
values
Třída MeasuredValues
se statusy a hodnotami jednotlivých veličin.
ResponseACK MeasureAck = MyDevice.CmdGetMeasure(out Tht2Th2e.MeasuredValues values);
string output = "";
if (MeasureAck == ResponseACK.AllIsOk)
{
output += $"Statusy teploty: {values.TemperatureStatus} \n";
if (values.TemperatureStatus.HasFlag(Tht2Th2e.FlagsStatus.Valid))
output += $"Teplota: {values.Temperature:0.0} ° \n";
output += $"Statusy vlhkosti: {values.HumidityStatus} \n";
if (values.HumidityStatus.HasFlag(Tht2Th2e.FlagsStatus.Valid))
output += $"Vlhkost: {values.Humidity:0.0} % \n";
output += $"Statusy rosného bodu: {values.DewPointStatus} \n";
if (values.DewPointStatus.HasFlag(Tht2Th2e.FlagsStatus.Valid))
output += $"Rosný bod: {values.DewPoint:0.0} ° \n";
}
else
output += $"Chyba: {MeasureAck}";
Console.WriteLine(output.Trim());
Statusy teploty: Valid
Teplota: 23,9 °
Statusy vlhkosti: Valid
Vlhkost: 30,4 %
Statusy rosného bodu: Valid
Rosný bod: 5,5 °
Statusy teploty: Valid, UnderLimit
Teplota: 24,1 °
Statusy vlhkosti: None
Statusy rosného bodu: None
Chyba: DeviceMalfunction
Vrací typ připojeného senzoru. (Nejedná se o autodetekci typu aktuálně připojeného senzoru. Typ senzoru se detekuje jen při zapnutí, resp. po resetu.)
public ResponseACK CmdGetSensorType(out SensorType sensor)
sensor
Typ senzoru, který byl detekován při zapnutí. Jeden z výčtu SensorType
.
if (MyDevice.CmdGetSensorType(out Tht2Th2e.SensorType sensor) == ResponseACK.AllIsOk)
Console.WriteLine(sensor.ToString());
else
Console.WriteLine("error");
TH3X
Zjednodušené přehledy výčtů, případně dalších datových typů deklarovaných v knihovně pro toto zřízení.
Třída obsahující statusy a naměřené hodnoty všech veličin. Tuto třídu vrací funkce měření CmdGetMeasure()
.
public class MeasuredValues
{
public FlagsStatus TemperatureStatus;
public float Temperature;
public FlagsStatus HumidityStatus;
public float Humidity;
public FlagsStatus DewPointStatus;
public float DewPoint;
}
Každá z veličin v MeasuredValues
je popsána proměnnou Status, která může mít nahozený některý z následujících flagů (jeden nebo více), podle stavu a velikosti měřené hodnoty.
public enum FlagsStatus : byte
{
None,
UnderLimit, // Hodnota je pod uživatelsky nastaveným limitem
OverLimit, // Hodnota je nad uživatelsky nastaveným limitem
UnderFlow, // Hodnota je pod dolní hranicí měřitelného rozsahu
OverFlow, // Hodnota je nad horní hranicí měřitelného rozsahu
Valid // Hodnota je platná
}
public enum SensorType : byte
{
None,
TH15, // teplota, vlhkost, rosný bod
DS, // teplota
TH3X, // teplota, vlhkost, rosný bod
TMP, // teplota
Other // neznámý typ
}