Modbus4j.jar 实现ModbusTCP

来源:互联网 发布:司法拍卖网络平台 编辑:程序博客网 时间:2024/05/22 06:38
[cpp] view plain copy
  1. 在这章是用<a target=_blank href="http://download.csdn.net/detail/linxingqianglai/9330571" target="_blank">modbus4j.jar</a>和<a target=_blank href="http://download.csdn.net/detail/linxingqianglai/9330571" target="_blank">seroUtils.jar</a>导入包实现modbus协议。下面的例子是modbus tcp的demo,下一章是讲modbus urt协议的详解  
[cpp] view plain copy
  1. package com.example.testhzau;  
  2.   
  3. import java.util.Date;  
  4.   
  5. import com.serotonin.modbus4j.ModbusFactory;  
  6. import com.serotonin.modbus4j.ModbusMaster;  
  7. import com.serotonin.modbus4j.exception.ModbusInitException;  
  8. import com.serotonin.modbus4j.exception.ModbusTransportException;  
  9. import com.serotonin.modbus4j.ip.IpParameters;  
  10. import com.serotonin.modbus4j.msg.ModbusRequest;  
  11. import com.serotonin.modbus4j.msg.ModbusResponse;  
  12. import com.serotonin.modbus4j.msg.ReadHoldingRegistersRequest;  
  13. import com.serotonin.modbus4j.msg.WriteRegistersRequest;  
  14. import com.serotonin.modbus4j.msg.WriteRegistersResponse;  
  15. import com.serotonin.util.queue.ByteQueue;   
  16. public class ReadAWriteUtil {  
  17.     public static void modbusWTCP(String ip, int port, int slaveId, int start, short[] values) {  
  18.         ModbusFactory modbusFactory = new ModbusFactory();  
  19.         // 设备ModbusTCP的Ip与端口,如果不设定端口则默认为502  
  20.         IpParameters params = new IpParameters();  
  21.         params.setHost(ip);  
  22.         if (502 != port) {  
  23.             params.setPort(port);  
  24.         }// 设置端口,默认502  
  25.         ModbusMaster tcpMaster = null;  
  26.         // 参数1:IP和端口信息 参数2:保持连接激活  
  27.         tcpMaster = modbusFactory.createTcpMaster(params, true);  
  28.         try {  
  29.             tcpMaster.init();  
  30.             System.out.println("===============" + 1111111);  
  31.         } catch (ModbusInitException e) {  
  32.             // System.out.println("11111111111111=="+"此处出现问题了啊!");  
  33.             // 如果出现了通信异常信息,则保存到数据库中  
  34.              //CommunityExceptionRecord cer = new CommunityExceptionRecord();  
  35.             //cer.setDate(new Date());  
  36.             //cer.setIp(ip);  
  37.             // cer.setRemark(bgName+"出现连接异常");  
  38.             // batteryGroupRecordService.saveCommunityException(cer);  
  39.         }  
  40.         try {  
  41.             WriteRegistersRequest request = new WriteRegistersRequest(slaveId, start, values);  
  42.             WriteRegistersResponse response = (WriteRegistersResponse) tcpMaster.send(request);  
  43.             if (response.isException())  
  44.                 System.out.println("Exception response: message=" + response.getExceptionMessage());  
  45.             else  
  46.                 System.out.println("Success");  
  47.         } catch (ModbusTransportException e) {  
  48.             e.printStackTrace();  
  49.         }  
  50.     }  
  51.       
  52.     public static ByteQueue modbusTCP(String ip, int port, int start,int readLenth) {  
  53.         ModbusFactory modbusFactory = new ModbusFactory();  
  54.         // 设备ModbusTCP的Ip与端口,如果不设定端口则默认为502  
  55.         IpParameters params = new IpParameters();  
  56.         params.setHost(ip);  
  57.         if(502!=port){params.setPort(port);}//设置端口,默认502  
  58.         ModbusMaster tcpMaster = null;  
  59.             tcpMaster = modbusFactory.createTcpMaster(params, true);  
  60.             try {  
  61.                 tcpMaster.init();  
  62.                 System.out.println("==============="+1111111);  
  63.             } catch (ModbusInitException e) {  
  64.                 return null;  
  65.             }  
  66.             ModbusRequest modbusRequest=null;  
  67.             try {  
  68.                 modbusRequest = new ReadHoldingRegistersRequest(1, start, readLenth);//功能码03  
  69.             } catch (ModbusTransportException e) {  
  70.                 e.printStackTrace();  
  71.             }  
  72.             ModbusResponse modbusResponse=null;  
  73.             try {  
  74.                 modbusResponse = tcpMaster.send(modbusRequest);  
  75.             } catch (ModbusTransportException e) {  
  76.                 e.printStackTrace();  
  77.             }  
  78.             ByteQueue byteQueue= new ByteQueue(12);  
  79.             modbusResponse.write(byteQueue);  
  80.             System.out.println("功能码:"+modbusRequest.getFunctionCode());  
  81.             System.out.println("从站地址:"+modbusRequest.getSlaveId());  
  82.             System.out.println("收到的响应信息大小:"+byteQueue.size());  
  83.             System.out.println("收到的响应信息值:"+byteQueue);  
  84.             return byteQueue;  
  85.     }  
  86. }  
0 0
原创粉丝点击