版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 上海市徐汇区上海第四中学2026届生物高一下期末统考试题含解析
- 2026届山东省金乡县金育高级中学生物高三上期末预测试题含解析
- 2025年泰安英语考编笔试真题及答案
- 2025年厚街事业单位编外笔试及答案
- 2025年天津事业单位编外考试题及答案
- 2025年美甲互联网运营面试题库及答案
- 2025年水质化验员实操面试题库及答案
- 2025年海南工商职业学院单招综合素质考试题库附答案解析
- 2025年和田县幼儿园教师招教考试备考题库附答案解析(必刷)
- 2025年栾川县招教考试备考题库及答案解析(夺冠)
- 2026年销售人员心理调适与应对策略试题
- 2026黑龙江哈尔滨家五常市广源农林综合开发有限公司招聘工作人员5人备考题库及一套完整答案详解
- 2026年及未来5年市场数据中国金属铍行业市场竞争格局及发展趋势预测报告
- 2025年建筑工程安全生产标准化手册
- 2025-2030中国动物狂犬病疫苗行业发展现状及趋势前景分析研究报告
- 2026年郑州电力高等专科学校高职单招职业适应性测试参考题库含答案解析
- 制造业员工薪资等级评定及岗位体系方案
- 药品抽检应急预案(3篇)
- 克服ALK靶向耐药的免疫联合治疗新策略
- 基于凝血指标的脓毒症分层管理策略
- 手术室手术前准备规定
评论
0/150
提交评论