Modbus Serial Master Jamod Watkins

Jamod RS-485 Serial master Forum: Open Discussion. Hi all, i'm newbie to Java modbus Serial Communication. I was successful. Set master identifier.

Balasubramaniam - 2014-09-15

​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

Active4 years, 10 months ago

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.

ekostadinov
5,8513 gold badges21 silver badges43 bronze badges

Modbus Plus Vs Modbus

BalaSubramaniamBalaSubramaniam

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.

Modbus Serial Master Jamod Watkins

Modbus Master Client

Ram
2,6699 gold badges33 silver badges55 bronze badges
youngsub limyoungsub lim
Got a question that you can’t ask on public Stack Overflow? Learn more about sharing private information with Stack Overflow for Teams.

Not the answer you're looking for? Browse other questions tagged javamodbus or ask your own question.