modbus4j例子的具体内容_第1页
modbus4j例子的具体内容_第2页
modbus4j例子的具体内容_第3页
modbus4j例子的具体内容_第4页
modbus4j例子的具体内容_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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 */ 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<src.length;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.print

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论