0

TcpListenerSocketNetworkStreamSerialPortクラスを使用する小さなサーバーコンポーネントを.NET 4.0で作成しました。これらはすべて、System.dllアセンブリ(v4.0.30319)にあります。

コマンドラインアプリケーションとして実行されるため、UI要件はありません。

現在Windowsで実行されており、私の現在の目標はLinuxで動作させることです。これを行う1つの方法は、Monoの最新バージョンを使用することです。誰かが私が注意すべきヒントや落とし穴を持っていますか?これは実行可能ですか?

どんな提案でも大歓迎です、ありがとう。

アプリケーションの構造:

  • TCPポートでクライアント接続をリッスンし、必要に応じて受け入れます。
  • メインループ:-
    • シリアルポートからデータフレームを読み取ります。
    • TCPを介してデータフレームをクライアントに転送します。
    • TCPを介してクライアントからさまざまなコマンドを受信し、必要に応じてそれらを実行します。

アップデート:

TcpListener、Socket、NetworkStream、TcpClient、SerialPortの基本機能のみを実装したスタブプログラムを移植しました。

これは、Monoによって呼び出されないSerialPortのDataReceivedイベントハンドラーを除けば正常に機能しました。解決策は、定期的にポートをポーリングすることでした。必要なもう1つの小さな変更は、シリアルポートの「ReceivedBytesThreshold」プロパティにアクセスしないことでした。これをモノラルに設定しようとすると、「サポートされていない機能」の例外がスローされます。

Ubuntu VM

ホスト(Win7)からゲストOSへのシリアルポートマッピングを含め、Ubuntu Desktop12.04のVirtualBoxVM内にインストールしました。これは、COM1を/ dev/ttyS0にマップするために正常に機能しました。最後に、結果のアプリケーションをスーパーユーザー(sudo)として実行する必要があります。そうしないと、実行時にシリアルポートのアクセス許可について文句を言います。

ラズベリーパイ

また、RPiのオンボードUART(GPIO経由)と通信するためのカスタム拡張ボードを作成したハードウェアエンジニアの助けを借りて、 RaspberryPiシングルボードコンピューターのMonoでこれを動作させました。実行する必要のあるOSは、RaspberryPiダウンロードセクションで入手できる「ソフトフロート」Debianディストリビューションです。apt-getパッケージマネージャーを使用すると、Monoを簡単にインストールできます。この場合のシリアルポート名は/dev/ttyAMA0です。

4

1 に答える 1

2

最も簡単な方法は、mono を使用してビルドし、実行されるかどうかを確認することです。Mono には互換性アナライザーもあり、コードを実行して潜在的な互換性の問題を確認できます。

かなり標準的なクラスを扱っていることを考えると、実際の問題はないように思えます。

于 2012-08-29T07:55:09.483 に答える