我正在为我的项目使用J2Mod Java jar。我通过comport与设备连接,但是无法读取数据或将数据写入设备。两次尝试读取或向设备写入数据时都遇到相同的异常。每当使用QModMaster时,我都可以从设备读取数据。
连接代码-
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);
}
答案 0 :(得分:0)
谢谢!所有参与此问题的人。
现在,让我解释一下,为什么会出现此错误。
除unitid
外,所有代码都可以使用。 unitid
仅是从属地址。在我的情况下,从站地址为5。