2013-12-22 5 views
0

최근에 나는 C#에서 SerialPort 클래스를 사용하여 직렬 포트에서 데이터를 읽고 연결하려고한다. Hundura에서 RTA600이라는 시간 출석 기계가 있습니다. 직렬 - USB 변환기를 통해 내 PC에 연결됩니다. 코드는 다음과 같이 테스트했습니다.시리얼 포트 프로그래밍 도움말 C#

SerialPort serialPort1 = new SerialPort();  
serialPort1.PortName = "COM1"; 
serialPort1.BaudRate = 9600; 
serialPort1.Parity = System.IO.Ports.Parity.None; 
serialPort1.DataBits = 8; 
serialPort1.StopBits = System.IO.Ports.StopBits.One; 
serialPort1.Handshake = System.IO.Ports.Handshake.None; 
serialPort1.RtsEnable = true; 

// Open the Serial Port 
serialPort1.Open(); 

// Read Data from Serial port 
string RXstring = serialPort1.ReadLine(); 

System.Io.Ports 네임 스페이스의 SerialPort 클래스를 사용합니다. 그러나 serialPort1.ReadLine()이 실행되면 코드가 중단됩니다. 어떤 사람들은 저에게 직렬 - USB 변환기를 통해 타임머신으로부터 데이터를 읽을 수있는 방법을 줄 수 있습니까?

+0

'ReadLine' 문은 장치에서 개행이 수신 될 때까지 코드. 아래 답변에서 제안 된 것처럼 대신'DataReceived' 이벤트를 사용하십시오. – nicholas

답변

0

ReadExisting()을 사용하면 한 번에 전체 데이터를 읽을 수 있습니다. 내가 데이터를 읽기 위해 당신에게 코드를 보여 드리고자합니다을 여기에있다 (RFID 태그 코드 :

private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) 
     { 
      String myData=serialPort1.ReadExisting(); 
     } 

예제 코드 : 당신은 SerialPort

serialPort1.ReadExisting(); 

샘플의 DataReceived 이벤트를 처리 할 필요가 기본적으로 길이가 12 임)

 String macid = ""; 
     private void DoWork() 
     { 
      Invoke(
        new SetTextDeleg(machineExe), 
        new object[] { macid }); 
      macid = ""; 
     } 
     private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) 
     { 

      string str1; 
      macid += serialPort1.ReadExisting(); 

      if (macid.Length == 12) 
      { 
       macid = macid.Substring(0, 10); 
       Thread t = new Thread(new ThreadStart(DoWork)); 
       t.Start(); 
      } 
     } 

     public void machineExe(string text) 
      { 
      TextBox1.Text=text; 
      }