Elektroda.pl
Elektroda.pl
X

Wyszukiwarki naszych partnerów

Wyszukaj w ofercie 200 tys. produktów TME
Europejski lider sprzedaży techniki i elektroniki.
Proszę, dodaj wyjątek elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

c# błąd odczytu stringa z portu COM

fliper_katrill 16 Cze 2010 23:23 1413 2
  • #1 16 Cze 2010 23:23
    fliper_katrill
    Poziom 20  

    Witam!
    Przy odczycie stringa z RS232 mam problemy z jego poprawnością. TextBox pokazuje mi temperaturę w postaci XX.XX i cały czas identycznie oczywiście poprawnie, ale ta sama dana w Labelu pokazuje mi X.XX lub .XX lub samo X. Dodatkowo wywala mi error, że string jest niepoprawny, proszę powiedzcie jaki kawałek kodu wkleić, który Was interesuje.

    0 2
  • #2 17 Cze 2010 10:31
    arnoldziq
    Moderator Programowanie

    No to powinieneś wkleić każdy kawałek kodu, który a jakikolwiek sposób dotyczy zmiennej która odbiera lub/i przechowuje te dane a następnie je wyświetla.

    0
  • #3 17 Cze 2010 15:19
    fliper_katrill
    Poziom 20  

    Code:

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

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

            string RxString="0";
            //double y;
            public Form1()
            {
                InitializeComponent();
           }

            private void buttonStart_Click(object sender, EventArgs e)
            {
                serialPort1.PortName = "COM1";
                serialPort1.BaudRate = 9800;
                serialPort1.DataBits = 8;
                serialPort1.StopBits = System.IO.Ports.StopBits.One;
                serialPort1.Parity = System.IO.Ports.Parity.None;
                serialPort1.Handshake = System.IO.Ports.Handshake.None;

                serialPort1.ReadTimeout = 3000;
                serialPort1.WriteTimeout = 3000;

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

            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);
                label1.Text=RxString;
                //y = double.Parse(RxString);
            }

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

            private void Form1_Load(object sender, EventArgs e)
            {
                CreateGraph(zg1);
                //SetSize();
            }

            private void CreateGraph(ZedGraphControl zgc)
            {
                GraphPane myPane = zgc.GraphPane;

                // Set the titles and axis labels
                myPane.Title.Text = "Wykres temperatury";
                myPane.XAxis.Title.Text = "Czas";
                myPane.YAxis.Title.Text = "Temperatura";

                // Make up some data points from the Sine function
                PointPairList list = new PointPairList();
     
                for (double x = 0; x < 60; x++)
                {
                    //double y = Math.Sin(x * Math.PI / 10.0);
                    double y = 19;

                    list.Add(x, y);
               }

                // Generate a blue curve with circle symbols, and "My Curve 2" in the legend
                LineItem myCurve = myPane.AddCurve("skok temperatury", list, Color.Blue,
                                  SymbolType.Circle);
                // Fill the area under the curve with a white-red gradient at 45 degrees
                myCurve.Line.Fill = new Fill(Color.White, Color.Green, 45F);
                // Make the symbols opaque by filling them with white
                myCurve.Symbol.Fill = new Fill(Color.White);

                // Fill the axis background with a color gradient
                myPane.Chart.Fill = new Fill(Color.White, Color.LightGoldenrodYellow, 45F);

                // Fill the pane background with a color gradient
                myPane.Fill = new Fill(Color.White, Color.FromArgb(220, 220, 255), 45F);

                // Calculate the Axis Scale Ranges
                zgc.AxisChange();
            }
            private void Form1_Resize(object sender, EventArgs e)
            {
                SetSize();
            }

            private void SetSize()
            {
                zg1.Location = new Point(10, 10);
                // Leave a small margin around the outside of the control
                zg1.Size = new Size(this.ClientRectangle.Width - 20, this.ClientRectangle.Height - 20);
            }
        }
    }
     



     

    RxString to zmienna jaka mnie interesuje to jest cały kod wraz z kodem wykresu (komplet)
    Z Bascoma mam dane w postaci XXXX zmieniłem je by nie przedzielały liczb kropki.

    Code:

     for (double x = 0; x < 60; x++)
                {
                    //double y = Math.Sin(x * Math.PI / 10.0);
                    double y = 19;

                    list.Add(x, y);
               }

    double y jest na sztywno a chcę tu RxStringa jako double
    Z góry dziękuję za zainteresowanie :)

    0
TME logo Szukaj w ofercie
Zamknij 
Wyszukaj w ofercie 200 tys. produktów TME
TME Logo