Sei sulla pagina 1di 7

import javax.comm.*; import import import import import import import import import import java.io.OutputStream; java.util.*; net.wimpi.modbus.

*; net.wimpi.modbus.msg.*; net.wimpi.modbus.io.*; net.wimpi.modbus.net.*; net.wimpi.modbus.procimg.DefaultProcessImageFactory; net.wimpi.modbus.procimg.Register; net.wimpi.modbus.procimg.SimpleRegister; net.wimpi.modbus.util.*;

public class SerialPortClass { String respons_str = null ; boolean comOpen_flag = false , res_flag = true , flag = false ; @SuppressWarnings("unchecked") Vector v_response =new Vector(); /* The important instances of the classes mentioned before */ SerialConnection con = null; //the connection ModbusSerialTransaction trans = null; //the transaction ModbusRequest mreq = null;//the modbus request //Read Register ReadMultipleRegistersRequest read_req = null; ReadMultipleRegistersResponse read_res = null; //the response Register reges = null; Register[] registers = null; DefaultProcessImageFactory dpif = null; //Write Single Register(Word) WriteSingleRegisterRequest write_sreq = null; WriteSingleRegisterResponse write_sres = null; //Write Multiple Registers(Words) WriteMultipleRegistersRequest write_mreq = null; WriteMultipleRegistersResponse write_mres = null; int unitid = 1; //the unit identifier we will be talking to int ref = 31; //the reference, where to start reading from int repeat = 0; //a loop for repeating the transaction private ModbusCoupler modbusCoupler = null; SerialParameters params; public static void main(String args[]) { try { SerialPortClass spc = new SerialPortClass(); spc.createSerial("COM1", 9600, 8, SerialPort.PARITY_NONE ,1, "RTU",true, 5000); //boolean f= spc.readDatas(30, 4); System.out.println("Res "+spc.readDatas(55, 1,1)); }

catch(Exception e) { e.printStackTrace(); } } public SerialPortClass() { } public boolean createSerial(String portN,int bd,int dbits,int parity,int sbits,String ecoding,boolean echo,int recTimeout) { try { String drivername = "com.sun.comm.Win32Driver"; try { CommDriver driver = (CommDriver)Class.forName(dr ivername).newInstance(); driver.initialize(); } catch(Exception e) { System.out.println(" exception in initialize : " +e); e.printStackTrace(); } //2. Set master identifier modbusCoupler = ModbusCoupler.getReference(); modbusCoupler.setUnitID(0); modbusCoupler.setMaster(true); //3. Setup serial parameters params = new SerialParameters(); params.setPortName(portN); params.setBaudRate(bd); params.setDatabits(dbits); params.setParity(parity); params.setStopbits(sbits); params.setEncoding(ecoding); params.setEcho(echo); params.setReceiveTimeout(recTimeout); //params.setFlowControlIn(SerialPort.FLOWCONTROL_RTSCTS_ IN); //params.setFlowControlOut(SerialPort.FLOWCONTROL_RTSCTS _OUT); //4. Open the connection con = new SerialConnection(params); con.open(); comOpen_flag= true; System.out.println("Serial Port Created"); } catch(Exception e1)

{ System.out.println("ERROR in Serial Port Initialization : "+ e1 ); e1.printStackTrace(); con.close(); comOpen_flag=false; } return flag; } public boolean conClose() { try { con.close(); flag=true; } catch(Exception e) { System.out.println("Error in Connection Close : "+ e.get Message() ); e.printStackTrace(); flag=false; } return flag; } @SuppressWarnings("unchecked") public String readDatas(int start_add,int word_count,int menu) { respons_str=null; try { /********** Read Multiple Datas ************/ //5. Prepare a request ref=start_add; read_req = new ReadMultipleRegistersRequest(); read_req.setUnitID(unitid); read_req.setHeadless(); read_req.setReference(ref); read_req.setWordCount(word_count); if(menu!=1){read_res.setDataLength(11);} //6. Prepare a transaction System.out.println("Preparing Transaction...."); trans = new ModbusSerialTransaction(con); trans.setRequest(read_req); trans.setRetries(3); //7. Execute the transaction repeat times int k = 0; System.out.println("Executing Transaction...."); System.out.println("RTS: "+ con.getSerialPort().isRTS()) ; System.out.println("DTR: "+ con.getSerialPort().isDTR()) ; System.out.println("Delay: "+ trans.getTransDelayMS()); System.out.println("Flow Mode: "+ params.getFlowControlI nString()); System.out.println("Flow Mode: "+ params.getFlowControlO

utString()); System.out.println("echo: "+ params.isEcho()); do { System.out.println( "Sent Request: " + read_req. getHexMessage() ); trans.execute(); ModbusResponse mr = trans.getResponse(); read_res = ( ReadMultipleRegistersResponse ) mr ; k++; } while ( k < repeat ); System.out.println("RTS: "+ con.getSerialPort().isRTS()) ; System.out.println("DTR: "+ con.getSerialPort().isDTR()) ; respons_str = read_res.getHexMessage(); res_flag = true; System.out.println( "Response Frame: " + read_res.getHex Message() ); System.out.println("Transaction Completed."); System.out.println("Evaluating Response Frame...."); if( read_res.getFunctionCode() == 3 && read_res.getUnitI D() == read_req.getUnitID() ) { res_flag = true; v_response.clear(); v_response.removeAllElements(); for( int i=0 ; i < read_res.getWordCount() ; i++ ) { v_response.add( Integer.toHexString( rea d_res.getRegisterValue(i) ) ); } System.out.println( " Response Vector : " + v_re sponse + " Count: " + v_response.size() ); } } catch(Exception e) { System.out.println( "Error in Reading : " + e.getMessage () ); e.printStackTrace(); respons_str= "exp" ; res_flag = false; } return respons_str; } public boolean writeSingleData(int start_add,byte[] bytes) { try { /************ Write Single Data **************/ //5. Prepare a request

ref = start_add; dpif = new DefaultProcessImageFactory(); reges = new SimpleRegister( bytes[0] , bytes[1] ); write_sreq = new WriteSingleRegisterRequest( ref , reges ); write_sreq.setUnitID( unitid ); write_sreq.setHeadless(); // Prepare a Transaction System.out.println("Preparing Transaction...."); trans = new ModbusSerialTransaction( con ); trans.setRequest( write_sreq ); trans.setRetries(1); // Execute Transaction System.out.println("Executing Transaction...."); trans.execute(); System.out.println("Sent Request: " + write_sreq.getHexM essage() ); // Get Response System.out.println("Getting Response...."); write_sres = ( WriteSingleRegisterResponse ) trans.getRe sponse(); System.out.println( "Response : FCode= " + Integer.parse Int( write_sres.getFunctionCode() + "" , 16 ) + " msg= " + write_sres.getHexMess age() ); respons_str = write_sres.getHexMessage(); System.out.println("Transaction Completed."); System.out.println("Evaluating Response...."); if( write_sres.getFunctionCode() == 6 ) { res_flag = true; System.out.println( "Transaction Success!" ); } else { res_flag=false; System.out.println( " Transaction Failed! " ); } } catch(Exception e) { System.out.println(" Error in Single Write Operation : " + e.getMessage() ); e.printStackTrace(); res_flag = false; respons_str = "exp" ; } return res_flag; } public boolean writeMultipleDatas(int start_add,byte[] bytes) { try

{ /********* Write Multiple Data ************/ //5. Prepare a request ref=start_add; int bytecount = bytes.length / 2; registers = new Register[ bytecount ]; for( int i=0,j=0 ; i<bytes.length ; i=i+2,j++ ) { registers[ j ] = new SimpleRegister( bytes[ i ] , bytes[ i+1 ] ); } try { Thread.sleep(2); } catch(Exception ee) { } write_mreq = new WriteMultipleRegistersRequest(); write_mreq.setDataLength(9); write_mreq.setReference(ref); write_mreq.setRegisters(registers); write_mreq.setUnitID(unitid); write_mreq.setHeadless(); // Preparing Transaction System.out.println("Preparing Transaction...."); trans = new ModbusSerialTransaction( con ); trans.setRequest( write_mreq ); trans.setRetries( 1 ); // Execute Transaction System.out.println("Executing Transaction...."); trans.execute(); System.out.println( " Sent Request: " + write_mreq.getHe xMessage() ); // Get Response System.out.println( " Getting Response.... " ); write_mres = ( WriteMultipleRegistersResponse ) trans.ge tResponse(); System.out.println( " Response " + Integer.parseInt( ( w rite_mres.getFunctionCode() + "" ) , 16 ) + " msg: " + write_mres.getHexMessage( ) ); System.out.println("Transaction Completed."); // Evaluate Response System.out.println("Evaluating Response...."); if( write_mres.getFunctionCode() == 16 ) { res_flag = true; System.out.println( "Transaction Success!" ); } else

{ res_flag = false; System.out.println( "Transaction Failed!" ); } } catch( Exception e ) { System.out.println(" Error in Multiple Write Operation : " + e.getMessage() ); e.printStackTrace(); res_flag = false; respons_str = "exp" ; } return res_flag; } }

Potrebbero piacerti anche