Erster Gehversuch mit Visual C#, ELV ASH2200 und ELV FS20 WUE



  1. ELV FS20 WUE und ELV Mini-USB-Modul UM2102 zusammenlöten
  2. USB Treiber installieren
  3. Mit RealTerm 02002fb01 (Textmode) aktivieren und schauen Statusabfrage 0201f0 durchführen
  4. Sensoren  in Betrieb nehmen 
  5. SimpleSerial Beispiel von http://csharp.simpleserial.com/ (Visual C#2010 Express) installieren
  6. Beispiel mit FS20 WUE spezifischen Elemente erweitern (initialisiertung, status, reset) - siehe code snippets weiter unten
  7. Start SimpleSerial, click auf "start" und dann "status":
    Status: OKBaudrate: 4800 bpsFS20-Pakete: 0Wetterdaten-Pakete: 0
  8. Etwas warten, dann trudeln auch schon die Wetterdaten der 3 Sensoren ein
    Sensor: 1Adresse: 1Temperatur: 1,9 C (0x0013)Luftfeuchtigkeit: 86,2 % (0x035E)Windgeschw.: 0,0 km/h (0x0000)Niederschlag: 0 (0x0000)Regen: Nein (0x00)
    Sensor: 1
    Adresse: 0Temperatur: 12,1 C (0x0079)Luftfeuchtigkeit: 72,5 % (0x02D5)Windgeschw.: 0,0 km/h (0x0000)Niederschlag: 0 (0x0000)Regen: Nein (0x00)
    Sensor: 1
    Adresse: 3Temperatur: 12,2 C (0x007A)Luftfeuchtigkeit: 67,1 % (0x029F)Windgeschw.: 0,0 km/h (0x0000)Niederschlag: 0 (0x0000)Regen: Nein (0x00)



c# Code snippets:



using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace SimpleSerial
{
    public partial class Form1 : Form
    {
        // Add this variable 
        string RxString;

        public Form1()
        {
            InitializeComponent();
        }

        private void buttonStart_Click(object sender, EventArgs e)
        {
            // FS20 WUE 

            serialPort1.PortName = "COM5";
            serialPort1.BaudRate = 4800;

            serialPort1.Open();
            if (serialPort1.IsOpen)
            {
                buttonStart.Enabled = false;
                buttonStop.Enabled = true;
                textBox1.ReadOnly = false;

                byte[] textMode = new byte[4] { 0x02, 0x02, 0xfb, 0x01 };
                serialPort1.Write(textMode, 0, 4);  // Text Mode

                byte[] wetterDaten = new byte[4] { 0x02, 0x02, 0xf2, 0x01 }; // Wetterdaten sofort ausgeben
                serialPort1.Write(wetterDaten, 0, 4);

                byte[] fs20Daten = new byte[4] { 0x02, 0x02, 0xf1, 0x01 }; // fs20 sofort ausgeben
                serialPort1.Write(fs20Daten, 0, 4);

            }
        }

        private void buttonStop_Click(object sender, EventArgs e)
        {
            if (serialPort1.IsOpen)
            {
                serialPort1.Close();
                buttonStart.Enabled = true;
                buttonStop.Enabled = false;
                textBox1.ReadOnly = true;

            }

        }

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (serialPort1.IsOpen) serialPort1.Close();
        }

        private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
        {
            // If the port is closed, don't try to send a character.
            if (!serialPort1.IsOpen) return;

            // If the port is Open, declare a char[] array with one element.
            char[] buff = new char[1];

            // Load element 0 with the key character.
            buff[0] = e.KeyChar;

            // Send the one character buffer.
            serialPort1.Write(buff, 0, 1);

            // Set the KeyPress event as handled so the character won't
            // display locally. If you want it to display, omit the next line.
            e.Handled = true;
        }

        private void DisplayText(object sender, EventArgs e)
        {
            textBox1.AppendText(RxString);
        }

        private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
        {
            RxString = serialPort1.ReadExisting();
            this.Invoke(new EventHandler(DisplayText));
        }

        private void status_Click(object sender, EventArgs e)
        {
            // If the port is closed, don't try to send a character.
            if (!serialPort1.IsOpen) return;

            // If the port is Open, declare a char[] array with one element.
            byte[] getStatus = new byte[3] { 0x02, 0x01, 0xf0 };


            serialPort1.Write(getStatus, 0, 3);
        }

        private void Reset_Click(object sender, EventArgs e)
        {
            // If the port is closed, don't try to send a character.
            if (!serialPort1.IsOpen) return;

            byte[] getStatus = new byte[3] { 0x02, 0x01, 0xf6 };

            serialPort1.Write(getStatus, 0, 3);
        }


    }
}

Keine Kommentare:

Kommentar veröffentlichen