Java - ошибка транзакции Jamod WriteSingleRegisterRequest - PullRequest
0 голосов
/ 16 октября 2018

Я использую 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)

Я не знаю, почему ошибка при чтении, потому что я пытаюсь написать ... В шестнадцатеричном сообщении запроса правильно ...

...