Modbus özellikli bir cihaza erişen java için jamod kütüphanesini deniyorum. 'un modbus profiline göre cihazın belirli bir register (40149) olmasını istiyorum. Veri türü beklenen bir Signed 32 bit int olmalıdır. Aşağıdaki kodu kurdum (https://github.com/jeick/jamod/blob/master/src/main/java/net/wimpi/modbus/cmd/TCPMasterTest.java tabanlı), ancak çalışmıyor. Kayıt sadece yazıyor, ancak cihazın kayıt değerini görebileceğim bir ekranı var. Böylece bir Modbus kaydı ilk elemanı ile iki uzunlukta bir dizi mevcut gerekli değeri 20000 ve 0.Java Modbus (jamod) Erişim
private static int requestNumber = 7;
public static void main(String[] args) {
int port = Modbus.DEFAULT_PORT;
int unitId = 3; //Same as TCPSlaveTest.java
try {
if (args != null && args.length == 1) {
port = Integer.parseInt(args[0]);
}
//InetAddress addy = InetAddress.getLocalHost();
InetAddress addy = InetAddress.getByName("192.168.2.11");
TCPMasterConnection connection = new TCPMasterConnection(addy);
connection.setTimeout(3000);
connection.setPort(port);
System.out.println("Trying to connect to "+addy.getCanonicalHostName()+" on port "+port);
connection.connect();
ModbusTCPTransaction transaction = new ModbusTCPTransaction(connection);
ModbusRequest request;
while ((request = getNextRequest()) != null) {
request.setUnitID(unitId);
transaction.setRequest(request);
transaction.execute();
ModbusResponse response = transaction.getResponse();
gotResponse(response);
}
} catch (Exception e) {
e.printStackTrace();
}
}
private static void gotResponse(ModbusResponse response) {
System.out.println("Got response: "+ response.getHexMessage());
}
private static ModbusRequest getNextRequest() {
//Note: simple process image uses 0-based register addresses
switch (requestNumber) {
case 0:
return new WriteCoilRequest(0,true);
case 1:
return new ReadCoilsRequest(0, 2);
case 2:
return new ReadInputDiscretesRequest(0,4);
case 3:
return new ReadInputRegistersRequest(0,1);
case 4:
return new ReadMultipleRegistersRequest(30052,2);
case 5:
Register r = ModbusCoupler.getReference().getProcessImageFactory().createRegister();
r.setValue(420);
return new WriteSingleRegisterRequest(0,r);
case 6:
return new ReadMultipleRegistersRequest(30051,2);
case 7:
SimpleRegister[] registers = new SimpleRegister[2];
registers[0] = new SimpleRegister(0);
registers[1] = new SimpleRegister(2000);
return new WriteMultipleRegistersRequest(40149,registers);
default:
return null;
}
}
herhangi bir öneri, ikinci dizi gönderilir, 16 bit (cihazın göre Modbus profilli) olduğu ?