package toTcp; import static java.lang.System.arraycopy; public class DLT645_2007Control { // ¶ÁÊý¾Ý ,´«Èëµç±íµÄ±íºÅºóÉú³É ¶ÁÊý¾ÝµÄÃüÁ½«ÃüÁî·¢Ë͵½µç±í public byte[] ReadData(String address) { byte[] readcommand = new byte[20]; readcommand[0] = (byte) 0xFE; // ÍøÉÏ×ÊÁÏËµÇ°ÃæÒª¼ÓËĸö¹Ì¶¨µÄ 0xFE£¬ readcommand[1] = (byte) 0xFE; readcommand[2] = (byte) 0xFE; readcommand[3] = (byte) 0xFE; readcommand[4] = (byte) 0x68;// ÕæÕýµÄÊý¾ÝÖ¡ÆðʼλÖà byte[] addressbytes = setAddrByte(address); // µç±íµÄµØÖ· ת³É16½øÖÆ£¬ÓÐÒ»¸öµ¹ÐòµÄ²Ù×÷ arraycopy(addressbytes, 0, readcommand, 5, addressbytes.length); readcommand[11] = (byte) 0x68;// ¹Ì¶¨¸ñʽ readcommand[12] = (byte) 0x11;// ±íʾ ¶ÁÊý¾Ý readcommand[13] = (byte) 0x04;// ºóÃæ Êý¾ÝÏîµÄ³¤¶È // byte[] dataTypeBytes = new byte[] { (byte) 0x00, (byte) 0x00, (byte) // 0x00, (byte) 0x00 };//¶Áµç±íµÄÓй¦×ܵçÄÜ byte[] dataTypeBytes = new byte[] { (byte) 0x00, (byte) 0x00, (byte) 0x01, (byte) 0x00 };// Êý¾ÝÏî´úÂ룺 // ¶Áµç±íµÄÕýÏòÓй¦×ܵçÄÜ if (dataTypeBytes != null) { for (int i = 0; i < dataTypeBytes.length; i++) { dataTypeBytes[i] += 0x33; } } arraycopy(dataTypeBytes, 0, readcommand, 14, dataTypeBytes.length); readcommand[18] = getSigned(getCSCode(readcommand, 4, 17)); readcommand[19] = (byte) 0x16; return readcommand; } // ½âÎö´ÓÉ豸·µ»ØµÄÊý¾Ý public static void ReturnData(byte[] returndatas) { float reslut =0; if (returndatas.length > 8) { if (returndatas[8] == (byte) 0x91)// ¶ÔÓ¦¶ÁÊý¾ÝÃüÁî11 µÄÕýÈ·Ó¦´ð { String EachByteAddress = GetBCDAddress(returndatas); // µÃµ½ // µ±Ç°·µ»ØÊý¾Ý´ú±íµÄ // µç±í±íºÅ boolean check = checkData(returndatas); if (check) { int[] read_ints = new int[returndatas.length]; for (int i = 0; i < returndatas.length; i++) { if ((int) returndatas[i] > 0) { read_ints[i] = (int) returndatas[i]; } else { read_ints[i] = (int) returndatas[i] + 256; } } if (read_ints[8] == 0x91) { int lengthOfData = read_ints[9];// Êý¾Ý³¤¶È; byte[] data = new byte[lengthOfData - 4]; for (int d = 0; d < lengthOfData - 4; d++) { data[d] = (byte) (read_ints[14 + d] - 0x33); } int value = 0; for (int v = 0; v < lengthOfData - 4; v++) { value = v + (data[v] * 10 / 16 + (data[v]) % 16) * 100 ^ v; } reslut = value * 0.01f;// value *0.01 ÊÇ×îÖÕµÄ ÕýÏòÓй¦×ܵçÄÜ } } } } // System.out.println(reslut); } // °Ñ±íºÅµØÖ·×ª³É16½øÖÆ public byte[] setAddrByte(String addr) { byte[] addressByte = new byte[6]; for (int i = 11; i > 0; i -= 2) { int a = addr.charAt(i); int b = addr.charAt(i - 1); // ÓÉÓÚµØÖ·ÊÇ16½øÖÆ£¬ËùÒÔÏȽøÐÐÅÐ¶Ï // A - F if (a >= 65 && a <= 70) { a -= 15; } else if (a >= 97 && a <= 102) { a -= 87; } else { a -= 48; } if (b >= 65 && b <= 70) { b -= 15; } else if (b >= 97 && b <= 102) { b -= 87; } else { b -= 48; } addressByte[(11 - i) / 2] = (byte) (b * 16 + a); } return addressByte; } // °Ñ16½øÖƵıíºÅÊý¾Ý ת³É×Ö·û´®ÐÎʽµÄ±íºÅ public static String GetBCDAddress(byte[] address) { byte[] byteAddress = new byte[6]; arraycopy(address, 1, byteAddress, 0, 6); String addr = ""; String EachByteAddress; int bitdata; for (byte addr_b : byteAddress) { if (addr_b < 0) { bitdata = addr_b + 256; } else { bitdata = addr_b; } EachByteAddress = bitdata / 16 + "" + bitdata % 16; addr = EachByteAddress + addr; } return addr; } // CSУÑéÂë private int getCSCode(byte[] byteFrame, int i, int j) { int s = 0; for (int k = i; k <= j; k++) { s += (byteFrame[k] & 0xff) % 256; } return s; } // ½«ÎÞ·ûºÅ(ÐÎʽÉϵÄ)µÄÊý¾Ýת»¯³ÉÓзûºÅµÄbyteÊý¾ÝÖµ private byte getSigned(int a) { if (a > 0x7f) return (byte) (a - 256); else return (byte) (a); } // УÑé ·µ»ØµÄÊý¾Ý°üÄÚÈÝ static boolean checkData(byte[] data) { byte s = 0; int j; for (j = data.length - 1; j > 0; j--) { if (data[j] == 22) { break; } } for (int i = 0; i < j - 1; i++) { s += (data[i] & 0xff) % 256; } // System.out.println(s); if (s == data[j - 1]) { return true; } else { return false; } } }