티스토리 뷰

728x90
반응형

 

        int byte_int = 0;
        byte[] rcvByteFinal = new byte[10];  // RF카드 10자리 Byte 세팅
        private void serial_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            try
            {

                if (!serial.IsOpen) return; // serial 오픈 확인.

                int bytes = serial.BytesToRead;
                byte[] buffer = new byte[bytes];
                byte[] rcvByte = new byte[bytes];

                serial.Read(buffer, 0, bytes);

                Array.Copy(buffer, 0, rcvByte, 0, bytes);
               // buffer 0 위치부터 bytes 길이만큼 rcvByte 0~bytes에 복사한다.

                Array.Clear(buffer, 0, bytes); // buffer 초기화

                Array.Copy(rcvByte, 0, rcvByteFinal, byte_int, bytes); // rcvByteFinal에 넣고 또 놓고. 10자리까지 누적

                byte_int += bytes;  // 누적 Byte Length


                for (int i = 0; i < bytes; i++) //메인 루프
                {

                    if (rcvByte[i] == 0x03) // ETX 종료 Byte를 찾는다.
                    {
                        if (rcvByteFinal != null) 
                        {
                            RcvText(rcvByteFinal); // 10자리 RF카드 번호를 모두 받아 왔으니 이제 카드번호를 처리한다.
                            rcvByteFinal = null; //초기화
                            rcvByteFinal = new byte[10]; // RF카드번호 10자리 세팅
                            byte_int = 0; // 누적 byte Length 초기화
                        }
                    }
                }
                Array.Clear(rcvByte, 0, bytes);  // rcvByte 초기화


            }
            catch (Exception Ex)
            {
                MessageBox.Show(Ex.Message);
            }

        }

반응형
댓글