modbusj例子.docx
- 文档编号:25394603
- 上传时间:2023-06-08
- 格式:DOCX
- 页数:11
- 大小:16.41KB
modbusj例子.docx
《modbusj例子.docx》由会员分享,可在线阅读,更多相关《modbusj例子.docx(11页珍藏版)》请在冰豆网上搜索。
modbusj例子
packagecom.modbus;
importjava.nio.ByteBuffer;
importcom.serotonin.modbus4j.ModbusFactory;
importcom.serotonin.modbus4j.ModbusMaster;
importcom.serotonin.modbus4j.exception.ModbusInitException;
importcom.serotonin.modbus4j.exception.ModbusTransportException;
importcom.serotonin.modbus4j.ip.IpParameters;
importcom.serotonin.modbus4j.msg.ModbusRequest;
importcom.serotonin.modbus4j.msg.ModbusResponse;
importcom.serotonin.modbus4j.msg.ReadHoldingRegistersRequest;
importcom.serotonin.modbus4j.msg.WriteRegistersRequest;
importcom.serotonin.modbus4j.msg.WriteRegistersResponse;
importcom.serotonin.util.queue.ByteQueue;
/**
*modbus处理类
*@author?
*
*/
publicclassModbusHandler{
staticModbusFactorymodbusFactory;
static{
if(modbusFactory==null){
modbusFactory=newModbusFactory();
}
}
/**
*得到WriteRegistersRequest
*
*@paramip
*@paramport
*@paramslaveId
*@paramstart
*@paramvalues
*/
publicstaticWriteRegistersRequestgetWriteRegistersRequest(intslaveId,
intstart,short[]values){
WriteRegistersRequestrequest=null;
try{
request=newWriteRegistersRequest(slaveId,start,values);
}catch(ModbusTransportExceptione){
e.printStackTrace();
}
returnrequest;
}
/**
*得到WriteRegistersRequest
*
*@paramip
*@paramport
*@paramslaveId
*@paramstart
*@paramvalues
*/
publicstaticWriteRegistersResponsegetWriteRegistersResponse(
ModbusMastertcpMaster,WriteRegistersRequestrequest){
WriteRegistersResponseresponse=null;
try{
response=(WriteRegistersResponse)tcpMaster.send(request);
}catch(ModbusTransportExceptione){
e.printStackTrace();
}
returnresponse;
}
/**
*写入
*
*@paramip
*@paramport
*@paramslaveId
*@paramstart
*@paramvalues
*/
publicstaticintmodbusWTCP(Stringip,intport,intslaveId,intstart,
short[]values){
ModbusMastertcpMaster=getTcpMaster(ip,port,slaveId);
if(tcpMaster==null){System.out.println("tcpMasterisnull");return0;}
tcpMaster=initTcpMaster(tcpMaster);
WriteRegistersRequestrequest=getWriteRegistersRequest(slaveId,start,values);
WriteRegistersResponseresponse=getWriteRegistersResponse(tcpMaster,request);
if(response.isException()){
return0;
}else{
return1;
}
}
/**
*初始化?
tcpMaster
*
*@paramtcpMaster
*@return
*/
publicstaticModbusMasterinitTcpMaster(ModbusMastertcpMaster){
if(tcpMaster==null)returnnull;
try{
tcpMaster.init();
returntcpMaster;
}catch(ModbusInitExceptione){
returnnull;
}
}
/**
*得到ModbusRequest
*
*@paramsalveId
*@paramstart
*@paramreadLenth
*@paramtcpMaster
*/
publicstaticModbusRequestgetRequest(intsalveId,intstart,
intreadLenth,ModbusMastertcpMaster){
ModbusRequestmodbusRequest=null;
try{
modbusRequest=newReadHoldingRegistersRequest(salveId,start,readLenth);
returnmodbusRequest;
}catch(ModbusTransportExceptione){
e.printStackTrace();
returnnull;
}
}
/**
*得到ModbusResponse
*
*@paramsalveId
*@paramstart
*@paramreadLenth
*@paramtcpMaster
*/
publicstaticModbusResponsegetModbusResponse(ModbusMastertcpMaster,
ModbusRequestrequest){
ModbusResponsemodbusResponse=null;
try{
modbusResponse=tcpMaster.send(request);
returnmodbusResponse;
}catch(ModbusTransportExceptione){
e.printStackTrace();
returnnull;
}
}
/**
*获取设备数据
*@paramip
*信息机地址ip
*@paramport
*端口默认端口502
*@paramsalveId
*从站地址
*@paramstart
*数据报文的起始位置
*@paramreadLenth
*读取的长度
*@return结果
*/
publicstaticByteQueuemodbusRTCP(Stringip,intport,intsalveId,
intstart,intreadLenth){
ModbusMastertcpMaster=getTcpMaster(ip,port,salveId);//得到tcpMaster
if(tcpMaster==null){System.out.println("tcpMasterisnull");returnnull;
}
returnmodbusRTCP0(ip,port,salveId,start,readLenth,tcpMaster);
}
/**
*获取tcpmaster
*
*@paramip
*@paramport
*@paramsalveId
*/
publicstaticModbusMastergetTcpMaster(Stringip,intport,intsalveId){
IpParametersparams=newIpParameters();
params.setHost(ip);//设置ip
if(port==0)params.setPort(502);//设置端口,默认为502
elseparams.setPort(port);
ModbusMastertcpMaster=modbusFactory.createTcpMaster(params,true);//获取ModbusMaster对象
returntcpMaster;
}
/**
*modbus读取
*
*@paramip
*@paramport
*@paramsalveId
*@paramstart
*@paramreadLenth
*@paramtcpMaster
*@return
*/
publicstaticByteQueuemodbusRTCP0(Stringip,intport,intsalveId,
intstart,intreadLenth,ModbusMastertcpMaster){
if(tcpMaster==null){System.out.println("tcpMasterisnull");returnnull;}
tcpMaster=initTcpMaster(tcpMaster);//初始化tcpmaster
if(tcpMaster==null){System.out.println("tcpMasterisnull");returnnull;
}
ModbusRequestmodbusRequest=getRequest(salveId,start,readLenth,tcpMaster);//得到requst对象
if(modbusRequest==null){System.out.println("requestisnull");returnnull;}
ModbusResponseresponse=getModbusResponse(tcpMaster,modbusRequest);//发送请求,得到Response
ByteQueuebyteQueue=newByteQueue(12);
response.write(byteQueue);
System.out.println("功能"+modbusRequest.getFunctionCode());
System.out.println("从站地址:
"+modbusRequest.getSlaveId());
System.out.println("收到的响应信息大小"+byteQueue.size());
System.out.println("收到的响应信息小:
"+byteQueue);
returnbyteQueue;
}
/**
*Convertbyte[]tohex
*string.这里我们可以将byte转换成int,然后利用Integer.toHexString(int)来转换成16进制字符串
*@paramsrcbyte[]data
*@returnhexstring
*/
publicstaticStringbytesToHexString(byte[]src){
StringBuilderstringBuilder=newStringBuilder("");
if(src==null||src.length<=0){
returnnull;
}
for(inti=0;i intv=src[i]&0xFF; Stringhv=Integer.toHexString(v); if(hv.length()<2){ stringBuilder.append(0); } stringBuilder.append(hv); } returnstringBuilder.toString(); } /** **************************************************** *起始位置15,响应数据: 从站|data包含的传感器个数|datalength|data* **************************************************** * *@parambq */ publicstaticvoidansisByteQueue(ByteQueuebq){ byte[]result=bq.peekAll(); System.out.println("从站地址==="+result[0]); System.out.println("data个数==="+result[1]); System.out.println("data长度==="+result[2]); byte[]temp=null; ByteBufferbuffer=ByteBuffer.wrap(result,3,result.length-3);//直接获取data while(buffer.hasRemaining()){ temp=newbyte[2]; buffer.get(temp,0,temp.length); System.out.print(Integer.parseInt(bytesToHexString(temp),16)+""); } } publicstaticvoidmain(String[]args){ ByteQueueresult=ModbusHandler.modbusRTCP("169.254.48.188",502,2, 15,3); ansisByteQueue(result); short[]shor=newshort[1]; shor[0]=0x33; ModbusHandler.modbusWTCP("169.254.48.188",502,2,15,shor); } }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- modbusj 例子