![Modbus registers Modbus registers](/uploads/1/2/6/2/126228314/947497450.png)
Aug 05, 2012 Jamod RS-485 Serial master Forum: Open Discussion. Creator: Karthik. Hi all, i'm newbie to Java modbus Serial Communication. I was successful with RS232 but i'm struggling with RS485. The Main Problem is The Master (PC) not receiving the response.
![Github Github](http://www.elec-intro.com/EX/05-14-02/Modbus-TCP-is-now-available-in-MNS-DX-1-3-for-DX800-and-DX40-Serial-Device-Routers.jpg)
JAMOD FC01 'Read Coils' with MODBUS ASCII protocol
SerialAscCoilsTest.java
/** |
* Copyright 2002-2010 jamod development team |
* |
* Licensed under the Apache License, Version 2.0 (the 'License'); |
* you may not use this file except in compliance with the License. |
* You may obtain a copy of the License at |
* |
* http://www.apache.org/licenses/LICENSE-2.0 |
* |
* Unless required by applicable law or agreed to in writing, software |
* distributed under the License is distributed on an 'AS IS' BASIS, |
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
* See the License for the specific language governing permissions and |
* limitations under the License. |
***/ |
packagenet.wimpi.modbus.cmd; |
importnet.wimpi.modbus.Modbus; |
importnet.wimpi.modbus.ModbusCoupler; |
importnet.wimpi.modbus.io.ModbusSerialTransaction; |
importnet.wimpi.modbus.msg.ReadCoilsRequest; |
importnet.wimpi.modbus.msg.ReadCoilsResponse; |
importnet.wimpi.modbus.net.SerialConnection; |
importnet.wimpi.modbus.util.BitVector; |
importnet.wimpi.modbus.util.SerialParameters; |
/** |
* Class that implements a simple commandline |
* tool for reading an analog input. |
* |
* @author Dieter Wimberger |
* @version @version@ (@date@) |
*/ |
publicclassSerialAscCoilsTest { |
publicstaticvoidmain(String[] args) { |
SerialConnection con =null; |
ModbusSerialTransaction trans =null; |
ReadCoilsRequest req =null; |
ReadCoilsResponse res =null; |
String portname =null; |
int unitid =0; |
int ref =0; |
int count =0; |
int repeat =1; |
try { |
// 1. Setup the parameters |
if (args.length <4) { |
printUsage(); |
System.exit(1); |
} else { |
try { |
portname = args[0]; |
unitid =Integer.parseInt(args[1]); |
ref =Integer.parseInt(args[2]); |
count =Integer.parseInt(args[3]); |
if (args.length 5) { |
repeat =Integer.parseInt(args[4]); |
} |
} catch (Exception ex) { |
ex.printStackTrace(); |
printUsage(); |
System.exit(1); |
} |
} |
// 2. Set slave identifier for master response parsing |
ModbusCoupler.getReference().setUnitID(unitid); |
System.out.println('net.wimpi.modbus.debug set to: '+System.getProperty('net.wimpi.modbus.debug')); |
// 3. Setup serial parameters |
SerialParameters params =newSerialParameters(); |
params.setPortName(portname); |
params.setBaudRate(9600); |
params.setDatabits(8); |
params.setParity('None'); |
params.setStopbits(1); |
params.setEncoding('ascii'); |
// params.setEcho(false); |
if (Modbus.debug) { |
System.out.println('Encoding ['+ params.getEncoding() +']'); |
} |
// 4. Open the connection |
con =newSerialConnection(params); |
con.open(); |
// 5. Prepare a request |
req =newReadCoilsRequest(ref, count); |
req.setUnitID(unitid); |
req.setHeadless(); |
if (Modbus.debug) { |
System.out.println('Request: '+ req.getHexMessage()); |
} |
// 6. Prepare the transaction |
trans =newModbusSerialTransaction(con); |
trans.setRequest(req); |
// 7. Execute the transaction repeat times |
int k =0; |
do { |
trans.execute(); |
res = (ReadCoilsResponse) trans.getResponse(); |
// if (Modbus.debug) { |
System.out.println('Response: '+ res.getHexMessage()); |
// } |
BitVector inputs = res.getCoils(); |
byte ret[] =newbyte[inputs.size()]; |
for (int i =0; i < count; i++) { |
System.out.println('Bit '+ i +' = '+ inputs.getBit(i)); |
} |
k++; |
} while (k < repeat); |
// 8. Close the connection |
con.close(); |
} catch (Exception ex) { |
ex.printStackTrace(); |
// Close the connection |
con.close(); |
} |
}// main |
privatestaticvoidprintUsage() { |
System.out.println( |
'java net.wimpi.modbus.cmd.SerialAscCoilsTest <portname [String]> <Unit Address [int8]> <register [int16]> <wordcount [int16]> {<repeat [int]>}'); |
}// printUsage |
}// class SerialAscCoilsTest |
commented Feb 23, 2019
|
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment
CLI test for MODBUS RTU FC05 'Write Single Coils' with JAMOD
SerialDOTest.java
/** |
* Copyright 2002-2010 jamod development team |
* |
* Licensed under the Apache License, Version 2.0 (the 'License'); |
* you may not use this file except in compliance with the License. |
* You may obtain a copy of the License at |
* |
* http://www.apache.org/licenses/LICENSE-2.0 |
* |
* Unless required by applicable law or agreed to in writing, software |
* distributed under the License is distributed on an 'AS IS' BASIS, |
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
* See the License for the specific language governing permissions and |
* limitations under the License. |
***/ |
packagenet.wimpi.modbus.cmd; |
importnet.wimpi.modbus.Modbus; |
importnet.wimpi.modbus.ModbusCoupler; |
importnet.wimpi.modbus.io.ModbusSerialTransaction; |
importnet.wimpi.modbus.msg.ModbusRequest; |
importnet.wimpi.modbus.msg.WriteCoilRequest; |
importnet.wimpi.modbus.net.SerialConnection; |
// import net.wimpi.modbus.util.BitVector; |
importnet.wimpi.modbus.util.SerialParameters; |
/** |
* Class that implements a simple commandline |
* tool for reading an analog input. |
* |
* @author Dieter Wimberger |
* @version @version@ (@date@) |
*/ |
publicclassSerialDOTest { |
publicstaticvoidmain(String[] args) { |
SerialConnection con =null; |
ModbusSerialTransaction trans =null; |
ModbusRequest req =null; |
String portname =null; |
int unitid =0; |
int ref =0; |
boolean count =false; |
int repeat =1; |
try { |
// 1. Setup the parameters |
if (args.length <4) { |
printUsage(); |
System.exit(1); |
} else { |
try { |
portname = args[0]; |
unitid =Integer.parseInt(args[1]); |
ref =Integer.parseInt(args[2]); |
count ='true'.equals(args[3]); |
if (args.length 5) { |
repeat =Integer.parseInt(args[4]); |
} |
} catch (Exception ex) { |
ex.printStackTrace(); |
printUsage(); |
System.exit(1); |
} |
} |
// 2. Set slave identifier for master response parsing |
ModbusCoupler.getReference().setUnitID(unitid); |
System.out.println('net.wimpi.modbus.debug set to: '+System.getProperty('net.wimpi.modbus.debug')); |
// 3. Setup serial parameters |
SerialParameters params =newSerialParameters(); |
params.setPortName(portname); |
params.setBaudRate(9600); |
params.setDatabits(8); |
params.setParity('None'); |
params.setStopbits(1); |
params.setEncoding('rtu'); |
// params.setEcho(false); |
if (Modbus.debug) { |
System.out.println('Encoding ['+ params.getEncoding() +']'); |
} |
// 4. Open the connection |
con =newSerialConnection(params); |
con.open(); |
// 5. Prepare a request |
req =newWriteCoilRequest(ref, count); |
req.setUnitID(unitid); |
req.setHeadless(); |
if (Modbus.debug) { |
System.out.println('Request: '+ req.getHexMessage()); |
} |
// 6. Prepare the transaction |
trans =newModbusSerialTransaction(con); |
trans.setRequest(req); |
// 7. Execute the transaction repeat times |
int k =0; |
do { |
trans.execute(); |
// if (Modbus.debug) { |
System.out.println('Response: '+ trans.getResponse().getHexMessage()); |
// } |
k++; |
} while (k < repeat); |
// 8. Close the connection |
con.close(); |
} catch (Exception ex) { |
ex.printStackTrace(); |
// Close the connection |
con.close(); |
} |
}// main |
privatestaticvoidprintUsage() { |
System.out.println( |
'java net.wimpi.modbus.cmd.SerialDOTest <portname [String]> <address{:<port>} [String]> <register [int16]> <state [boolean]> {<repeat [int]>}'); |
}// printUsage |
}// class SerialDOTest |
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment