0

私のクライアントは、カスタムソリューションを使用してサイトにインストールされているHVACシステムを制御したいと考えています。HVACデバイスは、MODBUS TCP/IP接続を提供します。私はこの分野に不慣れで、MODBUSの知識がありません。インターネットを検索したところ、MODBUSのJavaライブラリとしてjamodが見つかりました。それでは、jamodを使ってプログラムを書きたいと思います。しかし、私の混乱は、接続したいデバイスのアドレスを取得する方法です。そして、私の2番目の問題は、デバイスを接続できたとしても、MODBUSから必要なデータ(温度などの工学単位)を取得するにはどうすればよいかということです。私の質問はひどいように聞こえるかもしれませんが、私はこの分野の初心者なので、ご容赦ください。

4

2 に答える 2

2

接続したいデバイスのアドレスを取得するにはどうすればよいですか?

この種類は、ModbusRTUまたはModbusTCPのどちらを介して接続しているかによって異なります。RTU(シリアル)には指定するスレーブIDがありますが、tcpはより直接的であり、スレーブIDは常に1である必要があります。

MODBUSから必要なデータ(温度などの工学単位)を取得するにはどうすればよいですか?

うまくいけば、データはすでに工学単位でフォーマットされています。デバイスのマニュアルを確認してください。レジスタを値にマッピングするテーブルまたはチャートがあるはずです。

例:

String portname = "COM1"; //the name of the serial port to be used
int unitid = 1; //the unit identifier we will be talking to, see the first question
int ref = 0; //the reference, where to start reading from
int count = 0; //the count of IR's to read
int repeat = 1; //a loop for repeating the transaction

// setup the modbus master
ModbusCoupler.createModbusCoupler(null);
ModbusCoupler.getReference().setUnitID(1); <-- this is the master id and it doesn't really matter

// setup serial parameters
SerialParameters params = new SerialParameters();
params.setPortName(portname);
params.setBaudRate(9600);
params.setDatabits(8);
params.setParity("None");
params.setStopbits(1);
params.setEncoding("ascii");
params.setEcho(false);

// open the connection
con = new SerialConnection(params);
con.open();

// prepare a request
req = new ReadInputRegistersRequest(ref, count);
req.setUnitID(unitid); // <-- remember, this is the slave id from the first connection
req.setHeadless();

// prepare a transaction
trans = new ModbusSerialTransaction(con);
trans.setRequest(req);

// execute the transaction repeat times because serial connections arn't exactly trustworthy...
int k = 0;
do {
  trans.execute();
  res = (ReadInputRegistersResponse) trans.getResponse();
  for (int n = 0; n < res.getWordCount(); n++) {
    System.out.println("Word " + n + "=" + res.getRegisterValue(n));
  }
  k++;
} while (k < repeat);

// close the connection
con.close();  
于 2012-05-31T18:51:14.893 に答える
1

まず、Modbus / TCPを使用している場合、スレーブのIPアドレス、話しているもののユニット番号(通常、Modbus / TCPの場合は0)、およびアドレスが存在するため、「アドレス」はあいまいです。任意のレジスタ。

「工学単位」の質問の場合、必要なのは、単位または変換係数が含まれているModbusレジスタマップです。すべてのModbusレジスタは16ビットであるため、データ型を知る必要がある場合もあります。

于 2012-09-16T06:52:28.993 に答える