問題タブ [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.
python - Python 用 XMODEM
XMODEM を使用してセンサー デバイスからデータを転送する必要があるプログラムを作成しています。独自の XMODEM コードを作成する必要がないようにしたいので、python XMODEM モジュールがどこかで利用できるかどうか誰かが知っているかどうか疑問に思っていましたか?
c - 非常にメモリに制約のある組み込みシステムで大規模なデータ転送をどのように処理しますか?
PC シリアル ポート (115200 ボー) から大きなファイルをダウンロードし、SPI (~2 MHz) 経由でシリアル フラッシュ メモリに書き込む必要があるマイクロコントローラーがあります。フラッシュ書き込みは、書き込みコマンドとページ アドレスが先行する 256 バイト ブロック内にある必要があります。システムで使用可能な RAM の合計は 1 kB で、スタック サイズは 80 バイトです。
これは現在、UART から 256 バイト バッファを埋めてから、別の 256 バイト バッファにピンポンすることで機能しており、フラッシュがビジー書き込みで書き込まれている間に、RX バッファ準備完了信号の割り込みによって埋められています。バッファのスワッピングは、操作が完了するまで繰り返されます。
個別の循環バッファーで動作する SPI ポートと UART ポートの両方に TX/RX 割り込みハンドラーをセットアップすることをお勧めします。したがって、新しいバイトをポーリングして操作が完了するのを待つ代わりに、単純に TX バッファーを埋めて割り込みを有効にするか、着信データのバッファーをチェックすることができます。これにより、周辺機器を待機する代わりに、実際の作業により多くのクロック サイクルが提供されます。
128 バイトの循環バッファーを使用して IRQ を実装した後、UART RX バッファーでデータをポーリングし、すぐにそれを SPI TX バッファーに配置してファイル転送を行います。このアプローチで私が抱えている問題は、バッファ用に十分な RAM がなく、データをフラッシュ送信バッファに転送するよりも早く PC 受信バッファがいっぱいになることです。明らかに、転送速度は問題ではありません (入力 115.2 kHz、出力 2 MHz) が、256 バイトのページが送信されるたびに書き込みサイクルの待機が発生します。
頻繁な SPI 割り込みが UART 割り込みの一部をブロックし、バイトが失われているようです。私が選択した解決策は、UART 受信割り込みにリング バッファーを使用し、データを 256 バイトのページ バッファーにフィードすることでした。このページ バッファーは、バイト転送と書き込み完了をポーリングすることによってシリアル フラッシュに送信されます。128 リング バッファは、SPI 書き込み中のオーバーフローを防ぐのに十分な大きさです。
terminal - カスタムシリアル端末
シリアル ポート ターミナルが組み込まれたカスタム アプリケーションを開発しようとしていますが、ターミナルを一時停止して、カスタム コマンドおよびデータ形式で I/O を実行できます。
たとえば、[データの取得] ボタンをクリックすると、ソフトウェアはバイナリ コマンドを送信し、代わりにバイナリ データを取得して、そのデータを処理します。そして、端末はこのトランザクションをすべて無視します。
先ほど学んだように、/dev/ttyxx に対して write() を行ったり、そこから read() を行ったりするだけでは、適切な端末接続には十分ではありません。
アプリケーションに単純な端末を含める最も簡単な方法は何ですか? 外部端末アプリケーションを使用したくありません。現在、cutecom のソース コードをゼロから実装するための調査を行っていますが、もっと簡単な方法があるかもしれません。
注: xmodem/ymodem ソフトウェアを使用するような薄い方法を提案しないでください。カスタム コマンドを使用する必要があります。
visual-c++ - VC++でのシリアルポート通信
シリアルポート経由でデータを読み取る場合
とはBSTR k;
どういう意味k=data.bstrVal
ですか? とはbstrVal
?
serial-port - シリアル ポート通信を処理するための設計パターンはありますか?
コントロールパネルだけでなく、シリアルポートを介してハードウェアパラメータを変更できる新しい切削工具をいくつか使用しています。
ハードウェアのパラメータが変更されると、ハードウェアはそれ自体を再構成するのに数秒かかり、使用できる状態になったことを通知します。
これ以前のセットアップでは、オペレータがカット プレートまたはパーツ コマンドをクリックする必要がありました。ソフトウェアはダイアログを表示し、オペレーターがモーション関連 (速度、遅延など) を変更できるようにし、ハードウェアの構成を表示します。オペレーターがすべてを確認した後、[OK] をクリックすると、マシンが切断を開始します。
新しいハードウェアの場合、送信した変更がある場合は現在の構成を引き出し、ハードウェアの準備ができているかどうかを示すインジケーターと共に新しい構成を示すダイアログを表示します。すべてがシリアル ポート経由で自動化されているわけではないため、オペレータが [OK] をクリックするまでダイアログが表示されたままになることがあります。それ以外の場合は、ハードウェアが正しいことを通知したときに、それ自体をアンロードできます。
私の問題 (および質問) は、シリアル ポートを介してこれを行うと、非常に遅いことです。また、この種の作業を行ったのは初めてです。全体の応答性を高めるための解決策が欠けているのではないかと心配しています。サードパーティから切断ハードウェアを購入するため、シリアルの代わりに使用するオプションはありません。
私がやりたいもう 1 つのことは、ステータス ダイアログを表示し、シリアル通信がシステムの残りの部分を動かなくすることなく実行したままにするオプションを用意することです。
Win32 API または .NET に関するヒントを探しています。
winapi - Windows API を使用してヌル文字をシリアル ポートに送信するにはどうすればよいですか?
標準の COM ポートを使用していくつかのカスタム ハードウェアと通信する Windows ユーティリティ プログラムに取り組んでいます。通信プロトコル (制御不能) では、生の 8 ビット データ バイトを送受信する必要があります。
現在、次の Windows API 関数を使用して COM ポートにデータを送信しています。
ここhFile
で、 は適切に開かれた COM ポートへの参照でありlpBuffer
、メモリに保存したバイトの配列です。null 文字 (ASCII ゼロ) をデバイスに送信する必要があるまで、コードは完全に機能します。WriteFile
ヌル文字を検出するとすぐに送信を停止します。これは、文字列の末尾に到達したと見なされるためです。numberOfBytesToWrite
これは、適切に設定しても発生します。
Windows API を使用して生データを COM ポートに送信するにはどうすればよいですか? のような標準の API 呼び出しを使用したいとWriteFile
思いますが、提案は受け付けています。
私は現在RapidQを使用してユーティリティを構築していますが、Windows API 関数を直接呼び出すだけです。
編集:私のセットアップは、シリアルポートを介してカスタムハードウェアモジュールに接続されたWindows PCで構成されています。モジュールには、送信された文字を表示できる小さな画面があります。このセットアップを別のサードパーティ ユーティリティ プログラムでテストしました。このサードパーティ プログラムを使用してモジュールと通信でき、ヌル文字が正しく表示されます。私自身のプログラムで を使用するWriteFile
と、送信ストリームのどこかにヌル文字があると、残りのストリームが送信されなくなります。
java - Javaでのシリアルポートパラメータの意味?
私はJavaの初心者です。シリアルポートからデータを読み取っています。私は得た
9600
、DATABITS_8,STOPBITS_1
およびの意味は何PARITY_NONE
ですか?
c# - C#での極表示の問題
POS c# アプリケーションでポール ディスプレイ (E POS) を使用しました。これには 2 つの大きな問題があります。1. ディスプレイを完全にクリアできません。2. カーソル位置を設定できません。
コード:-
windows-vista - Vista でロックされたシリアル ポート
私はシリアル ポートと通信するアプリに取り組んでおり、私の開発マシンでは Vista を実行しており、そのシリアル ポートは Bluetooth 接続です。時折、シリアル ポートが、アプリケーションが接続できなくなる状態に陥ります。.net では、「要素が見つかりません」というメッセージを含む IOException が発生します。
アプリを再起動して、他のアプリ (HyperTerm などの通信クライアント) に接続しようとしましたが、何も役に立ちません。これ以上具体的なエラー メッセージが見つからず、マシンのイベント ログに何も記録されません。デバイス マネージャは、ポートが「正常に動作している」ことを示しています。
どのプロセスや .dll がシリアル ポートを所有しているかを調べたり、ポートを強制的に閉じたりする方法はありますか?
違いがある場合、私のアプリは C# ですが、構造上、"using" ステートメントでポートを開閉するのは便利ではありません。
ありがとう、アンディ
serial-port - POSIX で半二重シリアル ポートにアクセスする
POSIX 呼び出し (より具体的には、Linux 2.6.x で C で記述) を使用して、半二重シリアル接続から読み書きするように求められます。その特定のモデルに関する詳細な情報を見つけるのに少し苦労しています (ほとんどのページは全二重に集中しています)。読むときに少し異常があるので、ここで何か間違ったことをしている可能性があるかどうかを確認したいと思いました。
半二重シリアル接続では、読み書きしかできません。これは問題ではありません。なぜなら、要求されていない受信データが回線上にないからです。パッケージが (読み取りのために) 私に送られるのは、事前に要求したときだけです。
したがって、私のコードは、何かを送信する必要があるたびにポートに write() することです。このデータが応答になる場合 (事前にわかっていること)、単純に read() します。私が呼び出している特別な関数はありませんが、そうすべきでしょうか? そして、このアプローチは正しいですか?すなわち、行が空いているときに書く?