Я использую jaMod 1.2 для чтения и записи через последовательное модусное соединение.У меня нет проблем при чтении значений с устройства, проблема заключается в попытке записать один запрос.
Мой метод
public void sendSingleRegisterRequest(String portName, int unitId, String hex, int words, int baudRate, int value) {
SerialConnection con = null; // the connection
try {
ModbusSerialTransaction trans = null; // the transaction
WriteSingleRegisterRequest req = null; // the request
WriteSingleRegisterResponse res = null; // the response
SimpleRegister myReq = new SimpleRegister(1); //my request
String[] results = hex.split(",");
// 2. Set master identifier
ModbusCoupler.getReference().setUnitID(1);
// 3. Setup serial parameters
SerialParameters params = new SerialParameters();
params.setPortName(portName);
params.setBaudRate(baudRate);
params.setDatabits(8);
params.setParity("None");
params.setStopbits(1);
params.setEncoding(Modbus.SERIAL_ENCODING_RTU);
params.setEcho(true);
params.setReceiveTimeout(300);
// 4. Open the connection
con = new SerialConnection(params);
con.open();
for (int i = 0; i < results.length; i++) {
int ref = Integer.parseInt(results[i], 16);
// 5. Prepare a request
req = new WriteSingleRegisterRequest();
req.setReference(ref);
myReq.setValue(value);
req.setRegister(myReq);
req.setUnitID(unitId);
req.setHeadless();
logger.debug("Request is " + req.getHexMessage());
// 6. Prepare a transaction
trans = new ModbusSerialTransaction(con);
trans.setTransDelayMS(100);
trans.setRequest(req);
trans.setCheckingValidity(false);
// 7. Execute the transaction repeat times
trans.execute();
res = (WriteSingleRegisterResponse) trans.getResponse();
logger.debug("response: " + res.getHexMessage());
}
} catch (Exception e) {
logger.error("Error ", e);
} finally {
con.close();
}
}
Метод дает мне исключение
net.wimpi.modbus.ModbusIOException: I/O exception - failed to read
at net.wimpi.modbus.io.ModbusRTUTransport.readResponse(ModbusRTUTransport.java:163)
at net.wimpi.modbus.io.ModbusSerialTransaction.execute(ModbusSerialTransaction.java:187)
Я не знаю, почему ошибка при чтении, потому что я пытаюсь написать ... В шестнадцатеричном сообщении запроса правильно ...