糖尿病康复,内容丰富有趣,生活中的好帮手!
糖尿病康复 > java读取串口设备信息_Java--串口之间的通信及扫描枪的读取

java读取串口设备信息_Java--串口之间的通信及扫描枪的读取

时间:2023-05-13 11:15:11

相关推荐

java读取串口设备信息_Java--串口之间的通信及扫描枪的读取

界面是用窗体表现的

界面的实现就不过多的贴代码和说怎么去实现了,有个很好用的工具 NETBean,可以直接拖控件,跟C#做winfrom很像,但是eclipse没有 要自己布局的话比较耗时。ok,先说窗体下半部分的实现

需要用到的jar包:comm.jar ,可以在网上搜下如何配置

一. 首先搜索串口

void listPort() {

CommPortIdentifier portId; //这个类在comm.jar中

Enumeration a = CommPortIdentifier.getPortIdentifiers();

while (a.hasMoreElements()) {

portId = (CommPortIdentifier) a.nextElement();

if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) {

list.add(portId.getName()); //这里的list是个成员变量,add之后再下拉框中刷新进去

}

}

}

波特率,数据位这些可以直接事先放在数组里面,界面一启动就加 载进去了

二.打开串口

public void selectPort(String portName, int rate, int databit, int stopbit,int parity) {

System.out.println("selectPort()");

mPort = null;

CommPortIdentifier cpid;

Enumeration en = CommPortIdentifier.getPortIdentifiers(); // 枚举出所 有的串口

while (en.hasMoreElements()) {

cpid = (CommPortIdentifier) en.nextElement();

if (cpid.getPortType() == CommPortIdentifier.PORT_SERIAL

&& cpid.getName().equals(portName)) {

mPort = cpid;

break;

}

}

openPort(rate, databit, stopbit, parity);

}

/**

* @功能:打开串口

**

**/

private void openPort(int rate, int databit, int stopbit, int parity) {

System.out.println("openPort()");

// TODO Auto-generated method stub

if (commPort == null)

//无法找到这个端口

else {

//成功找到

try {

serialPort = (SerialPort) commPort.open(appName, timeout);

try {

serialPort.setSerialPortParams(rate, SerialPort.DATABITS_8,

SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);//这里过来参数是int,要转成16进制,为了方便看代码我就不转化,直接用他的变量了

} catch (UnsupportedCommOperationException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

log("实例SerialPort成功");

} catch (PortInUseException e) {

throw new RuntimeException(String.format("端口为'%1$s'的串口正在被使用!",

commPort.getName()));

}

}

}

到这里串口就成功打开了

在写上部分如何实现前,先说说扫描枪的工作

相当于最后的字符带了回车的键盘输入,就这样,

三.如何将信息写另一个互相通信的端口

将接收到的字符串转换成16进制:

public static byte[] HexStringBytes(String src) {

if (null == src || 0 == src.length()) {

return null;

}

byte[] ret = new byte[src.length()/2];

byte[] tmp = src.getBytes();

// System.out.println("tmp="+Arrays.toString(tmp));

/*

* int length = 0; if (tmp.length % 2 != 0) { length=(tmp.length+1)/2; }

* length=tmp.length;

*/

for (int i = 0; i < (tmp.length / 2); i++) {

ret[i] = uniteBytes(tmp[i * 2], tmp[i * 2 + 1]);

}

return ret;

}

/*

* 以字节的形式写进去

*/

public void write(byte[] message) {

System.out.println("write()");

checkPort();

try {

outputStream = new BufferedOutputStream(

serialPort.getOutputStream());

} catch (IOException e) {

throw new RuntimeException("获取端口的输出流出错");

}

try {

outputStream.write(message);

log("信息发送成功");

} catch (IOException e) {

throw new RuntimeException("向端口发送信息失败");

} finally {

try {

outputStream.close();

} catch (Exception e) {

}

}

}

如果你正在寻找一款可用于二次开发的扫描枪请联系我们,我们提供完整的SDK包下载:

如果觉得《java读取串口设备信息_Java--串口之间的通信及扫描枪的读取》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。