郁闷中~~~~
我用2005是用F11逐语句编译没有错误,但用F5编译却取不到串口返回值??

解决方案 »

  1.   

     SerialPort serialport1 = new SerialPort("com1", 9600, Parity.None, 8, StopBits.One);//实例化
            public void wriPort() //发送协议
            {
                string writeCom = "ef 01 f0 a5";
                Byte[] buff = HexStringToBinary(writeCom.Trim());            
                
                if (serialport1.IsOpen != true)
                {
                    serialport1.Open();//打开串口
                    
                }
                serialport1.Write(buff, 0, buff.Length);//发送数据
                
            }
            public void redPort()
            {
                Byte[] redbyte = new byte[10];
                serialport1.Read(redbyte, 0, 10);//读取数据(在这设断点运行正常能取出数据,否则就只能取出数据的起始位其他的都是零.)
                txt1.Text = redbyte[3].ToString() + redbyte[4].ToString() + "." + redbyte[5].ToString();//文本框显示
                txt2.Text = redbyte[6].ToString() + redbyte[7].ToString() + "." + redbyte[8].ToString();//文本框显示
                serialport1.Close(); 
            }
            public  byte[]   HexStringToBinary(string   hexstring) //把String转换成byte数组
            {
                string[] tmpary = hexstring.Trim().Split( ); 
                byte[]   buff   =   new   byte[tmpary.Length]; 
                for   (int i = 0; i < buff.Length; i++) 
                { 
                    buff[i] = Convert.ToByte(tmpary[i],16); 
                } 
                return   buff; 
            } 
            private void button1_Click(object sender, EventArgs e)
            {
                wriPort();//调用方法
                redPort();
            }
    希望哪位大哥  告诉小弟毛病在哪? 我刚接触串口, 做的一个只能温湿的联系程序.希望哪位在可以告诉我应该看写什么书.
    先谢谢各位回帖的朋友们!
      

  2.   

    原因:
    (1)wriPort();//调用方法    redPort(); 
           写在一起了。
     就算自收自发 它 串口硬件也需要时间呀
    你单步调试就是给了硬件收数据的时间。so(2)串口收数据要么在中断里处理,要么用Timer处理
     你这种情况,可以在发送后先Sleep一段时间、100ms?
      

  3.   

    我帮你重新写了一下:、
    SerialPort serialport1=new   SerialPort( "com1 ",   9600,   Parity.None,   8, StopBits.One);//实例化 
    serialport1.Open();
                    public   void   wriPort()   //发送协议 
                    { 
                            string   writeCom   =   "ef   01   f0   a5 "; 
                            Byte[]   buff   =   HexStringToBinary(writeCom.Trim());                         
                            
                            if   (serialport1.IsOpen   !=   true) 
                            { 
                                    serialport1.Open();//打开串口 
                                    
                            } 
                            serialport1.Write(buff,   0,   buff.Length);//发送数据
                               System.Threading.Thread.Sleep(100); // sleep 100ms to send data 
                            
                    } 
                    public   void   readPort() 
                    { 
                            Byte[]   redbyte   =   new   byte[serialport1.BytesToRead]; 
                            serialport1.Read(redbyte,   0, serialport1.BytesToRead );
                            serialport1.Close();   
                    } 
                    public     byte[]       HexStringToBinary(string       hexstring)   //把String转换成byte数组 
                    { 
                            string[]   tmpary   =   hexstring.Trim().Split(   );   
                            byte[]       buff       =       new       byte[tmpary.Length];   
                            for       (int   i   =   0;   i   <   buff.Length;   i++)   
                            {   
                                    buff[i]   =   Convert.ToByte(tmpary[i],16);   
                            }   
                            return       buff;   
                    }   
                    private   void   button1_Click(object   sender,   EventArgs   e) 
                    { 
                            wriPort();//调用方法 
                            redPort(); 
                    }