2017-02-20 19 views
0

j2modを使用してModbusスレーブとマスターを作成しようとしています(それは別のプログラムと互換性があるためバージョン1.0.6です)、見つかったコードに関する一般的な質問がありますオンライン。J2Modの基本マスタとスレーブの質問

私は有用なドキュメントをほとんど見つけられていないので、まあまあです。

TcpMaster

this.addr = InetAddress.getByName("127.0.0.1"); 

     conn = new TCPMasterConnection(addr); 
     conn.setPort(port); 
     conn.connect(); 

     req = new ReadInputDiscretesRequest(ref, count); 

     trans = new ModbusTCPTransaction(conn); 
     trans.setRequest(req); 

     trans.execute(); 
     res = (ReadInputDiscretesResponse) trans.getResponse(); 

TcpSlave

spi = new SimpleProcessImage(); 
     spi.addDigitalOut(bitOut); 

     ModbusCoupler.getReference().setProcessImage(spi); 
     ModbusCoupler.getReference().setMaster(false); 
     ModbusCoupler.getReference().setUnitID(1); 

     addr = InetAddress.getByName("127.0.0.1"); 

     listener = new ModbusTCPListener(3); 
     listener.setPort(port); 
     listener.setAddress(addr); 
     listener.setUnit(1); 
     listener.setListening(true); 
     listener.run(); 

だから、今、私はtrans.execute()
をで不正なデータアドレスエラーを取得していますし、私の質問は以下のとおりです。

何リクエスト上の2つのパラメータは正確です。

01事前に私はUNITIDマスター(マスタークラスで)アクセスする必要が定義されます

THX

答えて

1

私はこの上で私の考えを共有するには遅すぎないよ願っています。私は時にはJ2Modが紛らわしいと感じています。あなたの最初の質問については

- 「正確に2つのパラメータはリクエストの上は何?」:

  1. コイル(ディスクリート出力コイル: 標準のModbusデバイスのデータでは、9999個の値ごとに4つのテーブルに格納されます) - それらは読み書きであり、内部で0000から270Eにアドレス指定されています。 Modbusデバイスのレジスタ1-9999を占有します。
  2. 離散入力(離散入力接点) - 読み取り専用であり、内部で0000から270Eにアドレス指定されています。 Modbusデバイスのレジスタ10001-19999を占有します。
  3. 入力レジスタ(アナログ入力レジスタ) - 読み取り専用であり、内部で0000〜270Eにアドレス指定されています。 Modbusデバイスのレジスタ30001〜39999を占有します。
  4. 保持レジスタ(アナログ出力レジスタ) - 読み書きであり、内部で0000〜270Eにアドレス指定されています。 Modbusデバイスのレジスタ40001〜49999を占有します。

コイル(1)又は接触(2)1ビット(1バイト)です。

レジスタ(3,4)は、1ワードまたは16ビット(2バイト)です。バックあなたの質問に行く

REFは、あなたが読みたい(あなたのケースで)接触しています。たとえば、番号10001の最初の連絡先を読み取る場合は、0を渡します(内部で0000-270Eに対処するため)。 2番目のパラメータは、です。これは、読み取る連絡先(ビット)の数です。連絡先10001を読みたい場合は、1(1つの連絡先のみ)を渡すことができます。

2番目の質問では、J2Modについて多くの経験がないため、わかりません。

通常、Modbus TCP/IPには、7バイトのMBAPヘッダーがあります。

  • トランザクションID - 2バイト
  • プロトコルID - (Modbusのための0000)、2バイト
  • 長さ - 2バイト - これが続くバイトの数(ユニットIDを含む)
  • ユニットIDを示します - 1バイト

私はIDを設定する方法を見て、あなたの所見に戻ってきます。

あなたは進歩していますように!

+0

まず最初に感謝のおかげで、私はいくつかの問題を自分で解決しました。そして、私は少なくとも今コイルを読み書きできます。どのようにデータが格納されているかについてのあなたの説明は私にとっては有益です。 – Jusn