C# RFID 기능 코드 추가

sso·2024년 3월 13일
0

C#

목록 보기
8/8

RFID 기능을 추가하려면

  1. RFID API 기능을 우선 참조로 걸어줘야 한다.
  • using nesslab.reader.api;
  1. 전역변수(멤버변수)
  • private Reader reader;
  1. IP 고정 코드
    const string ipaddress = "192.1.1.1";
    
    reader = new Reader(ConnectType.Tcp);
    reader.ModelType = ModelType.NL_RF2200; --RFID 스캐너 모델명 입력
    reader.ReaderEvent += new ReaderEventHandler(OnReaderEvent);
    reader.ConnectSocket(ipaddress, 5578);
    
    Application.DoEvents();
  1. ReaderEventHandler 이벤트 추가
    private void OnReaderEvent(object sender, ReaderEventArgs e)
    {
        if (logger.IsErrorEnabled) logger.Info(System.Reflection.MethodBase.GetCurrentMethod().Name + " Start");
    
        try
        {
            if (this.InvokeRequired)
            {
                this.BeginInvoke(new ReaderEventHandler(OnReaderEvent), new object[] { sender, e });
                return;
            }
    
            string payload;
    
            switch (e.Kind)
            {
                case ReaderEventKind.Connected:
                    break;
    
                case ReaderEventKind.Disconnected:
                    break;
    
                case ReaderEventKind.timeout:
                    break;
    
                case ReaderEventKind.Version:
                    break;
    
                case ReaderEventKind.AntennaState:
    
                case ReaderEventKind.Power:
                    break;
    
                case ReaderEventKind.TagId:
    
                    payload = Encoding.ASCII.GetString(e.Payload);
                    string[] tagids = payload.Split(new string[] { "\r\n>" }, StringSplitOptions.RemoveEmptyEntries);
    
                    foreach (string tagid in tagids)
                    {
                        string epc = tagid.Substring(2);
    
                        string txt = string.Empty;
                        string hex = string.Empty;
                        if (reader.TagType == TagType.ISO18000_6C_GEN2)
                        {
                            int p = 4;
                            if (tagid.Length > p)
                            {
                                hex = epc.Substring(p, epc.Length - p);
                                txt = reader.MakeTextFromHex(hex);
                            }
                        }
    
                        string tag_code = "";
                        string serial_no = "";
                        fncRFIDConvert(hex, ref tag_code, ref serial_no);
                    }
                    break;
    
                case ReaderEventKind.GetTagMemory:
                    break;
    
                case ReaderEventKind.TagResponseCode:
                    break;
            }
        }
        catch (Exception ex)
        {
            logger.Error(ex);
    
            MessageBoxError(string.Empty, ex.Message);
        }
        finally
        {
            if (logger.IsInfoEnabled) logger.Info(System.Reflection.MethodBase.GetCurrentMethod().Name + " End");
        }
    }
  1. fncRFIDConvert 메서드 추가
    private bool fncRFIDConvert(string rfid_tag_hex, ref string ref_tag_code, ref string ref_serial_no)
    {
        if (logger.IsErrorEnabled) logger.Info(System.Reflection.MethodBase.GetCurrentMethod().Name + " Start");
    
        try
        {
            string str_value_hex = string.Empty;
    
            for (int i = 0; i < rfid_tag_hex.Length; i++)
            {
                int dec;
    
                dec = Convert.ToInt32(rfid_tag_hex.Substring(i, 1), 16);
    
                string binary_value = (Convert.ToString(dec, 2)).PadLeft(4, '0');
    
                str_value_hex = str_value_hex + binary_value;
            }
    
            string binary_com_no = str_value_hex.Substring(14, 24);
            string binary_good_no = str_value_hex.Substring(38, 20);
            string binary_serial_no = str_value_hex.Substring(58, 38);
    
            Int64 int_com_no = Convert.ToInt64(binary_com_no, 2);
            Int64 int_good_no = Convert.ToInt64(binary_good_no, 2);
            Int64 int_serial_no = Convert.ToInt64(binary_serial_no, 2);
    
            string str_com_no = (int_com_no.ToString()).PadLeft(7, '0');
            string str_good_no = (int_good_no.ToString()).PadLeft(6, '0');
            string str_serial_no = (int_serial_no.ToString()).PadLeft(12, '0');
    
            ref_tag_code = str_com_no + str_good_no;
            ref_serial_no = str_serial_no;
    
            if (string.IsNullOrEmpty(ref_tag_code) || string.IsNullOrEmpty(ref_serial_no))
            {
                return false;
            }
    
            return true;
        }
        catch (Exception ex)
        {
            logger.Error(ex);
    
            MessageBoxError(string.Empty, ex.Message);
    
            return false;
        }
        finally
        {
            if (logger.IsInfoEnabled) logger.Info(System.Reflection.MethodBase.GetCurrentMethod().Name + " End");
        }
    }
  1. RFID 스캔값을 통해 tag_code, serial_no를 뽑아와 사용할 수 있다.
    string rfid_hex = fncListToString(Barcode_Data, 0, Barcode_Data.Count - 2);
    
    string tag_code = "";
    string serial_no = "";
    
    if (fncRFIDConvert(rfid_hex, ref tag_code, ref serial_no))
    {
    	fncSearchRFID(tag_code, serial_no);
    }

6-1. RFID 코드는 스캔하면 303으로 시작하는데 이렇게 시작할 때 RFID 값으로 인식하고 데이터 처리를 할 수 있다.

profile
오늘도 하나씩 해결해 나가자!

0개의 댓글