对串口也是一无所知,做串口的底层开发。想请教大神,一个串口能发送数据,然后自己接收数据么?我这样写完 用虚拟串口测试 开启两个程序可以互相收发开启一个程序,打开串口,进去发送数据没有反应。订阅事件Sp1_DataReceived不触发。求大神帮忙 private void Form1_Load(object sender, EventArgs e)
        {
           if (cbCom.Items.Count > 0)
            {
                cbCom.SelectedIndex = 0;
                sp1.ReceivedBytesThreshold=1;
                sp1.BaudRate = 9600;
                sp1.DtrEnable = true;
                sp1.RtsEnable = true;
                sp1.ReadTimeout = 1000;
                sp1.ReceivedBytesThreshold = 1;
                sp1.DataReceived += new 
                SerialDataReceivedEventHandler(this.Sp1_DataReceived);
                sp1.Open();
            }
        }
        private void Sp1_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            if (sp1.IsOpen)     
            {                DateTime dt = DateTime.Now;
                txtReceived.Text += dt.GetDateTimeFormats('f')[0].ToString() +"\r\n";
                try
                {
                    Byte[] receivedData = new Byte[sp1.BytesToRead];      
                    sp1.Read(receivedData, 0, receivedData.Length);         
                    AddContent(new UTF8Encoding().GetString(receivedData));
                }
                catch (System.Exception ex)
                {
                    MessageBox.Show(ex.Message, "出错提示!!!!!");
                    txtSendStr.Text = "";
                }
            }
            else
            {
                MessageBox.Show("请打开某个串口", "错误提示");
            }
        }

解决方案 »

  1.   


    虚拟串口工具一般添加的是一对,比如com2和com4,这个时候,你需要开启两个你的应用程序(Debug/Release目录下的exe)。一个选择com2,另一个选择com4,这样com2里发送的数据,在com4里接收。
    如果你想一个串口自己收发,就在上图中选择两个一样的串口比如都是com2,这样代码里也得加如果接收到了数据的时候,再发送一点数据,就能实现自己收自己发。
    虚拟串口工具端口右边的“】”符号表示连接关系。
      

  2.   

    不敢当,我也是新手,刚好最近弄了一下这个,这个也不是很明白你的com2是不被占用了,换其他口试试,我用虚拟串口6.9可以添加一对一样的
    sp1.Read(receivedData, 0, receivedData.Length);         
    AddContent(new UTF8Encoding().GetString(receivedData));
    sp1.WriteLine("send test");//加得试试这样试试
      

  3.   


    我的其他串口都试过了 不行  难道是版本问题? 我的vspd是7.2
      

  4.   

    随便找个带console口的交换机,用电脑真实的物理串口连上去,你给交换机下发命令,它就会上送(回显)命令,这样也是一个串口自己发自己收
      

  5.   


    我下了个vspd6.9 就可以了 我先试试 能不能自发自收
      

  6.   


    能创建两个com3 但是 却打不开了 
    分开创建com4 com2就可以打开 难道是程序的问题?
      

  7.   

    我没有配置,就是默认的Standard
    其它参考
      

  8.   

    直接把TX和RX短接即可,祝你好运
      

  9.   

    最近也在做串口项目,这里有串口接收代码,你可以参考一下,完全可以使用的,已实现串口收发。                    this.Invoke(//WPF为单线程,此接收中断线程不能对WPF进行操作,用如下方法才可操作
                        new Action(
                             delegate
                             {
                                 //recCount.Text = (Convert.ToInt32(recCount.Text) + recBuffer.Length).ToString();//接收数据字节数
                          if (recModeCheck.Checked == true)
                                 {
                                     //string recBuffer16 = new string();
                                     StringBuilder recBuffer16 = new StringBuilder();//定义16进制接收缓存
                                     for (int i = 0; i < recBuffer.Length; i++)
                                     {
                                         recBuffer16.AppendFormat("{0:X2}" , recBuffer[i]);//X2表示十六进制格式(大写),域宽2位,不足的左边填0。                                                               
                                     }
                                     //  portNum = System.Text.Encoding.Default.GetBytes(recBuffer16.ToString());//将接收recBuffer16中的字符串转换为byte数组
                                    textREC.Text += recBuffer16.ToString();