簡體   English   中英

RS232串口通信c#win7 .net framework 3.5 sp1

[英]RS232 serial port communication c# win7 .net framework 3.5 sp1

我是新的c#串口。 即時編寫ac#program running是winXP和win7,用於在機器發送數據時保持從串口接收的數據。

using System.IO;
using System.IO.Ports;
using System.Threading;


namespace RS232RVR
{
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        SettingRS232();
    }

    public void SettingRS232 ()
    {
        try
        {
            SerialPort mySerialPort = new SerialPort("COM6");

            mySerialPort.BaudRate = 9600;
            mySerialPort.Parity = Parity.None;
            mySerialPort.StopBits = StopBits.One;
            mySerialPort.DataBits = 8;
            mySerialPort.Handshake = Handshake.None; //send to hardware flow control.

            mySerialPort.DataReceived += new SerialDataReceivedEventHandler(DataReceviedHandler);

            mySerialPort.Open();


            richTextBox1.Text = "on";

            mySerialPort.Close();
        }
        catch (Exception ex)
        {
            richTextBox1.Text = ex.Message;    
        }

    }

    private void DataReceviedHandler(
                    object sender,
                    SerialDataReceivedEventArgs e)
    {
        SerialPort sp = (SerialPort)sender;
        string indata = sp.ReadExisting();
        richTextBox1.Text = indata;

    }

}

}

COM6在我的電腦上有效。 但是我的問題似乎是當數據來自串口時,datareceived事件不會觸發。 (我通過使用一些免費軟件應用程序檢查了這項運動)

誰有人可以幫忙?

謝謝

        mySerialPort.Open();
        richTextBox1.Text = "on";
        mySerialPort.Close();

這不會起作用,打開它后,你會在幾個微秒后關閉串口。 是的,DataReceived事件處理程序不可能觸發。 關閉程序時只關閉端口。

        mySerialPort.Handshake = Handshake.None

這也是一個問題,你現在需要自己控制握手信號。 絕大多數串口設備在看到機器已通電並准備接收之前不會發送任何內容。 將DtrEnabled和RtsEnabled屬性設置為true。

您是否從應用程序中復制了該代碼? 它可能只是一個事件處理程序名稱拼寫錯誤的情況? 例如,DataReceviedHandler實際上應拼寫為DataReceivedHandler。

問題解決了,我想分享。 我的罰款如下:

namespace RS232RVR
{
    public partial class Form1 : Form
    {
        private delegate void SetTextDeleg(string data);

        public Form1()
        {
            InitializeComponent();
            SettingRS232();
        }

        public void SettingRS232 ()
        {
            try
            {
                SerialPort mySerialPort = new SerialPort("COM6");

                mySerialPort.BaudRate = 9600;
                mySerialPort.Parity = Parity.None;
                mySerialPort.StopBits = StopBits.One;
                mySerialPort.DataBits = 8;
                mySerialPort.Handshake = Handshake.None;
                mySerialPort.ReadTimeout = 2000;
                mySerialPort.WriteTimeout = 500;

                mySerialPort.DtrEnable = true;
                mySerialPort.RtsEnable = true;

                mySerialPort.Open();
                //mySerialPort.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
                mySerialPort.DataReceived += DataReceivedHandler;

                textBox1.Text = "Serial Port is Ready.";

            }
            catch (Exception ex)
            {
                textBox1.Text = ex.Message;    
            }

        }

        public void DataReceivedHandler(object sender,SerialDataReceivedEventArgs e)
        {
            SerialPort sp = (SerialPort)sender;
            System.Threading.Thread.Sleep(500);
            string indata = sp.ReadExisting();
            this.BeginInvoke(new SetTextDeleg(DisplayToUI), new object[] { indata });
            //textBox1.Text += indata;

        }

        private void DisplayToUI(string displayData)
        {
            textBox1.Text += displayData.Trim();
           // textBox1.Text += displayData;

        }

    }
}

如果有人對代碼發表評論,歡迎您,我很高興並希望更好地編寫代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM