Autor Beitrag
Toris
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Fr 05.06.09 09:44 
Hallo Leute,

ich bin, wie soll es auch anders sein, ich bin C Sharp Anfänger.
Ich habe ein kleines Projekt, dass Messdaten über eine serielle Schnittstelle empfangen und ausgewertet werden soll. Das Ganze ist natürlich recht komplizierter, aber ich möchte erst mal Daten empfangen können. Mehr vorerst nicht.

Also, meine Entwicklungsumgebung ist Visual C# 2005. Ein Lappi mit 2 USB2Seriell und ein Nullmodemkabel um die Verbindung aufzubauen und zu empfangen.
Es soll eine Windows Applikation werden. Also Windowsform und ich benutze erst mal ein label. Soviel zu dem grafischen.
Über HTerm (Terminalprogramm) möchte ich die Daten versenden und empfange Sie über mein Programm.

Ich bin auch schon dabei von Galileo das openbook zu lesen.

Mein Problem ist, dass ich nicht genau weiß ob beim „using“ noch ein Eintrag fehlt. Bei Zeile 22+23, weiß ich nicht ob er an der falschen Stelle ist(Hab es auch mal nach oben verschoben) oder wie ich nochmal den „buffer“. Definiere. Denn wenn ich es Debugge kommt dann die Meldung „ Der Name buffer ist nicht im aktuellen Kontext vorhanden.
Ich weiß, dass ich es definieren muss. Eine Hilfestellung wäre schön und eine Lösung noch schöner!^^

Vielen Dank im voraus und wer Schreibfehler findet darf sie gern behalten!^^

Der Code:

ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
  
using System;
using System.Collections.Generic;
using System.IO.Ports;
using System.Windows.Forms;
using System.Text;

namespace Messdaten
{
    class Program
    {
        /// <summary>
        /// Der Haupteinstiegspunkt für die Anwendung.
        /// </summary>
        // Erstellt den seriellen Port mit festgelegten Standardeinstellungen.
        private SerialPort port = new SerialPort("COM1"9600, Parity.None, 8, StopBits.One);
        
        [STAThread]
        static void Main(string[] args)
        {
            // Zeigt dem Benutzer die ankommenden Daten im Hex Format
            Label label1 = new Label();
            label1.Text += ByteArrayToHexString(buffer);              
            // Erstellt ein Exemplar dieser Klasse
            new Program();
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            //Application.Run(new Form1());
        }

        private static string ByteArrayToHexString(object buffer)
        {
            throw new Exception("The method or operation is not implemented.");
        }

        private Program()
        {
                
            // Fügt eine Methode hinzu, welche benannt wird, wenn Daten wartend sich im Portpuffer befinden.
            
            
            // Kommunikation startet
            port.Handshake = System.IO.Ports.Handshake.RequestToSend;
            port.ReceivedBytesThreshold = 1;
            port.Open();
            // Trägt eine Schleife in die Anwendung ein um den Therad am laufen zu halten.
            //Application.Run();
        }

        /// 
        /// <summary>Konvertiert einen Array von Bytes in ein formatierten String von hexadezimalen Ziffern(Bsp.: E4 CA B2). </summary>
        /// <param name="data"> Der Array von Bytes, wird in ein String von Hexadezimalen Ziffern übersetzt. </param>
        /// <returns> Gibt ein formatierten String in Hex digits mit Abstand zurück. </returns>
        private string ByteArrayToHexString(byte[] data)
        {
            StringBuilder sb = new StringBuilder(data.Length * 3);
            foreach (byte b in data)
                sb.Append(Convert.ToString(b, 16).PadLeft(2'0').PadRight(3' '));
            return sb.ToString().ToUpper();
        }

    }
}
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4798
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Fr 05.06.09 11:56 
Sorry, dir fehlen aber noch Grundlagen der WinForm-Programmierung.

Am besten du fängst noch mal dein Projekt von vorn an.

Erstelle ein neues WinForm-Projekt mit dem VS und dann hast du schon mal ein Formular namesn Form1 welches du dann am besten gleich umbenennst (z.B. MainForm o.ä.).

In der Klasse Programm solltest du möglichst ersteinmal keine Änderungen machen.

Alle Windows-Komponenten z.B. Label, Textbox, Button etc. fügst du dann mit dem Formular-Designer auf die MainForm.

Und für die Kommunikation erstellst du dir am besten eine neue Klasse, die du dann von der GUI aus ansprichst (Trennung von GUI und Logik).


Am besten wäre jedoch, du liest ersteinmal weiter im OpenBook und erstellst kleine WinForm-Applikationen (mit den verschiedenen Controls inklusive Ereignisbehandlung, z.B. OnClick etc.).
Toris Threadstarter
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Fr 05.06.09 11:59 
@TH69:

K mach ich und danke nochmals.