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;
|
}
|
}
|
}
|