J2Mod-I/O异常-读取失败 [英] J2Mod - I/O exception - failed to read

查看:227
本文介绍了J2Mod-I/O异常-读取失败的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在为我的项目使用J2Mod Java jar.我通过comport连接到设备,但是无法读取数据或将数据写入设备.两次尝试读取或写入设备中的数据时,都遇到相同的异常.每当使用QModMaster时,我都可以从设备读取数据.

I am using for J2Mod java jar for my project. I am connected with the device through comport but, neither able to read nor write data into the device. Both time when I am trying to read or write data into the device getting the same exception. Whenever, Using QModMaster I am able to read data from the devices.

连接代码-

SerialParameters parameters;
SerialConnection serialMaster;

try {
        parameters = new SerialParameters();

        parameters.setPortName((String) jComboBox4.getSelectedItem());
        //parameters.setCommPortId("/dev/ttyUSB1");
        parameters.setBaudRate(9600);
        parameters.setDatabits(8);
        parameters.setStopbits(1);
        parameters.setParity("none");
        // parameters.setEncoding("rtu");
        // parameters.setEcho(false);
        System.out.println("Connection Section" + parameters);
        serialMaster = new SerialConnection(parameters);

        serialMaster.open();
        System.out.println("Connection open :" + serialMaster.isOpen());

    } catch (Exception ex) {
        Logger.getLogger(TankIQ_Configurator.class.getName()).log(Level.SEVERE, null, ex);
    }

用于读取数据的代码-

ReadMultipleRegistersRequest readMultipleRegistersRequest;
ReadMultipleRegistersResponse readMultipleRegistersResponse;
ModbusSerialTransaction trans;    

trans = new ModbusSerialTransaction(serialMaster);

Register[] register = {simpleRegister1, simpleRegister2};

int unitid = 1; //the unit identifier we will be talking to
int ref = 50; //the reference, where to start reading from
int count = 2; //the count of IR's to read
int repeat = 1; //a loop for repeating the transaction

//4. Open the connection
try{
    //5. Prepare a request
    readMultipleRegistersRequest = new ReadMultipleRegistersRequest(50, 2);
    readMultipleRegistersRequest.setUnitID(unitid);
    readMultipleRegistersRequest.setHeadless();

    //6. Prepare a transaction
    trans = new ModbusSerialTransaction(serialMaster);
    trans.setRequest(readMultipleRegistersRequest);

    int k = 0;
    do {
        trans.setTransDelayMS(1000);
        trans.execute();
        readMultipleRegistersResponse = (ReadMultipleRegistersResponse) trans.getResponse();
        for (int n = 0; n < readMultipleRegistersResponse.getWordCount(); n++) {
            System.out.println("Word " + n + "=" + readMultipleRegistersResponse.getRegisterValue(n));
        }
        k++;
    } while (k < repeat);
    serialMaster.close();//8. Close the connection
} catch (Exception ex) {
    Logger.getLogger(WriteMultipleRegistersRequest.class.getName()).log(Level.SEVERE, null, ex);
}

推荐答案

谢谢!所有参与此问题的人.

Thanks! all those who participated in this question.

现在,让我解释一下,为什么会出现此错误.

Now, Let me explain, why I was getting this error.

unitid之外,所有代码都可以使用. unitid只是从站地址.在我的情况下,从站地址为5.

Everything is fine with code except the unitid. unitid is nothing but slave address only. In my case slave address was 5.

这篇关于J2Mod-I/O异常-读取失败的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆