




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高中生物学SSI教学培养学生科学思维的实践研究
- 数据中心机柜的隔震性能研究
- 大型活动安保培训
- 有害物质基础知识培训
- 预防儿童性侵课件
- 核心领导力培训
- 音乐课件的技能与技巧
- 音乐说课课件《梁祝》
- 市政污水管网改造项目节能评估报告(模板)
- 2025年电子用高纯气体项目建议书
- 医学课件-快速康复ERAS普外科幻灯教学课件
- 关联交易同期资料培训讲义课件
- 2022年北京公共交通控股(集团)有限公司招聘笔试试题及答案解析
- 压力管道基础知识(管理类)
- 气体灭火系统验收表1
- 新北师大版六年级上册数学全册教学课件
- DB1309T 256-2021 榆三节叶蜂综合防治技术规程
- 土木工程概论全套课件完整版电子教案最新板
- 超星尔雅学习通《声光影的内心感动电影视听语言(四川大学)》章节测试答案
- 燃气工程计价规则及定额应用
- 上教社深圳版小学英语1-6年级单词汇总
评论
0/150
提交评论