0

ModBus プロトコルをサポートするユニットがあり、'Jamod' を使用してユニットに接続してレジスタ値を読み取ろうとすると、エラー コード 2 が表示されます。

ユニット構成:


このユニットは、RS-485 およびイーサネット インターフェイスを介して Modbus プロトコルをサポートします。RS-485 インターフェイスでは、Modbus ネットワーク上に構成可能な Modbus アドレスがあります。デフォルトでは、これは 99 に設定されています。ユニットはブロードキャスト アドレス 0 にも応答します。

RS-485 インターフェイスは、デフォルトで 9600 ボーのボー レートで動作し、8 ビットおよび偶数パリティを使用します。1200、2400、4800、9600、19200、38400、57600、または 15200 ボーに設定できます。

イーサネット インターフェイスは RJ45 コネクタを使用します。このインターフェイスは、ポート 502 で TCP/IP イーサネット接続をサポートします。スレーブ アドレスは 0 です。

このユニットは、Modbus Read Input Registers 機能コード 4 を使用してデータを返します。また、Modbus 保持レジスタ アクセス機能 3 および 16 を使用して構成パラメータの読み取りと書き込みを行うこともできます。また、Modbus 診断機能コード 8 のサブセットもサポートされています。


ユニットに接続して読む方法を教えてください、ありがとう

*******************Sample Code***********************


import java.io.*;
import java.lang.*;
import java.net.InetAddress;
import net.wimpi.modbus.Modbus;
import net.wimpi.modbus.io.ModbusTCPTransaction;
import net.wimpi.modbus.msg.ReadInputRegistersRequest;
import net.wimpi.modbus.msg.ReadInputRegistersResponse;
import net.wimpi.modbus.net.TCPMasterConnection;

public class modbus_conn {

    public static void main(String args[]){
                try {                        
                        /* The important instances of the class*/
                        TCPMasterConnection con = null;  //the connection
                        ModbusTCPTransaction trans = null;  //the transaction
                        ReadInputRegistersRequest rreq = null;  //the read request
                        ReadInputRegistersResponse rres = null;  //the read response
                        /* Variables for storing the parameters */
                        InetAddress addr = null;  // the slave's address
                        int port = 502;  // the default port
                        //int coil = 1;  // one of the coils (D0 1 for this address) to switch ON/OFF

                        //Setup the parameters
                        addr = InetAddress.getByName("127.192.6.31");  // ** The address assigned to the module **

                        //Open the connection
                        con = new TCPMasterConnection(addr);
                        con.setPort(port);
                        con.connect();

                        //Prepare the READ request
                        int k = 30001;  // register address starting from 30001
                        rreq = new ReadInputRegistersRequest(k, 2);  // Reading 8 bytes

                        //Prepare the READ transaction
                        trans = new ModbusTCPTransaction(con);
                        trans.setRequest(rreq);

                        //Execute the READ transaction
                        trans.execute();

                        rres = (ReadInputRegistersResponse) trans.getResponse();
                        System.out.println("Hex Value of register " + "= " + rres.getHexMessage());

                        //Close the connection
                        con.close();

                }
                catch (Exception ex) {
                        System.out.println("Error");
                        ex.printStackTrace();
                }           
    }
}

エラー:

Error
net.wimpi.modbus.ModbusSlaveException: Error Code = 2
    at net.wimpi.modbus.io.ModbusTCPTransaction.execute(ModbusTCPTransaction.java:207)
    at modbusConn.Control_ADAM.main(modbus_conn.java:48)
4

1 に答える 1

2

エラー コード 2 は、ILLEGAL DATA ADDRESS があることを示します。あなたの場合、30001 はレジスタ アドレスで、2 バイトを読み取っています。この問題を解決するには、レジスタの 16 進数のアドレスを使用します。16 進数のアドレスがわからない場合は、マニュアルを参照してください。(私にとってはうまくいきます :-))

また、増分をあまり大きくしないと、エラー コード 3 が返されます。これにも注意してください。

ここに画像の説明を入力

于 2016-09-15T05:48:45.163 に答える