【问题标题】:Error reading serial port with C #用 C# 读取串口时出错
【发布时间】:2013-09-14 01:07:24
【问题描述】:

我有一个系统可以在所有串行端口上创建一个循环并为它们发送一个“at”命令。 这些端口在 Putty 中返回“ok”,但在 C# 中 MessageBox 为空。 为什么会这样?

腻子:http://i.imgur.com/AZY7aRY.png/ C#:http://i.imgur.com/wgGyT2x.png

public partial class Form1 : Form
        {
            List<SerialPort> serialPort = new List<SerialPort>();

            private delegate void SetTextDeleg(string text);

            public Form1()
            {
                InitializeComponent();
            }

            private void Form1_Load(object sender, EventArgs e)
            {
                var portNames = SerialPort.GetPortNames();
                foreach (var port in portNames)
                {
                    SerialPort sp;
                    sp = new SerialPort(port, 9600, Parity.None, 8, StopBits.One);
                    sp.Handshake = Handshake.None;
                    sp.DataReceived += new SerialDataReceivedEventHandler(sp_DataReceived);
                    sp.ReadTimeout = 500;
                    sp.WriteTimeout = 500;

                    serialPort.Add(sp);
                    listPorts.Items.Add(port);
                }
            }

            private void listPorts_SelectedIndexChanged(object sender, EventArgs e)
            {

            }

            private void button1_Click_1(object sender, EventArgs e)
            {
                foreach (var sp in serialPort)
                {
                    // Open port
                    try
                    {
                        if (!sp.IsOpen)
                            sp.Open();

                        sp.Write("at\r\n");
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show("Error opening/writing to serial port :: " + ex.Message, "Error!");
                    }
                }
            }

            void sp_DataReceived(object sender, SerialDataReceivedEventArgs e)
            {
                Thread.Sleep(500);
                SerialPort sp = (SerialPort)sender;
                string data = sp.ReadLine();
                this.BeginInvoke(new SetTextDeleg(si_DataReceived), new object[] { data });
            }

            private void si_DataReceived(string data)
            {
                String retorno = data.Trim();
                MessageBox.Show(data);
            }
    }

【问题讨论】:

    标签: c# .net serial-port


    【解决方案1】:

    您的调制解调器响应如下:\n\rOK\n\r 您应该读取缓冲区中的所有流,或者您应该使用 ReadLine() 方法读取串行端口缓冲区的 3 倍。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-13
      • 1970-01-01
      • 2023-04-03
      • 2011-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-16
      相关资源
      最近更新 更多