2011-12-19 2 views
2

Visual Studio 2010 express, WindowsFormsApplicationSerialPort 같은 입력 및 출력 버퍼?

내 응용 프로그램에는이 두 가지 코드가 있습니다. 첫 번째는 매초마다 직렬 포트에 데이터를 보내야합니다. 두 번째는 직렬 포트에서 데이터를 수신해야합니다. 현재로서는 시리얼 포트에 연결된 장치가 없습니다. 따라서 datarecieved 처리기가 절대로 트리거되어서는 안되며 데이터를 수신하지 않아야합니다. 제 문제는 첫 번째 코드에서 보낸 데이터를 받는다는 것입니다. 그것은 정상적인 행동입니까? 그 행동을 막을 수있는 방법이 있습니까? 직렬 포트에 장치를 연결하면 다른 것입니까?

private void timer1_Tick(object sender, EventArgs e) 
    { 
     serialPort.Write(dataToSend, 0, 1); 
    } 

private void datarecievedhandler(object sender, SerialDataReceivedEventArgs e) 
    { 
     serialPort.Read(dataToRead, 0, 1); 
     MessageBox.Show("Something is recieved!"); 
    } 
+0

무엇이'e.EventType'입니까? 아마도 EOF일까요? –

+0

미안하지만, 나는 아직도이 분야의 초보자이다. 나는 질문을 이해하지 못한다. – user1069738

+0

'datarecievedhandler'에서'SerialDataReceivedEventArgs e'를 얻는다; on 'e'는 이벤트를 이해하는 데 도움이되는 값인 e.EventType입니다. 단순히 ... 중단 점을 추가하면; 'e.EventType'은 무엇입니까? –

답변

1

먼저 장치가 장치와 통신하는 데 사용하는 프로토콜로 연결되어 있는지 테스트해야합니다.

예를 들어, "hello"를 보내고 ACK를 기다려보십시오. 시간 초과가 발생하면 장치가 연결되지 않은 것입니다.

장치가 "hello/ack"종류의 메시지를 지원하지 않으면 데이터를 읽은 다음 시간이 초과되었는지 확인하십시오.

+0

감사합니다 ... 장치가 연결되어 있는지 테스트 할 필요가 없습니다 ... 포트에 연결하지 않았기 때문에 아닙니다. 난 장치가 연결되어 있지 않으면 datarecieved 처리기를 절대로 제기해서는 안됩니다. 내가 맞습니까? – user1069738

2

포트에 아무 것도 연결되어 있지 않은 상태에서 에코가 발생하는 경우, 에코가 활성화 된 잘못된 포트 (예 : 블루투스 포트, 모뎀 또는 이와 유사한 포트)를 열었을 가능성이 가장 높음을 의미합니다 기본적으로.

Windows 제어판에서 장치 관리자를 열고 포트 아래를보고 올바른 COM 포트를 열 었는지 확인하십시오.

+0

고마워, 그게 문제가 ... 내가 장치를 연결하고 다른 포트를 열었을 때, 모든게 괜찮 았어;) – user1069738