問題タブ [serial-port]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
delphi - 使用する単純な将来性のあるDelphiシリアル通信コードはどれですか?
私は何年もの間TurbopowerAsyncProのファンでしたが、今ではSourceForgeに取り上げられており、非常にうまく機能しています。ただし、これは複雑であり、ポートコンポーネント以外の機能を実際に使用したことはありません。D2009などのコードを更新していますが、独自のラッパーがあるため、もっと単純なものに移行したいと思っています。そこにはたくさんのポートコンポーネントがありますが、ここに推奨事項はありますか?ありがとう。
.net - wmi .netでシリアルポートを設定しますか?
多くのシステムでCOM9以降でプラグアンドプレイできるUSBシリアルアダプターを持っています。ソフトウェアで使用しているサードパーティのパッケージは、COM8までしか接続できません。WMIなどを使用してCOM9を下位ポートに設定する方法はありますか?デバイスマネージャのポート設定ダイアログでこれを実行できることはわかっていますが、エンドユーザーのソフトウェアでサイレントに実行できれば、エンドユーザーにとっては簡単です。
.net - 複数のプラットフォーム用の Mono のシリアル ポート (rs232)
Win32 アプリケーション (ネイティブ C++) を .NET で書き直すことを計画しています。おそらく mono を使用しているため、Win32、Linux、および Mac で実行できます。私が解決しようとしている問題 (実際には Win32 用にしか開発されていません) は、シリアル ポートの定義に関する問題です。実行可能ファイルが 1 つしかないと想定されている場合、通常、プラットフォームの違いをどのように識別しますか。具体的には、COM ポートは Windows では COM1 など (\.\COM) として識別されますが、Linux では /dev/ttyS0 などとして指定されます。
この情報について、実行時にプラットフォームをチェックしますか?
唯一の違いは、ポートの開閉だけだと思います。読み書きは同じです。
おそらくこれは、モノ/.NET のプラットフォーム固有のものに適用されるという点で、より一般的な質問です。
これをどのように処理しますか?一部の文字列リソースまたは構成ファイルで、またはランタイム プラットフォームに基づいてハードコーディングおよびスイッチしますか?
このためのコードサンプルはありますか? 私は C++ 開発者であり、.NET で使用できるすべてのクラスに精通しているわけではありません。CLR からシリアル ポートの命名スキームを取得する方法はありますか、または CLR から OS/プラットフォームを取得する方法はありますか?
CLR がシリアル ポートをより独立した方法で提供できればよかったのにと思います。多分それは不可能です。
ありがとう、ティム
編集
これまでの 1 つの応答を考えると、最初に SerialPort.GetPortNames() 列挙を試して、それが機能するかどうかを確認する必要があると思います。(両方のプラットフォームで)
より高いポート番号と USB ドングルの win32 では、基本的な COM ポートの列挙ほど単純ではありません。
ここで調査結果を報告します。
.net - Mono でシリアル ポートの「わかりやすい」名前を取得し、それをクロス プラットフォームに保つにはどうすればよいですか
私はこの質問をしました:
複数のプラットフォーム用の Mono のシリアル ポート (rs232)
これは関連しています:
WindowsでCOMポートのフレンドリ名を取得するにはどうすればよいですか?
しかし、Windowsで「わかりやすい」名前を取得できるようにしたいと考えています。そのようなことがあれば、Linux / macでも可能です。
それを行うためのクロスプラットフォームの方法はありますか、それとも運が悪いのでしょうか?
これが私の現在のアプリで行っていることです-ネイティブC ++ win32でうまく機能します。
http://www.naughter.com/enumser.html
いずれにせよ、これはクロスプラットフォーム配布の適切なソリューションには見えません。誰か提案はありますか?
編集 - 人々は私が求めていることを理解するのに苦労しているため: 例として - COM9 はフレンドリ名ではありません。「COM9 - USBコネクタ」みたいなのが欲しいです。これは、Win32 の上記のリンクで可能です。これは厄介でハックですが、「COMn」よりも便利な名前がない限り、多くの場合、エンド ユーザーは自分のプログラムでどの COM ポートを開く必要があるかわかりません。
java - シリアルポートを使用するCANopen PDO
CANopen プロトコルを理解しようとしています。
今のところ、実験する CAN ハードウェアも CANopen スタックもありません。
RS-232 ポートで受信した CANopen メッセージを単純に解釈する Java プログラムの書き方を知りたいです。
- シリアルポートとしてインストールされている CAN インターフェイスはありますか?
- CANopen メッセージを処理するプログラムを作成できますか? メッセージを受信して解釈できるようにしたいだけです。入力ストリーム用のバッファを作成し、SOF と EOF に従って送信を個別のメッセージに分割するのと同じくらい簡単ですか? SOF/EOF の長さは 1 ビットしかないため、どうすれば SOF/EOF を知ることができますか?
- CAN ノードの PDO の数に制限があるのはなぜですか?
- PDO を処理して、送信元のノードとデータ型および値を識別するにはどうすればよいですか? PDO は標準の CAN フレームですか?
c# - COM ポートのロックを解除する方法
別のアプリケーションの後に動作する必要があるアプリケーションがあります。この 2 番目のアプリケーションには、特定の状況で COM ポートが閉じられないというバグがあります。
アプリケーションでプログラムによってすべての COM ポートを閉じて、ポートを閉じることに関するバグが報告されないようにしたいと考えています。COM ポートを開いたオブジェクトを所有していない場合は可能ですか?
.NET Framework、C# のソリューションが必要です。
windows - シリアルポート、「全二重」フロー制御と同等?
シリアル ポートを介したデバイスへの接続情報を含むドキュメントがあります。フロー制御の設定として「全二重」を指定します。Windows では、フロー制御をセットアップするための次のオプションがあります。
- Xon/Xoff
- ハードウェア
- なし
上記のリストの「全二重」に相当するものは何ですか?
c# - .NET / C# で堅牢な SerialPort プログラミングを行うには?
シリアル磁気ストライプ リーダーおよびリレー ボード (アクセス制御システム) と通信するための Windows サービスを作成しています。
別のプログラムが自分のサービスと同じシリアル ポートを開いてプロセスを「中断」した後、コードが動作しなくなる (IOExceptions が発生する) 問題が発生します。
コードの一部は次のとおりです。
私のサンプル プログラムは正常にワーク スレッドを開始し、DTR の開閉と上昇により、Mag-stripe リーダーが起動 (1 秒待機)、シャットダウン (1 秒待機) などします。
HyperTerminal を起動して同じ COM ポートに接続すると、HyperTerminal はポートが現在使用中であることを通知します。ハイパーターミナルで ENTER を繰り返し押して、ポートを再度開いてみると、数回再試行すると成功します。
これにより、作業スレッドで IOExceptions が発生する効果があり、これは予想どおりです。ただし、HyperTerminal を閉じても、ワークスレッドで同じ IOException が発生します。唯一の解決策は、実際にコンピューターを再起動することです。
他のプログラム (ポート アクセスに .NET ライブラリを使用していないプログラム) は、この時点では正常に動作しているようです。
これを引き起こしている原因についてのアイデアはありますか?
boost - asio を使用してノンブロッキング読み取りを実行するにはどうすればよいですか?
boost::asio を使用して、シリアル ポート上のデバイスから読み書きしようとしています。読み取るものが何もない場合は、boost::asio:read() と boost::asio::serial_port::read_some() の両方がブロックされます。代わりに、この状態を検出し、ポートにコマンドを書き込んでデバイスをキックスタートさせたいと考えています。
利用可能なデータがないことをどのように検出できますか?
必要に応じて、すべてを非同期で行うことができます。できれば、余分な複雑さを避けたいだけです。
c# - シリアル/ハイパーターミナルとC#の統合をテストする方法は?
USBスケールのボタンを押すと、USB経由でシリアル通信を送信するソフトウェアを開発する必要があります。ハイパーターミナルで値を確認できます。
シリアル通信に.NETクラスを使用して、データをトラップします。
問題は、私には体重計がないということです。スケールは、RDPで接続できるリモートコンピューターに接続されています。テストしたいときは、スケールのボタンを押すようにクライアントに依頼することができます。
クライアントに1日に100回ボタンを押すように頼むことはできません。スケールが何を報告するかについてかなり良い考えを持って開発する方法が必要であり、解決策があると思うときにのみテストします。
スケールを模倣して、スケールと同じ出力である.NETシリアルクラスに送信できるものをローカルで探しています。理想的には、スケールのデータを記録してから、別のマシンで再生できれば完璧です。
どうすればいいですか?