اطلاعیه

Collapse
No announcement yet.

ارتباط سریال در C#

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    ارتباط سریال در C#

    سلام دوستان

    برای ارتباط سریال از یه برد به پی سی از سی شارپ استفاده کردم. مساله اینه که برد من پشت سر هم داده ی بیتی رو میفرسته و توی ارتباط سریال، اونو بصورت رشته میخونم. ولی برای نمایشش توی تکست باکس مشکل دارم و کاراکترهای بی معنا میبینم. ظاهرا تکست باکس بیت صفر و یک نشون نمیده. اگه بشه داده ها رو به صورت معادل دهدهی برای هر بایت هم نشون بدم، مشکل حل میشه. برنامه رو در ادامه گذاشتم. ممنون اگه کسی بتونه تغییرات لازمو بگه...
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    using System.IO.Ports;


    namespace Serial_Test
    {
    public partial class Form1 : Form
    {
    string StrRecieve;


    public Form1()
    {
    InitializeComponent();
    }


    private void btnClose_Click(object sender, EventArgs e)
    {
    this.Close();
    }


    private void btnOpen_Click(object sender, EventArgs e)
    {
    serialPort1.DataBits = 8;
    serialPort1.Parity = Parity.None;
    serialPort1.StopBits = StopBits.One;
    serialPort1.BaudRate = 115000;
    serialPort1.PortName = "COM4";
    serialPort1.Open();
    }


    private void btnClosePort_Click(object sender, EventArgs e)
    {
    serialPort1.Close();
    MessageBox.Show("PORT Closed", "OK", MessageBoxButtons.OK);
    }


    private void DisplayText(object sender, EventArgs e)
    {
    textBox2.AppendText(StrRecieve);
    }


    private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
    {
    // string StrRecieve;


    StrRecieve = serialPort1.ReadExisting();
    this.Invoke(new EventHandler(DisplayText));
    }
    }
    }



    #2
    پاسخ : ارتباط سریال در C#

    با سلام
    اگه از پورتهای خود کامپیوتر استفاده میکنین و مبدل ندارین مقدار باودریت رو به 115200 تغییر بدین تا استاندارد باشه.
    بعد اینکه رشته ای که شما از پورت سریال میخونین از نوع بایت هست و باید به استرینگ تبدیل بشه.
    کمترین توقع از یک فرد تحصیلکرده، دانستن املای صحیح کلمات است.

    دیدگاه


      #3
      پاسخ : ارتباط سریال در C#

      نوشته اصلی توسط نو رسیده نمایش پست ها
      با سلام
      اگه از پورتهای خود کامپیوتر استفاده میکنین و مبدل ندارین مقدار باودریت رو به 115200 تغییر بدین تا استاندارد باشه.
      بعد اینکه رشته ای که شما از پورت سریال میخونین از نوع بایت هست و باید به استرینگ تبدیل بشه.
      اگه ممکنه نحوه ی تبدیل بایت به استرینگ و متدش رو بگید. ممنون

      دیدگاه


        #4
        پاسخ : ارتباط سریال در C#

        ببخشید. من مدتهاست با سریال کار نکردم. تابع ReadExisting خروجیش از نوع استرینگ هست و نیازی به تبدیل نداره. من با tcp/ip قاطی کردم.
        احتمالا مشکل شما با اصلاح باودریت حل میشه.
        کمترین توقع از یک فرد تحصیلکرده، دانستن املای صحیح کلمات است.

        دیدگاه


          #5
          پاسخ : ارتباط سریال در C#

          بله این دستور استرینگ رو ایجاد میکنه. البته با اصلاح نرخ ارسال همچنان مشکل نمایش کاراکترای بی معنا برقراره. ممنون میشم اگه دوست دیگه ای بتونه کمک بکنه.

          دیدگاه


            #6
            پاسخ : ارتباط سریال در C#

            پس احتمالا اطلاعاتی که میاد بصورت اسکی نیست. بنا بر این شما نباید از متد ReadExisting استفاده کنین. باید بجاش ReadByte رو بکار ببرین و مثلا با استفاده از Convert.toDecimal تبدیل به عدد اینتجرش بکنید. بعد با toString توی تکست باکس نمایشش بدین.
            کمترین توقع از یک فرد تحصیلکرده، دانستن املای صحیح کلمات است.

            دیدگاه


              #7
              پاسخ : ارتباط سریال در C#

              نوشته اصلی توسط Z.TR نمایش پست ها
              سلام دوستان

              برای ارتباط سریال از یه برد به پی سی از سی شارپ استفاده کردم. مساله اینه که برد من پشت سر هم داده ی بیتی رو میفرسته و توی ارتباط سریال، اونو بصورت رشته میخونم. ولی برای نمایشش توی تکست باکس مشکل دارم و کاراکترهای بی معنا میبینم. ظاهرا تکست باکس بیت صفر و یک نشون نمیده. اگه بشه داده ها رو به صورت معادل دهدهی برای هر بایت هم نشون بدم، مشکل حل میشه. برنامه رو در ادامه گذاشتم. ممنون اگه کسی بتونه تغییرات لازمو بگه...
              کد PHP:

              using System
              ;
              using System.Collections.Generic;
              using System.ComponentModel;
              using System.Data;
              using System.Drawing;
              using System.Linq;
              using System.Text;
              using System.Threading.Tasks
              using System.Windows.Forms;
              using System.IO.Ports;


              namespace 
              Serial_Test
              {
                  public 
              partial class Form1 Form
                  
              {
                      
              string StrRecieve;


                      public 
              Form1()
                      {
                          
              InitializeComponent();
                      }


                      private 
              void btnClose_Click(object senderEventArgs e)
                      {
                          
              this.Close();
                      }


                      private 
              void btnOpen_Click(object senderEventArgs e)
                      {
                          
              serialPort1.DataBits 8;
                          
              serialPort1.Parity Parity.None;
                          
              serialPort1.StopBits StopBits.One;
                          
              serialPort1.BaudRate 115000;
                          
              serialPort1.PortName "COM4";
                          
              serialPort1.Open();
                      }


                      private 
              void btnClosePort_Click(object senderEventArgs e)
                      {
                          
              serialPort1.Close();
                          
              MessageBox.Show("PORT Closed""OK"MessageBoxButtons.OK); 
                      }


                         private 
              void DisplayText(object senderEventArgs e)
                      {
                          
              textBox2.AppendText(StrRecieve);
                      }


                      private 
              void serialPort1_DataReceived(object senderSerialDataReceivedEventArgs e)
                      {
                          
              // string StrRecieve;


                          
              StrRecieve serialPort1.ReadExisting();
                          
              this.Invoke(new EventHandler(DisplayText));
                      }
                  }

              داده های شما چه چیزی هستش؟ اعداد ! حروف! یا ترکیبی از هر دو؟
              کاراکتر می فرستید یا رقم! (اعداد رو قبل از ارسال باید به رشته ی کاراکتری تبدیل کنید و بعد ارسال کنید)
              اون بخشی از کدها رو که میکرو ارسال میکنه رو هم بزارید تا مشخص بشه ایراد کجاست
              If the wind will not serve, take to the oars

              دیدگاه

              لطفا صبر کنید...
              X