問題タブ [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.
serial-port - RS485シリアルケーブルを介したハードウェアとの通信
私はRS485シリアルケーブルを介してPCに接続するスマート電気メーターを持っています。このハードウェアには、内部レジスタを読み取ってソフトウェアで表示できるソフトウェアがあります。ソフトウェアを介してメーターのレジスターを読み取ろうとしたとき、シリアルポートモニターソフトウェアを実行して、メーターとの間で送受信されるバイトをスニッフィングしました。
これはスニッフィングの結果です。
私の質問:リクエストバイト(上記で見つかりました)をメーターに送信してから、回答バイトを取得してPCに保存することは可能ですか?基本的に、16進バイトを送信して回答を受信することでメーターと通信することは可能ですか?または、16進バイトを送信する前に実行する必要のある他の手順がありますか?
注:私の目的は、メーターに付属のソフトウェアとして、基本的でシンプルなソフトウェアを開発することです。
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 です (当然のことながら、ボーレートの設定も問題ありません)。
私の「受信」コードに間違っているものはありますか?「選択」は間違っていますか?
linux - HjelmslundUSB485をdebianにインストールするにはどうすればいいですか
タイトルの通り!
「dmesg」を使用してデバイスから情報を読み取り、「lsusb」のときに表示できますが、たとえばdev/ttyUSB2のようにアタッチ/インストールするにはどうすればよいですか。
c# - C# 経由で RS485 コマンドを受信する
私はグーグルで検索しましたが、これに役立つコードが見つかりませんでした。RS485コマンドを受信したい。現時点では、私はただゴミを受け取っています。これが私の現在のコードですが、役に立たないと思います:
これは、データを受信できるかどうかを確認するための単なるテストでした。シリアルポート経由でデータを受信してテキストボックスに表示する方法を知っている人はいますか?
error-handling - パケット エラー チェック コード
PIC マイクロ コントローラと Linux コンピュータで RS-485 プロトコルをプログラミングしています。私は当初、CRC8 を使用して着信データをチェックすることを考えていましたが、これはプロセッサを集中的に使用するタスクになるようです。
代わりに、より単純な PEC アルゴリズムを考えていました。おそらく、すべての着信バイトをシードで XOR して、CRC の非常に単純な単一ステップの実装を作成します。
このようなアルゴリズムを使用すると、どのような欠点がありますか?
c++ - RS485による通信
シングルボード コンピュータを RS485 経由で別のデバイスに接続しています。コンピューターはデバイスに要求を送信し、応答を受信する必要があります (デバイス依存のプロトコルを使用)。問題なくメッセージを送信でき、デバイスはそれらを受信します (たとえば、デバイスのパラメータを変更できます)。この問題は、デバイスからパラメーターを読み取りたいときに発生します。この場合、私は間違った応答を受け取ります (間違った文字、シフトされたメッセージ、不完全なメッセージなど)。
ここに私の初期化コードがあります:
コードを送信:
コードを受け取る:
関数aux_gpio_write_settings()
とaux_gpio_read_settings()
は、RS485 がデータを送受信できるように、(GPIO を介して) UART を設定するために使用されます。
Linux デスクトップ コンピューターでコードを使用すると、USB/RS485 アダプターが送信モードと受信モードを自動的に切り替えるため、問題なく動作します。私のシングルボードコンピューターでは、手動で行う必要があります。そのため、GPIO を設定してレスポンスを受信すると、タイミングの問題が発生すると思います。どうすればこの問題を処理できますか?
parsing - Arduino Uno 用の MAX485 ブレークアウト ブロックを使用して入力文字列を受信する
私は arduino uno の rx および tx ピンを使用して、rs485 デバイスから ASCII 文字列を受信し、送信間 0.100 秒で 2400 ボーで送信し、その文字列の特定の部分を解析して、arduino に接続された 16x2 LCD に出力しようとしています。 .. スコープで確認したところ、rx ピン 0-5vdc 方形波に入っているデータ文字列を取得しています。rs485 ascii 文字列をバッファに受け取るためのサンプル コードを持っている人は誰でも役に立ちます。