2014-09-03 4 views
3

SerialPort.Write (String)를 사용하여 직렬 포트에 문자열을 쓰려고합니다. 지금까지 나는 그것을 따라 해보겠습니다SerialPort.Write (String)를 사용하여 직렬 포트에 문자열을 쓰는 방법

생성자에서 직렬 포트 객체를 인스턴스화합니다. EDIT : 포트 매개 변수를 설정하면 문제가 해결되었습니다.

public CSerialPort() 
{ 
    this._serialPort = new SerialPort("COM6",1200,Parity.None,8,StopBits.One); 
    this._serialPort.DataReceived += OnSerialPortDataReceived; 
} 

나는 포트를 엽니 다

public void OpenSerialPort() 
{ 
    try 
    { 
     _logger.DebugFormat("Trying to open Serial Port: {0}", this._serialPort.PortName); 
     this._serialPort.Open(); 
     this.PortIsOpen = true; 
    } 
    catch (UnauthorizedAccessException ex) 
    { 
     _logger.DebugFormat("Trying to open Serial Port: {0}", ex); 
    } 
    catch (ArgumentOutOfRangeException ex) 
    { 
     _logger.DebugFormat("Trying to open Serial Port: {0}", ex); 
    } 
    catch (ArgumentException ex) 
    { 
     _logger.DebugFormat("Trying to open Serial Port: {0}", ex); 
    } 
    catch (InvalidOperationException ex) 
    { 
     _logger.DebugFormat("Trying to open Serial Port: {0}", ex); 
    } 
} 

을 그리고 난 직렬 포트를 통해 문자열의 내용을 보내려고 : 문자열의 내용 인 경우

public void WriteToSerialPort(string writeBuffer) 
{ 
    this._serialPort.Write(writeBuffer); 
} 

:

this._serialPort.WriteToSerialPort("ABC"); 

내 문제는 수신자가 (직렬 포트 모니터링 소프트웨어가있는 다른 PC) "ABC"를받지 못합니다. 내가받는 것은 ASCII 문자 코드 254 인 "þ"입니다.

인코딩 속성을 사용 가능한 모든 인코딩으로 변경하려고 시도했지만 도움이되지 않았습니다.

누구나 직렬 포트 클래스를 사용하여 직렬 포트에 문자열을 보내려면 무엇을 할 수 있습니까? 나는 무엇을 놓치거나 잘못 이해 했습니까? 사용

+0

다른쪽에 예상되는 문자열의 종류를 정의해야합니다 (ASCII 문자열 등). 끝에는 null이 포함되거나 그렇지 않습니다. 코드에 전송 속도와 같은 포트 설정이 없습니다. 다른 포트가 다른 포트 매개 변수로 작동하면 결과는 정의되지 않습니다. –

+0

Alex, 다른 쪽은 ASCII 문자열이 필요하거나/기다리고 있습니다. 매개 변수를 설정하고 시도해 보겠습니다. THX – ck84vi

+0

문자열 인코딩 설정에 의존하지 않는'SerialPort.Write (Byte [], Ini32, Int32)'오버로드를 사용하는 것이 더 좋습니다. 다른 측면 요구 사항에 따라 바이트 배열을 준비하십시오. –

답변

3

봅니다 :

당신은 또한 연결의 양쪽에 BAUD 속도을 확인 할 수 있습니다
byte[] MyMessage = System.Text.Encoding.UTF8.getBytes(yourString); 

MySerialPort.Write(MyMessage,0,MyMessage.Length); 

(이것들은 동일합니다).

관련 문제