RS-485通信のトラブルシューティング

RS-485通信のトラブルシューティング

ND-6021アナログ入力モジュール。受信したコマンドに応じて可変出力電圧を設定できるRS-485デバイスです。 Linux Debian Stretchで動作しようとしています。私はminicomが正しく機能していることを確認するために使用していたので、read configコマンドを実行しました$012<CR>。デバイスはコマンドを正しく受信したことを示すメッセージで応答!01320600し、!残りのメッセージではデバイスの設定方法について説明します。私が理解したのは、これは接続が正しく確立され、通信をブロックするハードウェアの問題がないことを意味します。

次のステップは、所望の出力電圧レベルを設定することです。出力電圧を見るためにデジタル電圧計をデバイスに接続しました。次のコマンドを実行します。#0108.467<CR>電圧計で8.467Vを読み取る必要があり、デバイスがで応答する必要がありますが、電圧>はゼロに維持され、デバイスは応答しません。

何時間も命令構文を確認してみましたが、正確に再テストしてみました。デバイスをWindowsノートブックに接続し、シロアリを使用して同じコマンドを実行しました。 read configコマンド($012<CR>)が機能し、Linuxと同じ応答を得ました。これで set 電圧コマンドも動作します。>デバイスから応答が得られ、出力電圧が正しく設定されました。

テストの結果、通信とハードウェアの設定は良いことがわかりましたが、明らかに何かが機能していないことがわかったので、混乱しています。ところで何ですか?

答え1

通常、これは転送速度または改行解析の問題です。 (命令が部分的に有効な場合でも)

ソカットネットワークとシリアル接続を確立し、問題を解決するための優れたツールです。

socat - /dev/ttySX[,params]

空のパラメータが機能しない場合は、パラメータを使用して明示的な転送速度を追加できます。b9600/b19200/b57600/b115200...all list retrievalsocat -?? | grep 'b[1-9]'

次に、改行記述の問題に焦点を当て、パラメータの組み合わせを試みますcrcrnlecho=0raw

...一部のモジュールはcr + lf(\ r \ n)行末を要求し、一部は「\ n」のみを要求するため、時にはエコーが混乱する可能性があります...一方、あなたの場合、モジュールはキャリッジリターン( \r) のみが必要です )、echo '#0108.467' | socat - /dev/ttySX,cr正常に動作します。

関連情報