TcpListener、Socket、NetworkStream、SerialPortクラスを使用する小さなサーバーコンポーネントを.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です。