JAVA实现思谷SG-HR-I5读卡头识别RFID (适应所有支持tpc通讯硬件数据交互)
概要
提示:主要应用于自动化RFID系统读取EPC
一,根据读卡头IP地址发送读取指令
//获取读卡头信息
public static String getRfidEpc(String ip){
//控制条码头识别rfid
String readMsg = telnetSocket(ip, 3001, "FF 05 01 00 01 00 78 D8");
if (readMsg.length()==32){
readMsg = readMsg.substring(14, 30);
System.out.println(readMsg);
}else {
System.out.println("未识别到正确");
return null;
}
return readMsg;
}
二,创建Socket连接
public static String telnetSocket(String ip,int port,String sendMsg){
InputStream in =null;
OutputStream out =null;
Socket socket =null;
String readMsg = "";
try {
// 创建一个Socket对象,连接到硬件设备的IP地址和端口号
socket = new Socket(ip, port);
socket. setSoTimeout(1000);//设置超时1000毫秒
// 获取输入输出流
in = socket.getInputStream();
out = socket.getOutputStream();
//转换字符16进制表示的字符串转换为字节数组
byte[] bytes = hexStringToByteArray(sendMsg);
//发送
out.write(bytes);
out.flush();
// 读取从硬件设备返回的数据
byte[] dataReceived = new byte[16];
int len = in.read(dataReceived);
if (len > 0) {
//将字节数组转换成十六进制的字符串
readMsg= BinaryToHexString(dataReceived).replaceAll("\\s*","");
}
}catch (IOException e){
// 连接失败日志
}finally {
try {
if (in!=null){
in.close();
}
if (out!=null){
out.close();
}
if (socket!=null){
socket.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return readMsg;
}
/**
* 16进制表示的字符串转换为字节数组
*
* @param hexString 16进制表示的字符串
* @return byte[] 字节数组
*/
public static byte[] hexStringToByteArray(String hexString) {
hexString = hexString.replaceAll(" ", "");
int len = hexString.length();
byte[] bytes = new byte[len / 2];
for (int i = 0; i < len; i += 2) {
// 两位一组,表示一个字节,把这样表示的16进制字符串,还原成一个字节
bytes[i / 2] = (byte) ((Character.digit(hexString.charAt(i), 16) << 4) + Character
.digit(hexString.charAt(i + 1), 16));
}
return bytes;
}
/**
* 将字节数组转换成十六进制的字符串
*
* @return
*/
public static String BinaryToHexString(byte[] bytes) {
String hexStr = "0123456789ABCDEF";
String result = "";
String hex = "";
for (byte b : bytes) {
hex = String.valueOf(hexStr.charAt((b & 0xF0) >> 4));
hex += String.valueOf(hexStr.charAt(b & 0x0F));
result += hex + " ";
}
return result;
}
小结
提示:需提前设置读卡头的IP地址跟连接方式,未读取到有些读卡头也有返回值需自行测试剔除,本方法适用于所有硬件设备