modbus tcp java使用jamod

private static String readByTCP(String ip, int port, String func, int ref, int quantity, Integer unitId) throws Exception {
TCPMasterConnection con = null; // the connection
ModbusTCPTransaction transaction = null; // the transaction
// ModbusRequest req = null; // the request
try {
ModbusResponse res = null; // the response
String data = null;
InetAddress addr = InetAddress.getByName( ip );
con = new TCPMasterConnection( addr );
con.setPort( port );
con.connect();
transaction = new ModbusTCPTransaction( con );
ModbusRequest request = getReadRequest( func, ref, quantity );
// logger.info( "req=" + request );
if (unitId != null)
request.setUnitID( unitId );
transaction.setRequest( request );
transaction.execute();
res = transaction.getResponse();
return getResponseString( res );
} catch (Exception e) {
e.printStackTrace();
}
return null;

}

public static ModbusRequest getReadRequest(String func, int ref, int quantity) {
if (func.equals( "05" ))// 功能码:05
return new WriteCoilRequest( ref, true );
else if (func.equals( "01" ))// 功能码:01
return new ReadCoilsRequest( ref, quantity );
else if (func.equals( "02" ))// 功能码:02
return new ReadInputDiscretesRequest( ref, quantity );
else if (func.equals( "04" ))// 功能码:04
return new ReadInputRegistersRequest( ref, quantity );
else if (func.equals( "03" ))// 功能码:03
return new ReadMultipleRegistersRequest( ref, quantity );
else if (func.equals( "06" )) {
Register r = ModbusCoupler.getReference().getProcessImageFactory().createRegister();
// r.setValue( 420 );
// 功能码:06
return new WriteSingleRegisterRequest( 0, r );
} else if (func.equals( "16" ))// 功能码:16 return new
{
Register rr = ModbusCoupler.getReference().getProcessImageFactory().createRegister();
rr.setValue( 420 );
return new WriteMultipleRegistersRequest( 0, new Register[] { rr } );
}


return null;


}

private static String getResponseString(ModbusResponse res) {
String data = null;
if (res == null) {
logger.info( "UDP请求无返回值" );
return null;
}
logger.info( "\nTransactionID=" + res.getTransactionID() + "\nProtocolID=" + res.getProtocolID() + "\nDataLength=" + res.getDataLength()
+ "\nUnitID=" + res.getUnitID() + "\nFunctionCode=" + res.getFunctionCode() + "\nHexMessage=" + res.getHexMessage() + "" );
if (res instanceof ReadCoilsResponse) {
ReadCoilsResponse t = (ReadCoilsResponse) res;
logger.info( "\ndata=" + t.getCoils().toString() );
data = t.getCoils().toString();
}
if (res instanceof ReadInputDiscretesResponse) {
ReadInputDiscretesResponse t = (ReadInputDiscretesResponse) res;
logger.info( "\ndata=" + t.getDiscretes().toString() );
data = t.getDiscretes().toString();
System.out.println( "t.getDiscretes():" + t.getDiscretes().toString() );
}
if (res instanceof ReadInputRegistersResponse) {
ReadInputRegistersResponse t = (ReadInputRegistersResponse) res;


InputRegister[] s = t.getRegisters();
List<Integer> valList = new ArrayList<Integer>();
for (InputRegister ss : s) {
// System.out.println( ss.getValue() );
valList.add( ss.getValue() );
}
data = "04-" + StringUtils.join( valList, "-" );
logger.info( "\ndata=" + data );
}
if (res instanceof ReadMultipleRegistersResponse) {
ReadMultipleRegistersResponse t = (ReadMultipleRegistersResponse) res;
// logger.info( "\ndata=" + t.getRegisters().toString() );
Register[] rlist = t.getRegisters();
List<Integer> valList = new ArrayList<Integer>();
for (Register r : rlist) {
valList.add( r.getValue() );
}
data = "03-" + StringUtils.join( valList, "-" );
logger.info( "\ndata=" + data );
}
return data;
}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值