0

我的客户希望使用自定义解决方案来控制安装在其站点中的 HVAC 系统。HVAC 设备提供 MODBUS TCP/IP 连接。我是这个领域的新手,对MODBUS一无所知。我搜索了互联网,发现 jamod 作为 MODBUS 的 java 库。现在我想用jamod写一个程序。但我的困惑是如何获得我想要连接的设备的地址。我的第二个问题是,即使我设法连接设备,我如何才能从 MODBUS 获取所需的数据(以温度等工程单位表示)。我的问题可能听起来很糟糕,但请原谅我,因为我是这个领域的新手。

4

2 回答 2

2

如何获取要连接的设备的地址?

这种类型取决于您是通过 Modbus RTU 还是 Modbus TCP 进行连接。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 回答