저는 현재 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의 직렬 포트에 액세스해야합니다.
감사합니다,
전체 스택 추적을 게시하면이 코드가 작동해야한다. 또한 UI 쓰레드에서'SerialPort'를 사용하고 있음을 올바르게 이해하고 있습니까 ('Application.DoEvents'는 이것을 제안합니다)? 그렇다면, 그렇게하지 말고, RS232 통신을 다루는 별도의 스레드를 시작하십시오. – skolima
[ 'ParityReplace' 지원이 아직 구현되지 않았을 수 있습니다.] (http://www.mono-project.com/HowToSystemIOPorts). – sarnold
어쩌면 조금 늦었습니다 :)하지만이 라이브러리를 보았습니까? https://github.com/raspberry-sharp/raspberry-sharp-io –