Jamod RS-485 Serial master Forum: Open Discussion. Hi all, i'm newbie to Java modbus Serial Communication. I was successful. Set master identifier.
Hi, i am new to java serial port programming,
I have trying to read data from the modbus slave device through modbus RTU over serial port from my java application.
i am using the Jamod java library to read modbus protocal.
In my case my application failed to receive entire modbus response from the device. please find my java coding and error log for your reference.
Any one can suggest me what may be the reason for the error.
Thanks in advance
ERROR
Serial Port Connection
Connection...net.wimpi.modbus.net.SerialConnection@11210ee
Serial port status...true
Sent: 01 04 03 e8 00 05 b0 79
Last request: 01 04 03 e8 00 05 b0 79
CRC Error in received frame: 0 bytes:
Response: 01 84
execute try 1 error: I/O exception - failed to read
Clear input: 02 c2 c1
Sent: 01 04 03 e8 00 05 b0 79
Last request: 01 04 03 e8 00 05 b0 79
CRC Error in received frame: 0 bytes:
execute try 2 error: I/O exception - failed to read
Response: 01 84
Clear input: 02 c2 c1
Sent: 01 04 03 e8 00 05 b0 79
Last request: 01 04 03 e8 00 05 b0 79
CRC Error in received frame: 0 bytes:
Response: 01 84
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)
at modbusnewapplication.ModbusConnection.main(ModbusConnection.java:8
Serial Port modbus Program ---------------------------
package modbusnewapplication;
import java.io.;
import javax.comm.;
import net.wimpi.modbus.ModbusCoupler;
import net.wimpi.modbus.io.ModbusSerialTransaction;
import net.wimpi.modbus.msg.ReadInputRegistersRequest;
import net.wimpi.modbus.msg.ReadInputRegistersResponse;
import net.wimpi.modbus.net.SerialConnection;
import net.wimpi.modbus.util.SerialParameters;
Dnp3 Serial Master Tester
public class ModbusConnection {
public static void main(String[] args) {
//if (args.length < 4) {
// System.out.println('not enough args');
// System.exit(1);
//}else{
try {
System.out.println('Serial Port Connection');
/ The important instances of the classes mentioned before /
SerialConnection con = null; //the connection
ModbusSerialTransaction trans = null; //the transaction
ReadInputRegistersRequest req = null; //the request
ReadInputRegistersResponse res = null; //the response
/ Variables for storing the parameters /
String portname= 'COM1'; //the name of the serial port to be used
int unitid = 1; //the unit identifier we will be talking to
int ref = 1000; //the reference, where to start reading from
int count = 5; //the count of IR's to read
int repeat = 1; //a loop for repeating the transaction
boolean isopen = false;
// 2. Set master identifier
// ModbusCoupler.createModbusCoupler(null);
// ModbusCoupler.getReference().setMaster(master); I added this in
// ModbusCoupler.getReference().setMaster(true);
// ModbusCoupler.getReference().setUnitID(1);
// 3. Setup serial parameters
SerialParameters params = new SerialParameters();
params.setPortName('COM1');
params.setBaudRate(9600);
params.setDatabits(8);
params.setParity('None');
params.setStopbits(1);
params.setEncoding('RTU');
params.setEcho(false);
System.setProperty('net.wimpi.modbus.debug', 'true');
// 4. Open the connection
con = new SerialConnection(params);
System.out.println('Connection...' + con.toString());
con.open();
isopen = con.isOpen();
System.out.println('Serial port status...' + isopen);
// 5. Prepare a request
req = new ReadInputRegistersRequest(ref, count);
req.setUnitID(unitid);
req.setHeadless();
// 6. Prepare a transaction
trans = new ModbusSerialTransaction(con);
trans.setRequest(req);
// 7. Execute the transaction repeat times
int k = 0;
do {
trans.execute();
res = (ReadInputRegistersResponse) trans.getResponse();
for (int n = 0; n < res.getWordCount(); n++) {
System.out.println('Word ' + n + '=' + res.getRegisterValue(n));
}
k++;
} while (k < repeat);
// 8. Close the connection
con.close();
} catch (Exception ex) {
ex.printStackTrace();
}
//}//else
}//main
}//class SerialAITest
Modbus Serial Cable
i am new to java serial port programming,
I have trying to read data from the modbus slave device through modbus RTU over serial port from my java application.
I am using the Jamod java library to read modbus protocal.
In my case my application failed to receive entire modbus response from the device. please find my java coding and error log for your reference.
Any one can suggest me what may be the reason for the error.
ekostadinovModbus Plus Vs Modbus
1 Answer
You should add a method like Thread.sleep(500)
between request
and response
method in jamod
library. Maybe this kind of error is usually caused by the length of response data.jamod
library didn't consider the long size of response data. So, we need to request and wait until all data is received from the serial interface. Ff not, because all data is not received, CRC
check will fail and cause an error.