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);
// 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
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
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;
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