先说一下,下位机用的CH341 USB转串口芯片,现在要实现自动查找这个COM口,方法是从COM1开始依次打开每个串口,如果打开串口失败则跳过(串口不存在或正在使用),如果打开成功则设置该串口波特率为300,然后向该串口写入ASCII字符串"$CH341Ser?",如果该串口是普通串口,那么通常没有任何返回,如果该串口是CH341串口,那么应用程序将能接收到一个ASCII字符"W",以此识别CH341。
    然后问题来了,我现在有三个COM,COM1,COM2,COM3,其中COM3是CH341下位机的,我只要一向COM3发送"$CH341Ser?"就发送超时,其他口没有问题,向COM3发送其他字符也可以,比如"$CH341Ser"或"CH341Ser?"之类的都可以,就是发送"$CH341Ser?"就会显示发送超时,我用别人的串口助手可以收到返回的‘W’,自己用C++写的也可以,不知道有没有人懂,先谢谢各位
代码:        //扫描CH341
        private void buttonSearchPort_Click(object sender, EventArgs e)
        {
            if (comm.IsOpen)
                comm.Close();
            string[] ports = SerialPort.GetPortNames();
            Array.Sort(ports);
            foreach (string num in ports)
            {
                comm.PortName = num;
                comm.BaudRate = 300;
                comm.Open();
                byte[] buf = Encoding.ASCII.GetBytes("$CH341Ser?");
                comm.Write(buf, 0, buf.Count());
                //System.Threading.Thread.Sleep(300);
                int n = comm.BytesToRead;
                if (n > 0)
                {
                    //这边处理一下接收的
                    MessageBox.Show("成功");
                }
                else
                {
                    if (comm.IsOpen)
                        comm.Close();
                }
            }
        }