Laden...
A
Benutzerbeschreibung

Forenbeiträge von avoid Ingesamt 4 Beiträge

09.08.2013 - 16:39 Uhr

Auch wenn der Beitrag schon betagt ist, möchte ich etwas dazu beitragen.

Mein erstes Programm habe ich 1995 in QBasic zusammen getippt ohne so richtig zu verstehen was ich da mache.
Es war ein Textbasiertes Frage/Antwort Spiel das eine kleine Geschichte erzählen sollte.
weil es mir aber zu trocken war hab ich lieber Warcraft2 weiter gespielt. 😉

Programmieren ist für mich mittlerweile wie für andere Malen oder Bücher schreiben.
Ich habe eine Idee im Kopf und die versuche ich mit meinem begrenzten Wissen, sprichwörtlich zu Papier zu bringen.
Ich löse also keine Probleme für andere sondern setze nur meine Kreativität um.

die meisten meiner Programme bewegen sich in dieser Richtung: Tools für USB2ISS Adapter
oder auch in dieser: [Win32] RFID-Zeiterfassung
stolz bin ich z.b. auch das hier: RC-Heli mit PICAXE aufmotzen

02.10.2010 - 04:11 Uhr

ich konnte das problem selbst lösen.

hier der code:


       private void timer1_Tick(object sender, EventArgs e)
        {
            if (serialPort1.BytesToRead > 0)
            {
                int readBuffer;
                readBuffer = serialPort1.BytesToRead;   // wie voll der datenpuffer ist.
                toolStripProgressBar1.Value = readBuffer;

                InputData = serialPort1.ReadTo(",");
                toolStripStatusLabel3.Text = "Empfange Daten";
                string[] sa = InputData.Split(',');
                foreach (string s in sa)
                {

                    if (s != String.Empty)
                    {
                        textBox1.AppendText(s + ',');
                        chart1.Series["Sensor"].Points.AddY(s);
                    }
                }
            }
            else
            {
                toolStripStatusLabel3.Text = "Keine Daten";
            }
        }

ich habe zuerst mal das einlesen der daten auf "serialPort1.ReadTo(",");" geändert.
damit lese ich die daten bis zum nächsten komma zeichen, in meinem fall also jeden einzelnen wert.
ob das "InputData.Split(',');" danach noch viel sinn macht kann ich selbst nicht sagen.
aber ich belasse es zur vorsicht dabei.

so kann der timer, dessen code das ist, mit 1ms interval arbeiten ohne lücken im diagramm zu erzeugen.
um die daten in echtzeit zu sehen darf ich meine eigene schaltung nicht schneller als im 1ms interval senden lassen.
sonst stauen sich die daten im puffer.

sollte wer noch fragen dazu haben, einfach eine PN schreiben.
hab noch ein bild angehangen um es zu belegen das es so klappt.

danke euch trotzdem für die beiden antworten! 😁

01.10.2010 - 23:47 Uhr

danke für das verschieben des beitrags.

ich habe jetzt mal mit den debugger etwas genauer beobachtet was das programm macht.
zum glück kommen nur zahlen und das trenn zeichen an.
wie es scheind liegt der fehler wo anders wenn ich es richtig verstehe.

und zwar habe ich den string jetzt mit "Split" am trennzeichen zerlegt.
das entstandene array "sa" enthält im debugger die richtigen werte.
und ich hab jetzt eine abfrage die prüft ob der wert "!= String.Empty" ist.
die abfrage ob wirklich ein int werd enthalten ist werde ich noch mit ein bauen.
danke für das beispiel.

für die ausgabe in die textbox lasse ich die werte wieder mit komma trennen.
doch an stelle von z.b. 104,104,104 erhalte ich 104,1,04,104 .
wenn ich mit dem folgenden code arbeite.
klar das dann das diagramm gelegentlich auf 1 oder 4 oder sonstige abweichende zahlen springt.


                InputData = serialPort1.ReadExisting();
                toolStripStatusLabel3.Text = "Empfange Daten";
                string[] sa = InputData.Split(',');
                foreach (string s in sa)
                {
                    if (s != String.Empty)
                    {
                        textBox1.AppendText(s + ',');
                        chart1.Series["Sensor"].Points.AddY(s);
                    }
                }

am ReadExisting() kann es nicht liegen, weil im array ja die richtigen werte sind.

ist das AppendText() nicht dafür ausgelegt so zu arbeiten wie ich es verwende?
oder liegt es daran das ich diese schleife per timer interval von 50ms abarbeiten lasse
und das evtl. zu kurz ist für die 4096byte die der lesepuffer als default hat?

------nachtrag-------
wie es scheind werden vom ReadExisting() doch gelegentlich beim letzten wert nur die bis dahin halb empfangenen daten übergeben.
ich versuche das mit "ReadTo()" zu lösen indem ich gelegentlich ein bestimmtes schlüssel zeichen mit übertrage.
oder besser noch, einfach die letzten werte des "sa" array garnicht erst verwende.
mal kucken welche der beiden möglichkeiten ich realisieren kann.

01.10.2010 - 21:33 Uhr

wie im titel beschrieben geht es darum das ich in VC#2010 (Express) ein LineChart Diagramm erstellt habe und es damit Probleme gibt.

die Chart Komponente habe ich mir aus den Tools in meine Forms Anwendung gezogen und es auf Line (also Linien Diagramm) eingestellt.

nun zu meinem problem:
meine anwendung empfängt daten einer schaltung am ComPort.
diese daten kommen gelegentlich unsauber an, sprich nicht immer sind es gültige daten für das Diagramm,
was dazu führt das das Diagramm für die fehlerhaften daten eine null setzt was die linie einbrechen lässt.
und das ist für ein diagramm das messwerte anzeigen soll nicht gerade optimal.
ein bild dazu gibts als Anhang.

als einzigen code der das diagramm mit daten füllt habe ich im moment diese zeile:

chart1.Series["Sensor"].Points.AddY(InputData);

in InputData liegt der empfangene wert.
kann ich im Diagramm irgend etwas einstellen um falsche werte zu ignorieren?
oder vorher eine prüfung machen ob auch wirklich ein int wert drin ist?
leider ist die Variable InputData ein String weil er paralell in eine Multiline Textbox ausgegeben wird.

hoffe mir kann wer helfen.
danke schon mal.