2011-07-01 2 views
2

저는 현재 Mono 개발을 위해 Delphi Prism을 사용하고 있습니다. 따라서 소프트웨어는 주로 Linux OS에서 실행되는 크로스 플랫폼이 될 수 있습니다. 시작하려면 필자는 소프트웨어의 기본 기능인 직렬 및 네트워크 통신을 구현하고 테스트 해 왔습니다.리눅스에서의 시리얼 통신 (RS232)

하지만 Mono에 대한 직렬 통신 구현을 전달할 수없는 것 같습니다. 그것은 인터넷이나 Stackoverflow 검색 후 리눅스 환경을 지원하는 라이브러리 또는 .NET 프레임 워크가없는 것 같습니다. Stackoverflow에서 다른 사람들이 물어 본 비슷한 질문이 있지만 답변에는 실제로 샘플이 표시되지 않습니다. 나는 꼼짝 못한다.

다음은 모노 직렬 통신을 위해 작성한 코드입니다. 이 웹 사이트를 방문한 후

{$IFDEF LINUX} 
    if SerialPort1 = nil then 
     SerialPort1 := new System.Io.Ports.SerialPort(); 
    SerialPort1.Close; 

    SerialPort1.BaudRate:=19200; 
    SerialPort1.DataBits:=8; 
    SerialPort1.DtrEnable:=true; 
    SerialPort1.Parity:=System.IO.Ports.Parity.Even; 
    SerialPort1.PortName:="/dev/ttyS0"; 
    SerialPort1.ParityReplace:=63; 
    SerialPort1.ReadBufferSize:=4096; 
    SerialPort1.ReadTimeout:=1000; 
    SerialPort1.RtsEnable:=true; 
    SerialPort1.StopBits:=System.IO.Ports.StopBits.One; 
    SerialPort1.WriteTimeout:=1000; 
    SerialPort1.Open; 

    while (true) do 
    begin 
     CommByte[0]:=$FF; 
     CommByte[1]:=$04; 
     CommByte[2]:=$04; 
     CommByte[3]:=thechannel; 
     CommByte[4]:=mcommand; 
     CommByte[5]:=(CommByte[2] xor CommByte[3] xor CommByte[4]); 

     SerialPort1.Write(CommByte,0,6); 
     while SerialPort1.BytesToWrite>0 do; 
     Thread.Sleep(10); 
     Application.DoEvents; 
    end; 
{$ENDIF} 

하지만 매번 내가 리눅스에서이 코드를 실행은 모노와 함께 메시지 상자를 제기 "요청 된 기능이 구현되지 않았습니다." 이유를 이해할 수 없습니다. 모노도 할 수 있습니까?

RS232 통신을 위해 Linux의 직렬 포트에 액세스해야합니다.

감사합니다,

+0

전체 스택 추적을 게시하면이 코드가 작동해야한다. 또한 UI 쓰레드에서'SerialPort'를 사용하고 있음을 올바르게 이해하고 있습니까 ('Application.DoEvents'는 이것을 제안합니다)? 그렇다면, 그렇게하지 말고, RS232 통신을 다루는 별도의 스레드를 시작하십시오. – skolima

+0

[ 'ParityReplace' 지원이 아직 구현되지 않았을 수 있습니다.] (http://www.mono-project.com/HowToSystemIOPorts). – sarnold

+0

어쩌면 조금 늦었습니다 :)하지만이 라이브러리를 보았습니까? https://github.com/raspberry-sharp/raspberry-sharp-io –

답변

4

속성 ParityReplace는 현재 구현되지 않았다. 실제로 필요하지 않은 경우 던져 버리면 아마이 예외가 발생하지 않습니다. 그리고 필요한 경우 PARMRK을 사용하고이 바이트로 표시를 변경하면 가능할 수 있습니다. 그러나 나는 단위 테스트 방법을 찾아야한다.)