- Akku Tests und Balkonkraftwerk Speicher         
Ergebnis 1 bis 10 von 14

Thema: Board und Software verbinden (r232)

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Roboter Experte Avatar von sternst
    Registriert seit
    07.07.2008
    Beiträge
    672
    Ich bin verblüfft.
    Ich habe null Erfahrung mit C#, aber wenn ich "c# serial" bei Google eingebe, bekomme ich haufenweise extrem viel versprechende Links. Mit ausführlichen Erklärungen und Beispiel-Codes und allem Drum und Dran. Deine C#-Kenntnisse reichen also nicht aus, um mit all dem irgendetwas anzufangen, aber du hast trotzdem das hier hin bekommen:
    Ich habe einen Flugsimulator aus dem Shared Memory des Flugsimulators lese ich nun gewisse Daten aus. z.B.Lichter,Flaps,...
    ...
    Ausschnitt von c#
    Also wer das kann, sollte doch mit so was Simplen, wie dem hier
    Code:
    using System.IO.Ports;
    
    private static void SendSampleData() {
        SerialPort port = new SerialPort("COM1", 9600, Parity.None, 8, StopBits.One);
        port.Open();
        port.Write("Hello World");
        port.Close();
    }
    keine Probleme haben, oder?
    MfG
    Stefan

  2. #2
    Neuer Benutzer Öfters hier
    Registriert seit
    03.04.2011
    Beiträge
    22
    Zitat Zitat von sternst Beitrag anzeigen
    Ich bin verblüfft.
    Ich habe null Erfahrung mit C#, aber wenn ich "c# serial" bei Google eingebe, bekomme ich haufenweise extrem viel versprechende Links. Mit ausführlichen Erklärungen und Beispiel-Codes und allem Drum und Dran. Deine C#-Kenntnisse reichen also nicht aus, um mit all dem irgendetwas anzufangen, aber du hast trotzdem das hier hin bekommen:
    Also wer das kann, sollte doch mit so was Simplen, wie dem hier
    Code:
    using System.IO.Ports;
    
    private static void SendSampleData() {
        SerialPort port = new SerialPort("COM1", 9600, Parity.None, 8, StopBits.One);
        port.Open();
        port.Write("Hello World");
        port.Close();
    }
    keine Probleme haben, oder?


    Ja das habe ich auch schon durch kenne ich alles schon aber das ist nen Example welches schick und simple aussieht aber ich weiss immernoch nicht wie die

    A einbinden soll und
    B muss statt Hello World ja auch mein Datensatz da rein
    c sollte mein Datensatz ja eine art Struktur aufweisen um in Bascom das alles wieder auseinander ziehen zu können

    und das was ich geschafft habe ist nichts anderes als stundenlanges probieren und snippets kopieren und einbinden.
    Wenn ich das in Stunden zusammenfassen sollte ca 100 Stunden ,... mit dem Serial hänge ich mindesten genauso lang daran Google behaupte ich habe ich komplett durch *grins*.

    Ich bräuchte ne art Beispiel wie ich das einbinden soll und wie die Daten versendet werden dann würde ich auch verstehen was passiert.
    Für den einen oder anderen von euch ist das sicher total einfach für mich ist das ne ganz schwere Sache. Muss ich gestehen. Ausserdem haben damals für meinen Flugsimulator die Leute schonmal etwas Programmiert und den Code frei zugänglich gemacht.
    Am Ende ist es so das keiner mehr sich dafür interessiert "ich schon!"

    Hier aus der Datei nun ein Auszug es war ein simples Example und ich habe es dann erweitert es ist nicht von mir!!!

    Code:
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.IO.Ports;
    
    
    
    namespace SharedMemExample
    {
        public partial class frmMain : Form
        {
            /// <summary>
            /// Shared instance of a Falcon shared memory reader
            /// </summary>
            private F4SharedMem.Reader _reader;
    
            /// <summary>
            /// Flag to indicate whether the polling loop should keep polling 
            /// </summary>
            private bool _keepPolling = false;
    
            public frmMain()
            {
                InitializeComponent();
            }
    
            private void frmMain_Load(object sender, EventArgs e)
            {
                //set the Falcon data format here
                F4SharedMem.FalconDataFormats sharedMemFormat = F4SharedMem.FalconDataFormats.OpenFalcon;
    
                //now create a new instance of the F4 Shared Memory reader, using this data format
                _reader = new F4SharedMem.Reader(sharedMemFormat);
            }
    
            private void cmdStart_Click(object sender, EventArgs e)
            {
                cmdStop.Enabled = true;
                cmdStart.Enabled = false;
    
                _keepPolling = true; //set the flag that allows the polling loop to keep running
    
                //wait for Falcon to be running or for the user to click the Stop button
                while (!_reader.IsFalconRunning && _keepPolling)
                {
                    Application.DoEvents(); //stay responsive to Windows events
                }
                
                //loop while Falcon is running and the keepPolling flag is set 
                while (_reader.IsFalconRunning && _keepPolling)
                {
                    //read all variables from Falcon's shared memory
                    F4SharedMem.FlightData data = _reader.GetCurrentData();
    
    
    
                    if ((data.lightBits3 & 0x10000) != 0)
                    {
                        txtNoseGear.Text = "1";
                    } else {
                        txtNoseGear.Text = "0";
                    }
    
                    if ((data.lightBits3 & 0x20000) != 0)
                    {
                        txtLeftGear.Text = "1";
                    }
                    else
                    { 
                        txtLeftGear.Text = "0";
                    }
    
                    if ((data.lightBits3 & 0x40000) != 0)
                    {
                        txtRightGear.Text = "1";
                    }
                    else
                    {
                        txtRightGear.Text = "0";
                    }
    
                                           
    
                    if ((data.lightBits & 0x8000) != 0)
                    {
                        txtRefuelRDY.Text = "1";
                    }
                    else
                    {
                        txtRefuelRDY.Text = "0";
                    }
    
    
                    if (data != null)//make sure we got something
                    {
                        //assign shared memory values to our text boxes so we can see 
                        //what's in there!
                        txtFTIT.Text = data.ftit.ToString();
                        txtNozzle.Text = data.nozzlePos.ToString();
                        txtOil.Text = data.oilPressure.ToString();
                        txtRPM.Text = data.rpm.ToString();
                        //txtNoseGear.Text = data.gearPos.ToString();
                        //txtRefuelRDY.Text = data.lightBits.ToString();
    
    
    
    
                    }
                    else
                    {
                        txtFTIT.Text = "UNAVAILABLE";
                        txtNozzle.Text = "UNAVAILABLE";
                        txtOil.Text = "UNAVAILABLE";
                        txtRPM.Text = "UNAVAILABLE";
                        txtNoseGear.Text = "UNAVAILABLE";
                        txtRefuelRDY.Text = "UNAVAILABLE";
                    }
                    Application.DoEvents(); //stay responsive to Windows events
                }
            }
    
    
            private void txtTest_TextChanged(object sender, EventArgs e)
            {
    
            }
    
            private void Brows_Click(object sender, EventArgs e)
            {
    
            }
    
            private void lblLeftGear_Click(object sender, EventArgs e)
            {
    
            }
    
            private void Analog_Click(object sender, EventArgs e)
            {
    
            }
    
            private void cmdStop_Click(object sender, EventArgs e)
            {
    
            }
    
        }
    }
    Diesen Code habe ich schon versucht aber mein Resultat war nichts obwohl er selbsterklärend ist. Zu C# ich bin seit einer Woche dran und meine Zeit ist wirklich begrenzt da icheinen Sohn habe und meine Frau mich langsam erschlägt wegen dieser Sache Einer der Gründe warum ich das auch bezahlen würde wenn mir jemand die Anbindung realisiert.
    Gruß Thomas
    Geändert von Thomas Glas (18.04.2011 um 19:25 Uhr)

  3. #3
    shedepe
    Gast
    Du wirst dir also eine Art Protokoll für die Datenübertragung überlegen müssen z.B.
    Startbedingung - ID des Befehls - Daten - Endbedingung

    in C# kannst du das ganze dann in etwa so machen:
    Code:
    SerialPort port = new SerialPort(...);
    port.Open();
    byte[] DatenZumSenden new byte[Gewünschte Größe];
    DatenZumSenden[0] = Startbedingung;
    DatenZumSenden[1] = BefehlsID;
    DatenZumSenden[2] = Daten;
    DatenZumSenden[3] = Endbedingung;
    port.Write(DatenZumSenden, 0, DatenZumSenden.Length);
    und in Bascom musst du das halt dann entsprechend zerlegen

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.01.2006
    Beiträge
    4.555
    Also ich kann auch kein Englisch trotzdem bin ich erfolgreich Elektroniker geworden. Die nötigen Fachbegriffe habe ich halt auswendig gelernt und aussprechen kann ich nach über 30 Berufsjahren immer noch keinen. Alles was ich vom µC's weiß habe ich mir in ? 10.000 oder mehr Stunden durch lesen und ausprobieren selber bei gebracht hauptsächlich Assembler recht wenige Befehle die man lernen muss, und Basic in verschiedenen Dialekten. Mit Cxxx stehe ich immer noch auf Kriegsfuss, die sytax ist einfach nichts für mich, b.z.w. für deutsche Tastatur Belegungen.

    Das größte Problem bei Hochsprachen ist das mangelnde Verständnis was der Compiler aus den Befehlen letztendlich generiert. Das lernt man NUR durch Assembler als Grundlage. Da muss man halt jede Speicherstelle und jedes Register selber setzen, auf den Stack aufpassen und Speicher Überläufe vermeiden....

    Mitten drin quer Einsteigen ist immer sehr sehr schwer wenn die Grundlagen fehlen. Ist wie beim Tapezieren, fehlt die Grundlage fällt die Tapete von der Wand.

    Trotzdem viel Glück und eine menge Hartnäckigkeit, dann wird das schon! Wenn der Simulator eh überwiegend 0 oder 1 liefert, Beschäftigen Dich auch mit Bit Operationen, dann kannst Du mit einem Word, Doppel Word oder Long einen Haufen Infos übertragen.

    Gruß Richard

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    03.04.2011
    Beiträge
    22
    So habe nun gestern Abend noch etwas versucht.
    Einschalten der Led von der Software aus via Buttons.

    Nun ist der erste Schritt getan ich muss nun noch herrausfinden wie ich
    nun meine Daten bündele und in einen Satz an meinen Mega sende.

    Aktuell öffne und schliesse ich ja per Klick auf den Button den Port ständig.
    Bei 50 Abfragen ,... muss es anders laufen es muss ein Paket versendet werden was alles beinhaltet.
    *Kopfkratz*

    Also mein nächster Test wird sein "1 Button(openPort)" & "1 Button(closePort)" den Port zu öffnen & zu schliessen und 2 weitere Buttons um Led an oder auszuschalten.
    Die Buttons zum ein und ausschalten der LEDs würde ich mit einer IF Abfrage gestalten somit würde das ständige open&close des Ports entfallen.
    Ausserdem würde es Sinn machen alle relevanten Daten am Anfang des Script zu defenieren so das später an besagten Stellen so wenig Code wie nötig zum versenden der Daten entsteht.

    Melde mich wenn ich weiter bin

  6. #6
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.01.2006
    Beiträge
    4.555
    Lege doch einfach eine Liste mit den Daten an.......
    1.Kappen
    2 Ruder
    3.
    4.
    5.
    u.s.w. das in einer Data Anweisung 1,2,3,4,5..........X
    Dann Print#1, Data,1...x

    Beim Empfänger dann den umgekehrtten Weg und erst nach der Übertragung aller Daten diese in der Hauptschleife einzelnd auswerten. Die Daten Übertragung selber zyklisch über IRQ alle xyz ms. Du weist ja an welcher Stelle, Data 1 Klappe, Data 2 Ruder.....was zu finden ist. Open/Close dann am Beginn/Ende des IRQ.

    Sollte vom Schema her zu machen sein.

    Gruß Richard

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    03.04.2011
    Beiträge
    22
    Habe es nun so geschrieben mit Port-Open/Close das die Anweisung vorher prüft ob der Port open ist wenn nicht wird er geöffnet unabhängig davon wird durch starten meiner Abfrage auch der Port geöffnet. Falls aus irgendeinem Grund der Port gecloset wird ... öffnet er sich wieder automatisch. Eigentlich ne simple IF Else Abfrage.

    Ich weiss nicht was eine Dataanweisung ist.
    Verstanden habe ich deinen Vorschlag nur umsetzen ist etwas anderes.

    Ich versuche es mal wenn jemand Tipps Tricks oder kniffe hat oder gar snippet oder Hilfe Tutorials immer her damit.


    Gruß Tom

Ähnliche Themen

  1. Bootloader über R232
    Von Lageos im Forum Schaltungen und Boards der Projektseite Mikrocontroller-Elektronik.de
    Antworten: 2
    Letzter Beitrag: 27.08.2009, 08:31
  2. IR Led von der R232...
    Von Bubble10 im Forum Asuro
    Antworten: 5
    Letzter Beitrag: 28.09.2008, 20:39
  3. Hiiilfe! SRF02 R232-Mode an PC
    Von daddycool im Forum Sensoren / Sensorik
    Antworten: 3
    Letzter Beitrag: 30.09.2007, 20:02
  4. Gabellichtschranke mit Board verbinden?
    Von jagdfalke im Forum Sensoren / Sensorik
    Antworten: 0
    Letzter Beitrag: 21.03.2007, 07:29
  5. Wie Webserver und Board verbinden bzgl. Datenübergabe
    Von DirkS im Forum AVR Hardwarethemen
    Antworten: 6
    Letzter Beitrag: 29.10.2005, 07:15

Berechtigungen

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

12V Akku bauen