c# 循環com,分別對串口寫入與讀取,獲取需要的串口信息


private SerialPort serialPort;//串口對象類

        private string strPortDataReceived = "";//記錄串口返回值
        private string serialPortName = "";//記錄端口號

        private bool isGet = false;


        /// <summary>
        /// 獲取產品設備號
        /// </summary>
        /// <returns>設備號</returns>
        public List<string> GetProductNumBySerialPort()
        {
            List<string> productNumList = new List<string>();
            string[] ports = SerialPort.GetPortNames();
            if (ports.Length > 0)
            {
                for (int i = 0; i < ports.Length; i++)
                {
                    string portName = ports[i];

                    serialPort = new SerialPort(portName, 115200, Parity.None, 8, StopBits.One);
                    //serialPort.DataReceived += new SerialDataReceivedEventHandler(serialPort_DataReceived);//DataReceived事件委托
                    serialPort.ReceivedBytesThreshold = 1;
                    serialPort.RtsEnable = true;
                    serialPort.WriteTimeout = 500;
                    serialPort.ReadTimeout = 500;
                    try//這里寫成異常處理的形式以免串口打不開程序崩潰
                    {
                        serialPort.Open();
                    }
                    catch { }
                    if (serialPort.IsOpen)
                    {
                        //byte[] ar = StringToByteHelper.HexStringToByteArray("1F1109");
                        byte[] WriteBuffer = new byte[] { 0x1F, 0x11, 0x09 };
                        try
                        {
                            serialPort.Write(WriteBuffer, 0, WriteBuffer.Length);//獲取設備編號
                        }
                        catch (Exception ex)
                        {
                            string str = ExceptionClass.GetExceptionMsg(ex, "串口讀寫超時"+ "\r\n");
                            ExceptionClass.WriteException(str);
                        }//Thread.Sleep(100);
                        int r = 0;
                        //讀取返回數據
                        while (serialPort.BytesToRead == 0)
                        {
                            r++;
                            Thread.Sleep(1);
                            if (r >= 500)
                            {
                                break;
                            }
                        }
                        Thread.Sleep(50); //50毫秒內數據接收完畢,可根據實際情況調整
                        r = 0;
                        byte[] recData = new byte[serialPort.BytesToRead];
                        serialPort.Read(recData, 0, recData.Length);
                        string strPortDataReceived = System.Text.Encoding.Default.GetString(recData);
                        Console.WriteLine(strPortDataReceived);
                        if (strPortDataReceived.Length >= 17)
                        {
                            productNumList.Add(strPortDataReceived.Substring(2, 4));
                        }
                        serialPort.Close();//關閉該端口
                    }
                    else
                    {
                        //MessageBox.Show("串口打開失敗!");
                        //return false;
                    }
                }
            }
            else
            {
                //MessageBox.Show("沒有可用的串口!");    
            }
            return productNumList;
        }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM