web-dev-qa-db-ja.com

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

ND-6021アナログ入力モジュール があります。受信したコマンドに基づいて可変出力電圧を設定できるRS-485デバイスです。 Linux DebianStretchで動作するようにしようとしています。 minicomを使用して正しく機能するかどうかを確認しているので、構成の読み取りコマンド$012<CR>を発行しました。デバイスはメッセージ!01320600で応答します:!は、コマンドを正しく受信したことを意味し、メッセージの残りの部分は、コマンドがどのように構成されているかを説明します。私の知る限り、これは接続が適切に設定されており、通信を妨げるハードウェアの問題がないことを意味します。

次のステップは、出力電圧の望ましいレベルを設定することです。デバイスにデジタル電圧計を接続したので、出力電圧を確認できます。コマンド#0108.467<CR>を発行し、電圧計で8.467ボルトの値を読み取る必要があり、デバイスは>で応答するはずですが、電圧は0のままであり、デバイスからの応答がありません。

コマンドの構文をチェックするのに何時間も費やしましたが、それは正しいので、別のテストを行いました。デバイスをWindowsラップトップに接続し、シロアリを使用してまったく同じコマンドを発行しました。読み取り構成コマンド($012<CR>)が機能し、Linuxと同じ回答が得られました。また、設定電圧コマンドも機能します。デバイスから>の回答が得られ、出力電圧が正しく設定されています。 。

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

2
Giorgio R

通常、これは改行または改行の解釈の問題です。 (コマンドが部分的に機能する場合でも)

socat は、ネットワーク接続とシリアル接続を作成およびトラブルシューティングするための優れたツールです。

socat - /dev/ttySX[,params]

空のパラメータが機能しない場合は、次のパラメータを使用して明示的なボーレートを追加してみてください:b9600/b19200/b57600/b115200 ...すべてのリストはsocat -?? | grep 'b[1-9]'で取得されます

次に、改行の解釈の問題に焦点を当て、パラメータの組み合わせを試します:crcrnlecho=0、およびraw

...一部のモジュールはcr + lf(\ r\n)行末を要求するため、一部は '\ n'だけを必要とし、バックエコーによって混乱が生じることがあります...そしてあなたの場合、モジュールはキャリッジリターン(\ r)のみを必要とします、したがって、echo '#0108.467' | socat - /dev/ttySX,crはうまく機能するはずです。

2
Asain Kujovic