2011-07-01 44 views
2

現在、私はMono開発用にDelphi Prismを使用しています。したがって、ソフトウェアは主にLinux OS上で動作するクロスプラットフォームにすることができます。はじめに、私は、ソフトウェアの基本機能(シリアル通信とネットワーク通信)の実行とテストを行ってきました。LINUXでのシリアル通信(RS232)

しかし、私はMonoのシリアル通信の実装を渡すことはできません。それはインターネットやStackoverflowを検索した後、Linux環境をサポートするライブラリや.NETフレームワークがないようです。 Stackoverflowで他の人から聞いた同様の質問がいくつかありますが、答えは実際にはサンプルを表示していません。私はこだわっています。

ここに私がモノシリアル通信用に書いたコードがあります。この1つのウェブサイトを訪問した後。

{$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} 

しかし、このコードをLinuxで実行するたびに、Monoは「要求された機能が実装されていません」というメッセージボックスを表示します。なぜ私は理解できません。モノでもこれは可能ですか?

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を使ってこのバイトに印を変えることができます。しかし、私はどのようにユニットテストするかというアイデアを見つける必要があります;)

関連する問題