-
        

Ergebnis 1 bis 1 von 1

Thema: [C#] Komponente - Datenströme in Pakete zerlegen

  1. #1
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    22.06.2009
    Beiträge
    1.265

    [C#] Komponente - Datenströme in Pakete zerlegen

    Anzeige

    Hallo zusammen.
    Heute stelle ich eine recht praktische von mir geschriebene Komponente vor, die einem größerem Projekt entstammt (Dass auch noch bald vorgestellt wird ^^).

    Anforderungen an den PC:
    .NetFramework 4.0
    Serielle Schnittstelle

    Die Komponente erleichtert die Kommunikation zwischen PC und Roboter über die Serielle Schnittstelle erheblich (Im Moment ist jedoch nur die PC Seite implementiert).
    Die Idee ist, dass sich Roboter und PC gegenseitig Datenpakete schicken, die man zumindest auf PC Seite wesentlich leichter verabeiten kann.
    Ein solches Datenpaket ist so aufgebaut:

    Startcondition | RobotID-Highbyte | RobotID-Lowbyte | ModuleID Highbyte | ModuleID-Lowbyte | ComponentID-Highbyte | ComponentID-Lowbyte | Length | Data | Checksum | Stopcondition

    Das Vorhanden sein von einer RoboterID eine ModulID und eine KomponentenID erschließt aus dem größeren Projekt, dem die Software entnommen wurde.
    Man kann aber genauso gut z.B. nur die RobotID nutzen um das Ziel oder den mit dem Paket kodierten Befehl zu indentifizieren.

    Als Startkondition wird der byte wert des Zeichens: # genutzt
    Als Stopkondition wird der byte werd des Zeichens: ~ genutzt

    Die Verwendung der Komponente ist recht simpel gehalten und wird (im leider noch unkommentierten Beispiel) auch rudimentär gezeigt.

    Verwendung

    Zunächst müssen die Codedateien "CAnalyseDatastream.cs" "CDataPacket.cs" und "CSerialCommunication.s" dem Projekt hinzugefügt werden.

    Dann muss der Namespace "Communication" am Anfang der eigenen Codedatei unter "using" hinzugefügt werden.

    Beispiel:

    Code:
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using Communication;
    Dann empfiehlt es sich eine globale Variable vom Typ CSerialCommunication anzulegen

    Beispiel: (Aus einen WindowsForms entnommen)

    Code:
    //Hier stehen die Usings und der namespace
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    //Die globale Variable
            CSerialCommunication comm;
    //Hier steht der restliche Code
    Dann muss die Komponente initialisiert werden:

    Code:
    //Initialisierung -- kann z.B. im LoadEvent des Forms aufgerufen werden
    private void Init()
    {
    //Neue Instanz anlegen
                comm = new CSerialCommunication();
    //Initialisieren - Comport, Baudrate,Databits, Parität,Stopbits
                comm.Init("COM1", 9600, 8, System.IO.Ports.Parity.None, System.IO.Ports.StopBits.One);
    //Event abonnieren, dass ausgelöst wird wenn ein neues Datenpaket erkannt wurde
                comm.NewPaketAvailable += new Action<CDataPacket>(comm_NewPaketAvailable);
    
    }
    //Diese Methode wird ausgelöst wenn ein neues Datenpaket erkannt wurde
    void comm_NewPaketAvailable(CDataPacket obj)
    {
              //obj enthält das Datenpaket -- Zugriff auf Daten durch obj.<Eigenschaft>
             //Kann z.B. verarbeitet werden
    }
    Das senden wird durch <Instanz von CserialCommunication>.SendDataPackage(paket) gemacht.

    Bespiel:

    Code:
    private void Send()
    {
    //Neues Datenpaket anlegen
                CDataPacket paket = new CDataPacket();
                paket.RobotID = 1;
                paket.ModuleID = 0;
                paket.ComponentID = 0;
                paket.Length = 1;
                paket.Data = new byte[] { 10 };
    //Comm ist unsere Instanz von CSerialcommunication - comm.SendDataPackage sendet das zuvor erstellte Datenpaket
                comm.SendDataPackage(paket);
    
    }
    Auf Roboterseite habe ich leider noch keine Implementierung zum Senden und Empfangen von Datenpaket gemacht.
    Angehängte Dateien Angehängte Dateien

Ähnliche Themen

  1. 16-bit int in 2 8-bit int zerlegen
    Von Christoph2 im Forum C - Programmierung (GCC u.a.)
    Antworten: 22
    Letzter Beitrag: 15.04.2016, 16:21
  2. Quadrokopter Komponente Dimensionieren
    Von HVflash im Forum Allgemeines zum Thema Roboter / Modellbau
    Antworten: 3
    Letzter Beitrag: 08.05.2012, 23:33
  3. 3 Akku-Pakete zu je 4xMignon schnell laden
    Von sigo im Forum Allgemeines zum Thema Roboter / Modellbau
    Antworten: 1
    Letzter Beitrag: 20.10.2007, 15:15
  4. Keine X-Komponente von MicroMag3-Magnetfeldsensor
    Von Raszycz im Forum Sensoren / Sensorik
    Antworten: 0
    Letzter Beitrag: 11.12.2006, 16:16
  5. String zerlegen
    Von blizzard im Forum Software, Algorithmen und KI
    Antworten: 3
    Letzter Beitrag: 25.05.2006, 18:25

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •