2012-09-05 11 views
1

마이크로 컨트롤러에서 RS232 DE9 직렬 포트로받은 데이터를 읽는 간단한 winform 응용 프로그램을 작성했습니다. 데이터의 전송시기를 제어해야하므로 RtsEnable 속성을 제어합니다. 프로그램 구조는 이와 비슷합니다.rtsenable이 예상대로 작동하지 않습니다.

byte[] data = new byte[serialPort1.BytesToRead]; 
serialport1.RtsEnable = true; 

private void serialPort1_DataReceived(object sender, 
System.IO.Ports.SerialDataReceivedEventArgs e) 
{ 
    serialPort1.Read(data, 0, data.Length); 
    serialport1.RtsEnable = false; 
    this.Invoke(new EventHandler(ProcessData)); 
    serialport1.RtsEnable = true; 
} 

이제는 문제가 간단합니다. RtsEnable이 처음 true로 설정되면 실제로 true로 설정되지 않습니다. 물론 디버깅 할 때 RtsEnable = true로 표시됩니다. 그러나 회로에서 전압을 확인할 때 RT는 여전히 높지 않습니다.

나는 serail 포트에서 전압 출력을 수동으로 점검 할 때 내 회로에 문제가 있다고 생각하지 않는다. 그래서, 그것은 내 코드로 무언가가되어야한다고 생각합니다.

이유는 무엇입니까? 미리 감사드립니다.

+0

RTS를 반복하고 활성화 및 비활성화하는 프로그램을 작성하는 경우 줄 전환이 표시됩니까? 종종 다른 장치에서 한 쪽에서 RTS를 CTS로 교차 연결하기 때문에 사람들은 RTS와 CTS를 혼동합니다. 또한 인 에이블이 고전압인지 또는 신호가 액티브 로우인지 확인할 수 있습니까? – TJD

+0

q1의 경우 데이터를 전송하지 않고 테스트를 수행했습니다. 따라서 data_received 이벤트가 아직 트리거되지 않고 RtsEnable이 true 여야합니다. 그래서, 아직 토글하지 않습니다. q2의 경우 직렬 포트에 대해 읽은 바에 따르면 포트가 열리면 RTS가 높게 나타납니다. 따라서, 높은 전압을 출력해야합니다. – Lihini

답변

-1

RtsEnable은 RTS를 설정하지 않고 설정 만 가능하게합니다. RTS (및 유사하게 DTR)를 설정 (Low로 설정)하려면 핸드 셰이크를 XonXoff로 설정해야합니다.

예 : 어떤 것이 낮은 유지하기 위해 타이머를 추가 할 수 있도록

private void btnReset_Click(object sender, EventArgs e) 
    { 
     comm.MycomPort.RtsEnable = true; 
     comm.MycomPort.Handshake = System.IO.Ports.Handshake.XOnXOff; 
     comm.MycomPort.RtsEnable = false; 
    } 

이 (당신이 MycomPort.DtrEnable를 사용하는 경우 또는 DTR)가 RTS 저를 끌어 순간 것 그것은, 사용할 때까지 낮은있을 것 지속.

+0

포트가 이미 열려 있으면 'DtrEnable' 또는'RtsEnable' *을 토글하여 핀이 즉시 변경됩니다. –

관련 문제