public static void main(String argv[]) { if (argv.length < 4) { System.out.println("usage: java Modbus dns_name unit reg_no num_regs"); System.out.println("eg java Modbus aswales8.modicon.com 5 0 10"); return; } try { String ip_adrs = argv[0]; int unit = Integer.parseInt(argv[1]); int reg_no = Integer.parseInt(argv[2]); int num_regs = Integer.parseInt(argv[3]); System.out.println( "ip_adrs = " + ip_adrs + " unit = " + unit + " reg_no = " + reg_no + " num_regs = " + num_regs); // set up socket Socket es = new Socket(ip_adrs, 502); OutputStream os = es.getOutputStream(); FilterInputStream is = new BufferedInputStream(es.getInputStream()); byte obuf[] = new byte[261]; byte ibuf[] = new byte[261]; int c = 0; int i; // build request of form 0 0 0 0 0 6 ui 3 rr rr nn nn for (i = 0; i < 5; i++) obuf[i] = 0; obuf[5] = 6; obuf[6] = (byte) unit; obuf[7] = 3; obuf[8] = (byte) (reg_no >> 8); obuf[9] = (byte) (reg_no & 0xff); obuf[10] = (byte) (num_regs >> 8); obuf[11] = (byte) (num_regs & 0xff); // send request os.write(obuf, 0, 12); // read response i = is.read(ibuf, 0, 261); if (i < 9) { if (i == 0) { System.out.println("unexpected close of connection at remote end"); } else { System.out.println("response was too short - " + i + " chars"); } } else if (0 != (ibuf[7] & 0x80)) { System.out.println("MODBUS exception response - type " + ibuf[8]); } else if (i != (9 + 2 * num_regs)) { System.out.println("incorrect response size is " + i + " expected" + (9 + 2 * num_regs)); } else { for (i = 0; i < num_regs; i++) { int w = (ibuf[9 + i + i] << 8) + (ibuf[10 + i + i] & 0x00FF); System.out.println("word " + i + " = " + w); } } // close down es.close(); } catch (Exception e) { System.out.println("exception :" + e); } }