程序里有一个string类型的变量用来存放我要发送的数据,
比如我要发送:
a
b
c每一行是一个命令,每一行后面都有回车符“\n”,串口每收到一个命令都要再传回来一些数据发送完 a 之后,等待串口传回来的数据,如果有数据返回,再接着发送B,如果返回了error或者过了n秒还没有数据返回,那么就提示用户超时,后面的就不发了请问这个该怎么实现呢。

解决方案 »

  1.   

    用serialport 控件 
    在serialport 的dataReceive事件中处理接受的数据
    用timer控制回传和超时问题
      

  2.   


    serialport sp=new serialport ();
    sp.PortName = "com3";
                        sp.BaudRate = 9600;
                        sp.ReadTimeout = 5000;//5秒后时间过期  
                                           sp.Open();
    sp.WriteLine("a");
    string aa=sp.readLine();
    sp.WriteLine("b");
    string bb=sp.readLine();
    sp.WriteLine("c");
    string cc=sp.readLine();
      

  3.   

    我想这样做把每一行都放在一个栈里,从头开始传,传一个退一个,然后在comm_DataReceived()事件里面进行判断,不知道可不可以
      

  4.   


    我是觉得这个是比较笨的方法用了2L的方法,每次ReadLine的时候就超时
      

  5.   

    调用这个函数发送,返回True就发下一条。想要返回的数据自己改函数。        private bool sendDone(string sendstring, int timeout)
            {
                try
                {
                    serialPort1.WriteLine(sendstring);
                    for (int i = 0; i < timeout * 10; i++)
                    {
                        System.Threading.Thread.Sleep(100);
                        if (serialPort1.BytesToRead > 0)
                        {
                            if (serialPort1.ReadLine() == "error")
                                return false;
                            else
                                return true;
                        }
                    }                return false ;
                }
                catch
                {
                    return false;
                }
            }