2016-11-07 19 views
-1

喜んでいくつかのエンターテイメントが必要な退屈なPLCのModbusのエキスパートがいることを願っています。PLC/Modbusリードコイルの状態(modbus tk)

私は、teco SG2 20VR-Dの出力コイルQ1からQ8の状態を読み取ろうとしています。

私はPythonでModbus-TKを使用していますが、コイルに書き込んでレジスタなどを読み込むのは簡単です。しかし、出力コイルQ1-Q8を読み込む方法がわかりません彼らの状態を確認することができます。

アドレス表は添付のPDFの29/31ページにあります。私のユニットはV3タイプです。

29ページの小さな印刷物を読んだ場合、10hを乗算することについていくつかの目障りなメッセージがありますか?助けて!

このコマンドを使用すると、唯一の値としてゼロを持つ単純なタプルが得られます。

slave_address = 1 

command = 1 #read coils 

coil_address = 11312 # this is 2c30h converted to decimal. 2c30h is the address for Q1 according to the pdf 

master.execute(slave_address, command, coil_address) 

(私はPycharmで式を評価するとき..私は何を得るこの) 戻り値:

result = {tuple} <type 'tuple'>:() 
__len__ = {int} 0 

トラブルがQ1で通電する(閉じた状態)ので、それは1または65280ない0を示すべき、これは正しいことではありません。

コイルアドレスにある種の範囲を使用してください。どのようにこれを行う必要があります誰も説明できますか?

Teco SG3 Modbus Manual

答えて

0

私は何をやっているとは全く慣れていないんだけど、ドキュメントを簡単に見てみると、あなたがREAD_COILSコマンドのために必要なすべてのパラメータを指定していないことを示している - もあります」 modbus-tkのデフォルト値は0です。したがって、得られた結果と正確に一致する合計ゼロコイルの値を要求しています。このパラメータは明らかに0x10の倍数である必要があるので、Q1-Q8の値以上を要求する必要があります。残りの8つの値は不要です。

+0

おかげで... ..私は良いドキュメントのためのハイとローを見てきたし、それを見つけることができませんでした。 –

+0

スタンドアロンのドキュメントはありませんでしたが、ソース自体にはhttps://github.com/ljean/modbus-tk/blob/master/modbus_tk/modbus.pyにあるドキュメントストリングがあります – jasonharper

+0

16の倍数になるコイルは、扱いにくく、非標準的な振る舞いです。とにかく、これはModbusです。それぞれの実装には癖があります。コイルの数として16を使用するだけで動作するはずですが、 – Ronaldo

0

「01H:ユーザーが10Hの開始アドレス等しい複数を設定し、コイルの量も10Hの等しい複数の」

のModbus実装は通常、完全なレジスタ値(使用しているものと思う)ORのどちらかを期待しますオフセット。この場合、ベースレジスタに16(10h)を掛けてオフセットを取得しようとしましたか?

発信メッセージと受信メッセージを手がかりにしてみましたか? Wiresharkは自動的にModbusメッセージをあなたのために分解します。

私はあなたに直接的な答えはありません。このようなことがたくさんありますが、それはあなた自身でダイブする必要があります。

あなたのスキルレベルはわかりませんが、wiresharkのメッセージ(バイト)を慎重に選んで、デバイスが返すものを正確に把握し、送信していることを確認することから始めます。この情報は、役立つことがあります。あなたはMODBUS-TKのマニュアルを見つけた

http://support.autosoln.com/support/index.php?/Knowledgebase/Article/View/63/0/modbus-protocol-overview-debugging-your-acm-configuration-by-dissecting-modbus-messages

関連する問題