我使用vs2005,使用一个串口类来接收数据,但是使用我的程序来接收最高为一直都为0,使用调试助手再运行我的程序,可以正确接收数据,请问高手这是哪里出了问题,是不是哪个参数没有设置正确???或其它什么问题,我想硬件是没有问题的,因为用调试助手能够正确收数。解决问题马上给分。

解决方案 »

  1.   

    用的是什么数据类型?Byte? Int?
      

  2.   

    我用的是网上的一个串口类
      public void Open()
            {            DCB dcbCommPort = new DCB();
                COMMTIMEOUTS ctoCommPort = new COMMTIMEOUTS();
                // OPEN THE COMM PORT.
                hComm = CreateFile("COM" + PortNum, GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0);            // IF THE PORT CANNOT BE OPENED, BAIL OUT.
                if (hComm == INVALID_HANDLE_VALUE)
                {
                    throw (new ApplicationException("Comm Port Can Not Be Opened"));
                }            // SET THE COMM TIMEOUTS.            GetCommTimeouts(hComm, ref ctoCommPort);
                ctoCommPort.ReadTotalTimeoutConstant = ReadTimeout;
                ctoCommPort.ReadTotalTimeoutMultiplier = 100;
                ctoCommPort.WriteTotalTimeoutMultiplier =100;
                ctoCommPort.WriteTotalTimeoutConstant = 100;
                ctoCommPort.ReadIntervalTimeout = 100;
                SetCommTimeouts(hComm, ref ctoCommPort);            
                // SET BAUD RATE, PARITY, WORD SIZE, AND STOP BITS.
                // THERE ARE OTHER WAYS OF DOING SETTING THESE BUT THIS IS THE EASIEST.
                // IF YOU WANT TO LATER ADD CODE FOR OTHER BAUD RATES, REMEMBER
                // THAT THE ARGUMENT FOR BuildCommDCB MUST BE A POINTER TO A STRING.
                // ALSO NOTE THAT BuildCommDCB() DEFAULTS TO NO HANDSHAKING.            dcbCommPort.DCBlength = Marshal.SizeOf(dcbCommPort);
                GetCommState(hComm, ref dcbCommPort);
                dcbCommPort.BaudRate = BaudRate;
                dcbCommPort.Parity = Parity;
                dcbCommPort.ByteSize = ByteSize;
                dcbCommPort.StopBits = StopBits;
                dcbCommPort.fParity = 0;
                dcbCommPort.fBinary = 1;
                dcbCommPort.fDtrControl = 0;
                dcbCommPort.fRtsControl = 0;
                dcbCommPort.fOutX = dcbCommPort.fInX = dcbCommPort.fTXContinueOnXoff = 0;
                SetCommState(hComm, ref dcbCommPort);
                PurgeComm(hComm, PURGE_RXCLEAR | PURGE_TXCLEAR | PURGE_RXABORT | PURGE_TXABORT);
                Opened = true;
                Thread th = new Thread( new ThreadStart( Execut ));
                th.Start();        }        private void Execut()
            {
                      while ( Done )
                     {
                            byte [] Buffer = this.Read( 128);
                            if ( Buffer.Length > 0 )
                             {
                                       OnReadEvent( Buffer );
                             }
                     }
            }        private void OnReadEvent( byte [] Buffer )
            {
                     if ( ReadEvent != null )
                    {
                              ReadEvent( this , Buffer );
                     }
            }        public void Close()
            {
                Done = false;
                if (hComm != INVALID_HANDLE_VALUE)
                {
                    CloseHandle(hComm);
                    Opened = false;
                }
            }        public byte[] Read(int NumBytes)
            {
                byte[] BufBytes;
                byte[] OutBytes;
                BufBytes = new byte[NumBytes];
                if (hComm != INVALID_HANDLE_VALUE)
                {
                    OVERLAPPED ovlCommPort = new OVERLAPPED();
                    ovlCommPort.Offset = 0;
                    ovlCommPort.OffsetHigh = 0;
                    int BytesRead = 0;
                    ReadFile(hComm, BufBytes, NumBytes, ref BytesRead, ref ovlCommPort);
                    OutBytes = new byte[BytesRead];
                    Array.Copy(BufBytes, OutBytes, BytesRead);
                }
                else
                {
                    throw (new ApplicationException("Comm Port Not Open"));
                }
                return OutBytes;
            }        public int Write(byte[] WriteBytes)
            {
                int BytesWritten = 0;
                if (hComm != INVALID_HANDLE_VALUE)
                {
                    OVERLAPPED ovlCommPort = new OVERLAPPED();
                    ovlCommPort.Offset = 0;
                    ovlCommPort.OffsetHigh = 0;                WriteFile(hComm, WriteBytes, WriteBytes.Length, ref BytesWritten, ref ovlCommPort);
                }
                else
                {
                    throw (new ApplicationException("Comm Port Not Open"));
                }
                return BytesWritten;
            }        public  string ByteToString(byte[] InBytes)
            {
                string StringOut = "";
                foreach (byte InByte in InBytes)
                {
                    StringOut = StringOut + String.Format("{0:X2} ", InByte);
                }
                return StringOut;
            }
            public static byte[] StringToByte(string InString)
            {
                string[] ByteStrings;
                ByteStrings = InString.Split(" ".ToCharArray());
                byte[] ByteOut;
                ByteOut = new byte[ByteStrings.Length - 1];
                for (int i = 0; i == ByteStrings.Length - 1; i++)
                {
                    //ByteOut[i] = ("0x" + ByteStrings[i]).ToByte();
                    ByteOut[i] = Byte.Parse(("0x" + ByteStrings[i]));
                }
                return ByteOut;
            }
      

  3.   

    有数据过来产生一个事件进行数据读取
           private void OnReadEvent( byte [] Buffer )
            {
                     if ( ReadEvent != null )
                    {
                              ReadEvent( this , Buffer );
                     }
            }