問題タブ [serial-communication]
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.
java - シリアルモニターとJavaで同時にArduinoを読み取る
Arduinoボードと通信するためのコードをJavaで記述しました。それはうまくいきます。また、シリアルモニターを使用してArduinoボードと通信することもできます。
しかし、Javaプログラムの実行中にシリアルモニターを開こうとすると(ボードに接続されているポート、PORT 32をリッスンしている)、次のように表示されません。
Serial port 'COM 32' already in use. Try quitting any programs that may be using it.
これは完全なメッセージです(完全を期すために)
ええ、私は知っています、そのポートを使用している私のJavaプログラム。しかし、それは、PORT32にアクセスするために両方のプログラムを同時に使用できないことを意味しますか?
誰かが私にこれを回避する方法を教えてくれることを願っています。どんな助けでも大歓迎です。ありがとう!
protocols - CAN通信に関する質問
私がレビューしているuCLinuxのCANドライバーを持っているので、私はこの道を歩み始めました。私は一般的にCANに慣れていないので、それについて少し調査していましたが、答えが見つからない質問に出くわしました。
CAN がシリアル インターフェイスであり、CANopenに「バス マスター」がない場合、CAN プロトコルはバス上の避けられないデータの衝突をどのように処理するのでしょうか? いつ送信できるかを管理する人がいない場合、十分なデバイスと時間が与えられた場合、衝突する送信が必要になります。
これはかなり基本的な質問なので、答えを見つけたのに理解できなかった可能性があります...誰かが答え/例を提供できれば素晴らしいでしょう。
c++ - シリアルプログラミング RS485
RS485 2 線式システムを介した ModBus プロトコルの実装を任されています。(実際には、A/B と GND の 3 本のワイヤです)。ModBus は要点ではありませんが、その前のステップです... インターフェイスを介した単純な I/O です。
FTDI USB-RS485 コンバーターを使用して、Linux ホスト (交換不可) を Windows ホスト (別の Linux ホストと交換可能ですが、それは避けたいと思います) に接続しています。
エンコーディングは 19200, 8, n, 1 のはずですが、うまくいかないようです。
手元に正確なコードはありませんが、Linux では次のようにしています。
次に、ポートを構成します。
パリティとフロー制御は現在計画されていません。最終結果が低レベルのボードに接続され、そこで信号を自分で処理する必要があるためです。さらに、「自由な通信」を可能にするワイヤーはありません。(結局のところ、送信できるバイト範囲を XON/XOFF 文字で制限したくありません)
これらの機能はすべて正常に実行され、データが設定されます。
Windows では、次のようにシリアル ポートを開きます。
フロー制御だけでなく、パリティも無効になっています。バイトサイズは 8 に設定されています。
編集:尋ねられたので、これがWindowsのボーレートのコードです(メモリから)SP.DCBlength = sizeof(SP); SP.BaudRate = 19200; SP.Parity = NOPARITY; SP.StopBits = ONESTOPBIT; SetCommState(hSerial, &SP);
繰り返しますが、これらの機能はすべて問題なく実行されます。
さて、私に大きな頭痛の種を与えているテストケースについて。
Linux ホストで、256 バイト サイズのバイト バッファーを作成します。このバッファは 0 から 255 までの文字値で満たされます...そして、書き込みでネットワーク経由で送信されます。同時に、相手側は「ReadFile」でデータが到着するのを待っています。
この構成では、「他の Linux ホスト」と Windows ホストの両方で 256 バイトが到着します...ただし、0 ~ 255 の数字ではなく、00 06 などです。
実際に必要なオプションを設定する前に、termios 構造体のすべてのメンバーを 0 に設定すると、Linuxhost を機能させることができます。たぶん、制御文字が原因だと思いますが、そうすると、Windows ホストは 256 バイトのうち 4 つしか受け取りません。
私が言ったように、残念ながら私はコードを手元に持っていません。どの時点からこれに取り組むことができるか誰かが知っていれば、とても感謝しています. 再びアクセスできるようになったら、さらにコードを投稿します。
読み取り操作の実装方法:
タイムアウトを設定しましたが、正確な値を思い出せません。
編集:職場に再びアクセスできるようになったので、実際の(現在の)コードを次に示します。
}
実際の送受信コードは次のとおりです。
}
オシロスコープに関しては、送信で両方向をテストしました。どちらも非常に見事に仕事をしました。
0x55 の信号は、50 マイクロ秒の長さで一定の Up/Down です (当然のことながら、ボーレートの設定も問題ありません)。
私の「受信」コードに間違っているものはありますか?「選択」は間違っていますか?
serial-port - シリアルポート-デバイスのセーフサーチを実行する方法は?
自分で設計した電子機器と(シリアルポート経由で)通信するアプリケーションを書いています。
私のPCアプリケーションが起動すると、使用可能なCOMポートが1つずつ開き、文字列が送信されます(たとえば、「What areyou?」)。
私のデバイスは、その「魔法の質問」に自分のIDで応答するようにプログラムされています(たとえば、「私は従業員を監督するための邪悪なデバイスです」)。
私のPCソフトウェアがその「魔法の応答」を受信すると、正常に動作し始め、他のポートを検索しなくなります。
もちろん、データ送信で愚かな質問を使用していません。これは単なる例です。
質問は-デバイスを検出するために、すべての(ビジーではない)ポートのように文字列を送信できますか?
可能であれば、その「質問」文字列はどのように表示されますか?正規化された標準はありますか?
これは私の机の上のこのような最初のプロジェクトではありませんが、今は小さな業界向けのソリューションを開発しています。COMポートに接続されている他のデバイスがある可能性があり、それらがどのようにできるかわからないため、アプリケーションが何をしているかにもっと注意を払う必要があります反応します。
申し訳ありませんが、言語を間違えた場合は、英語が私の3番目の言語です。
返信ありがとうございます。
c# - SerialPortはメッセージを読みません
[SerialPort]クラスを使用してシリアル通信を実行しようとしています。ハイパーターミナルを使用してこのクラスをテストする簡単なコンソールアプリケーションプロジェクトを作成しました。
これは私のプログラムです:
The problem is
次のようになります。(コンソールで)行を書き込むと、ハイパーターミナルGUIで自分が書いた内容を確認できますが、ハイパーターミナルを使用して行を書き込むと、プログラムによって常に。をスローするメッセージが読み取られませんTimeoutException
。
なんで?
どうすればこの問題を解決できますか?
ありがとう。
embedded - SPI 通信での CPOL/CPHA 設定の使用
SPI 通信における CPOL/CPHA 構成の 4 つのモードが役立つ実際の例を教えてください。それらがどのように機能するかは理解していますが、いつ使用すればよいかわかりません。非標準の実装による互換性の目的で、いくつかの参照をすぐに読みましたが、これはどうですか?
ありがとう
c - cでの非同期通信
シリアル経由でコマンドを送信し、コマンドに基づいて応答を受信し、受信したメッセージに基づいて何かを実行する必要があります。これは非同期操作であるため、コールバックを使用する必要があると言われました。
2つのスレッドがあります。1つはメッセージを送信でき、もう1つはメッセージを受信します。
例:
特定のメッセージに対して初期化され、受信したメッセージを処理する関数を作成するにはどうすればよいですか。
例:
}
serial-port - WinCE と PC USB 通信
私たちはいくつかのデバイスを開発しており、必要な機能の 1 つに対する適切なソリューションを見つける必要があります。
問題は、WinCE 6.0 (ARM) と PC 上の Windows を通信する必要があることです。もちろん、最も簡単な方法は COM ポートですが、私たちの場合は不可能です (すべてのシリアル ポートが WinCE で使用されており、もう 1 つ追加したくありません)。2 番目のオプションは LAN ですが、いくつかの理由から、LAN は最適なオプションではありません。
したがって、使用できる 3 番目のオプションがあります。USBからUSBへの通信ですが、どうすればいいですか?もちろん、WinCE は USB デバイスで、PC は USB ホストなので、すべてのハードウェアの基本が満たされています。
Active Sync を使用することもできますが、いくつか問題があります。 PC 側で WinXP を使用する (古い ActiveSync) - Active Sync との通信をアプリケーションのみにフィルター処理する必要があり、他の許可されていないソフトウェアは許可されません (これを取得することは不可能であることがわかっています)。
したがって、必要なことを行う最善の方法は、標準の COM (シリアル通信) のように USB を介して通信することです。問題は、それをどのように作成できるか、WinCE でドライバーを作成し、Windows (PC) でドライバーを作成する必要があるか、またはより良い解決策があるかということです。おそらく、PC 側で仮想 COM をエミュレートする WinCE 6.0 用のドライバー (もちろん、WinCE 側で標準の読み取り/書き込みを許可する) でしょうか? そのようなものが存在するかどうか誰か教えてもらえますか?
tcp - MODBUS、デバイスが応答するのにかかる最大時間はありますか?
MODBUSデバイスと通信する場合、タイムアウトと見なされるまでにデバイスが応答するのにかかる時間に上限はありますか?読み取りタイムアウトを何に設定するかを考えています。MODBUSRTUとTCPの両方に対する回答があれば素晴らしいでしょう。
serial-port - MODBUS 自動アドレス割付
MODBUSアドレスを自動設定できる仕組みをご存知の方はいらっしゃいますか? 私の状況では、多数のスレーブの電源を入れ、アドレスを自動的に割り当てる方法が必要です。