私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]'
次に、改行記述の問題に焦点を当て、パラメータの組み合わせを試みますcr
。crnl
echo=0
raw
...一部のモジュールはcr + lf(\ r \ n)行末を要求し、一部は「\ n」のみを要求するため、時にはエコーが混乱する可能性があります...一方、あなたの場合、モジュールはキャリッジリターン( \r) のみが必要です )、echo '#0108.467' | socat - /dev/ttySX,cr
正常に動作します。