Java J2Mod-I/O异常-读取失败
我正在为我的项目使用j2modjavajar。我通过comport与设备连接,但无法在设备中读取或写入数据。这两次当我试图读取或写入数据到设备得到相同的异常。无论何时,使用QModMaster,我都能够从设备读取数据 连接代码-Java J2Mod-I/O异常-读取失败,java,exception,modbus,modbus-tcp,Java,Exception,Modbus,Modbus Tcp,我正在为我的项目使用j2modjavajar。我通过comport与设备连接,但无法在设备中读取或写入数据。这两次当我试图读取或写入数据到设备得到相同的异常。无论何时,使用QModMaster,我都能够从设备读取数据 连接代码- SerialParameters parameters; SerialConnection serialMaster; try { parameters = new SerialParameters(); parameters.set
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);
}
ReadMultipleRegistersRequest ReadMultipleRegistersRequest;
读取多个寄存器响应读取多个寄存器响应;
ModBusSerialTrans;
trans=新的ModbusSerialTransaction(serialMaster);
寄存器[]寄存器={simpleRegister1,simpleRegister2};
int unitid=1//我们将要讨论的单元标识符
int ref=50//参考,从哪里开始阅读
整数计数=2//要读取的IR的计数
int repeat=1//用于重复事务的循环
//4. 打开连接
试一试{
//5.准备请求
readMultipleRegistersRequest=新的readMultipleRegistersRequest(50,2);
readMultipleRegistersRequest.setUnitID(unitid);
readMultipleRegistersRequest.setHeadless();
//6.准备交易
trans=新的ModbusSerialTransaction(serialMaster);
事务集请求(readMultipleRegistersRequest);
int k=0;
做{
trans.setTransDelayMS(1000);
trans.execute();
readMultipleRegistersResponse=(readMultipleRegistersResponse)trans.getResponse();
对于(int n=0;n
谢谢!所有参与这个问题的人 现在,让我解释一下,为什么我会犯这个错误
除了
unitid
,代码一切正常unitid
只是从机地址。在我的例子中,从机地址是5。您的日志中没有一个指向提供的代码……至少它不明显-哪里是readResonse()
?@MartinFrank,实际上它在那里。行号1503是trans.execute()。。。我在一个文件中编写了所有这些代码,这就是为什么它看起来这么大;readResponse()就在那里。感谢您指出这一点-乍一看它并不明显=)