Skip to content

Dokumentace: TQS

papouch.com edited this page Nov 18, 2019 · 14 revisions

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

Může se hodit:

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

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>

Teploměr

CmdGetTemperature() - měření teploty

Deklarace:

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í.

Příklad:

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;
}

Výstup:

Current temperature is 27,78125 °C
Current temperature is 27,8 °C