本文主要讲述串口调试的Java工具类,并实现循环发送指令,接收数据!!
本文主要实现的功能是调用工具类中打开串口方法,连接传感器所在串口,向串口(传感器)发送指令,并接收串口(传感器)数据。
主函数-----main():
public static void main(String[] args){
SerialTool st =SerialTool.getSerialTool();//实例化一个串口工具类对象
String portName = "COM9";//传感器连接的串口
int baudrate = 9600;//设置波特率
List<String> portNameList = st.findPort();//查询所有可用串口
for(int i=0;i<portNameList.size();i++) {
System.out.println("可能串口:"+portNameList.get(i));
}
//打开串口
SerialPort serialPort = null;
try {
serialPort = st.openPort(portName, baudrate);//打开串口
} catch (PortInUseException e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
} catch (NoSuchPortException e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
}
//解析指令
List<Attribute> list = serialMessage.dealxml();
while(true){//循环发送指令接收数据
for (Attribute attr : list) {
String order = attr.getValue();//获取指令
order = order.replaceAll(" ", "");
byte[] order1 = hexStringToByteArray(order);//十六进制转字节数组
//发送数据
st.sendToPort(serialPort, order1);
try {
Thread.sleep(2000);//休眠2秒
} catch (InterruptedException e) {
e.printStackTrace();
}
//读取数据
byte[] shuju = st.readFromPort(serialPort);//读取传感器数据
String s=bytesToHex(shuju);//字节数组转16进制
System.out.println("传感器返回数据为:"+s);
ProcessMethod.ZPFunction(s,order);
try {
Thread.sleep(5000);//休眠5秒
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
byte数组转16进制-----bytesToHex(byte[] bytes):
/**
* byte字节数组转16进制
*/
public static String bytesToHex(byte[] bytes) {
StringBuffer sb = new StringBuffer();
for(int i = 0; i < bytes.length; i++) {
String hex = Integer.toHexString(bytes[i] & 0xFF);