問題タブ [rs485]

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.

0 投票する
1 に答える
993 参照

c++ - 「シリアル送信完了」 - RS485 の中断 [BeagleBoneBlack - オングストローム]

BeagleBoneBlack でアプリケーションを開発しています。組み込み Linux は私にとってまったく新しいものです =/

私が直面している問題は、RS485 通信を実装したいということです。SeriaLib-Library を使用して C++ コードを書きました。今のところ、専用の GPIO を使用して RS485 インターフェイスの方向を切り替えます。この時点まではすべて問題ありませんでした。

メッセージを書き込むには、関数 write を以下で使用します

唯一の問題は、最後のバイトが BUS に書き込まれた直後に DIRECTION ピンをトグルすることです =(

マイクロコントローラで開発している間、さまざまな割り込みなどに反応することは問題ありません。

カーネルの奥深くに解決策はありますか? - メッセージの送信に成功した後、ピン DIRECT を切り替えるには?

0 投票する
3 に答える
10763 参照

python - Beaglebone Black Angstrom を使用した半二重 RS-485 ブレークアウト ボードを介した自動 RTS を備えた Python PySerial

Angstrom (3.8 カーネル) を実行する Beaglebone Black を使用して、9600-N-8-1 の半二重 RS-485 ネットワーク上のデバイスと通信しようとしています。

これに似た RS-485 ブレークアウト ボードを使用しようとしています: https://www.sparkfun.com/products/10124、チップが MAX3485 http://www.maximintegrated.com/datasheet/indexであることを除いて.mvp/id/1079 . ピンと端子台があらかじめ組み立てられたボードを購入しました。私の友人がオシロスコープでテストしたところ、RS-485 ボードは動作することがわかりました。ボードには、BBB に接続する 5 つのピンがあります。3-5V (電源)、RX-I、TX-O、RTS、および GND。

UART4_RTSnおよびUART4_CTSnピンが使用できるように、BBB での HDMI サポートを無効にしました。

次に、RTS/CTS 制御で UART-4 を有効にするオーバーレイを見つけました。

オーバーレイをコンパイルして有効にしました:

このように485ボードをBBに接続しました

Pythonでは、次のようにシリアルポートを使用しようとしています:

USB から RS-485 へのコンバーターを使用して通信/dev/ttyUSB0を設定rtscts=Falseすると、双方向で問題なく動作するため、プログラムが動作することはわかっています。しかし、RS-485 ボードを使用して通信を正しく行うことができません。

RS-485 ボードには 2 つの問題があり、どちらも RTS に対応しています。

  1. ボード上の RTS は、私が期待する方法とは逆に動作します。rs485 ボードの RTS ピンに電圧をかけると、ボード上の RTS LED がオフになり、ボードが送信されなくなります。RTS ピンから電圧を取り除くと、RTS LED がオンになり、ボードが送信されます。BBB の UART_RTSn ピンの極性を反転するにはどうすればよいですか?

    Temporary solution: I've made a small bone script program that uses UART4_RTSn pin as input. It turns on a different GPIO when the UART4_RTSn pin is off and turns off that same GPIO pin when the UART4_RTSn pin is on. Then hooked up the RTS pin on the rs485 board to the GPIO pin instead of the UART4_RTSn pin.

    /dev/ttyO4これは不十分な解決策のようですが、コマンド ラインから にエコーするときに、RS485 ボードの RTS が正しいタイミングでオンになります。

    UART4_RTSnハードウェア構成を調整するか、pyserial の構成を変更して、ピンの極性を変更するにはどうすればよいですか?

    これにより、2番目の問題が発生します

  2. 問題1で述べたようにUART4_RTSn、次のように値をttyポートにエコーすると、ピンは自動的に(ただし逆方向に)機能します。

    これによりUART4_RTSn、データの送信中に LED が点滅します。上記のボーンスクリプトを使用せずにセットアップすると、通常どおりオンになり、送信中に点滅します。私のbonescriptハックを使用すると、通常はオフになり、送信中に点滅します(これが私が望んでいることです)。ただし、これはコマンド ラインから echo を使用する場合にのみ機能します。Python を使用してシリアル ポートをセットアップすると、UART4_RTSnピンが非アクティブになります。送信中は点滅しません。Pythonでステートメントを作成するとすぐに:

    UART4_RTSnピンはシャットオフし、オフのままです。を使用して情報を送信する場合は点滅しませんser.write(stuff)。その結果、rs485 ボードは送信に対応していません。UART4_RTSnピンをpyserialで自動的に動作させるにはどうすればよいですか? 設定rtscts=Falseしてみましたがダメでした。

    ピン値を使用ser.setRTS(True)またはser.setRTS(False)手動で切り替えることができるので、正しいピンを使用していて、それが認識されていることがわかります。しかし、UART4_RTSn ピンを直接切り替えたくありません。シリアルポートがデータを送信しているときに自動的に動作するようにしたいのですが、Pythonではそうではありません。

どんな助けでも大歓迎です。

0 投票する
0 に答える
1159 参照

c - RS485 経由で PIC32 と通信する UART からの追加のガベージ バイト

これまでに機能していること:

  • USB コンバータを搭載した PC から Click-Board RS485 を搭載した PIC32MX にバイトを送信する
  • UART5 はデータの受信に使用され、これらのデータは UART4 を介して送り返され、ターミナルで読み取られます。
  • バイトは正しくエコーされていますが、

問題:

  • 「<0>」や 0x01 などの追加のガベージ バイトが PIC32 によって受信されます (私の PIC32 で既にデバッグしました)。
  • 割り込みでデータをエコーするためにprintfを使用すると、受信されるバイト数が少なくなります(ただし、とにかくいくらか)

ここに私のコードがあります:

plib-Example のように PPSOutput を配置しませんでした。それは問題になるでしょうか?標準ピンを使用するため、ここでのマッピングは必要ないと思いますか?

どうにかして、あなたが私を助けてくれることを願っています。私は本当にイライラして一生懸命努力しましたが、なぜこれらの追加のバイトを受け取るのかわかりません。


編集:問題を解決しました:

ここで解決策を見つけました: http://www.edaboard.com/thread195556.html

事実は、データが利用可能になるまで待つ必要があるということです! 次の行を追加すると、完全に機能します!

0 投票する
1 に答える
1233 参照

c - MicroC rs-485、pic16f887 文字列送信の問題

マスター pic からスレーブに文字列 "MY STRING" を送信するにはどうすればよいですか?

MicroC RS-485 ライブラリの例を使用しています。

http://www.mikroe.com/download/eng/documents/compilers/mikroc/pro/pic/help/rs-485_library.htm

マスターからスレーブに文字列を送信しようとしています: そして、dat[7] = "my string"; を設定します。私の文字列でスレーブにdat [7]を期待していますが、空の値を取得しています...

リンク下部の元のコード。

主人

スレーブ:

ここに画像の説明を入力

0 投票する
0 に答える
1523 参照

linux - 最初の呼び出し後にシリアル接続が NULL を返す

rs485 シリアル リンクを介して arduino と通信しようとしています。PCにUSBからシリアルrs485アダプターを接続し、arduino側にmax485を接続しています。開始するには、受け取ったものを送り返すスケッチをアップロードするだけです。

次に、接続をテストするために、シリアル ポートに文字を書き込み、応答をリッスンする python スクリプトを PC で実行します。

スクリプトを初めて起動すると、次のようになります。

スクリプトを再度起動しようとすると、次のようにしか書き込まれません。

PCを再起動した場合にのみ、再び機能し始めます(ちなみにubuntuを使用)。USBからシリアルへのコンバーターを抜き差ししても何も変わらず、arduinoを再起動しても同じ話です。ラズベリーパイで同じ構成を試しましたが、結果は同じです。USB ポートの変更が機能しません。arduino で同じスケッチを再度アップロードしても、何も起こりません。ピン 13 の LED が点滅するので、arduino は何かを送受信しています。serial.read() 関数が返されるので、何かが到着していますが、(最初の 1 回目以降は) null 文字 '\x00' です。ある肯定的なケースでは、再起動後、スクリプトをしばらく実行させようとしましたが、ctrl-c を押してスクリプトを再開するまで、すべてがうまくいきました。

これは、シリアル コンバーターを接続した後の dmesg です。

この後どうすればいいのかわからないので、助けていただければ幸いです。

編集 :

PC を再起動する必要はありません。USB コンバーターを処理するモジュール ch341 をアンロードしてから再度ロードすると機能します。コードの先頭に次の 2 行を追加しました。

問題が本当に解決しないことはわかっていますが、機能します。

編集 2: ドキュメントhttp://lxr.free-electrons.com/source/Documentation/serial/serial-rs485.txtを見て、c (i' m は C が苦手なので、ご容赦ください)

しかし、プログラムをコンパイルして実行すると、私が見るのはこれだけです:

ドライバーhttps://github.com/torvalds/linux/blob/master/drivers/usb/serial/ch341.cを見ると、ioctlを処理するための適切な機能がまったくないと思います。

0 投票する
1 に答える
934 参照

c - Modbus でのマルチスレッド? 応答時間を 1 秒に保ちながら 500 ミリ秒でクエリを送信するにはどうすればよいですか?

MODBUSマスタースレーブ通信を実装しました。fun 6、16、3 を実装しました。応答時間を 1 分に設定しました。今の問題は、500ミリ秒でクエリを送信したいということです。しかし、この 1 秒の応答時間のため、2 番目のクエリを送信するには 1 秒待つ必要があります。応答時間を 1 秒に保ちながら、500 ミリ秒ごとにクエリを送信する方法。

前のクエリの応答も待っている場合、新しいクエリを送信することはできますか?

MODBUS 経由で低速のデバイスと通信するには?