java读取串口信息

上传人:daj****de 文档编号:213052439 上传时间:2023-05-24 格式:DOCX 页数:10 大小:154.68KB
返回 下载 相关 举报
java读取串口信息_第1页
第1页 / 共10页
java读取串口信息_第2页
第2页 / 共10页
java读取串口信息_第3页
第3页 / 共10页
点击查看更多>>
资源描述
java 读取串口信息(一) 最近在写一个串口程序,业务用要求要用 java web 从串口中读取数据,并显示 在文本框中。具体串口中的信息是从一个能扫描条形码(Barcode)的手持设备上 获取的,手持设备怎么扫描,怎么将信息写入串口我不用关心,我要做的就是从 串口中讲信息读取出来。经过这几天研究,以及参考各种资料,有些小小的收获,分享给大家。第一个问题:我笔记本的串口在哪里?说到串口,也许很多人都要怀疑,这都什么年代了,USB设备已经如此 普及了,谁还能想起这个老掉牙的通信端口呀?其实,在现实生活中,串口正因 为它老,才会在实际使用中经常用到它。举个简单的例子:工业制造及其设备与 计算机之间的通讯、还有在各种电子工厂测试设备的过程中,都无一例外使用的 串口。因为它可以不用像USB设备一样必须有软件驱动的支持才可以进行工作。 现如今,台式电脑基本都还保留着一个串口甚至是两个串口,但是笔记本电脑上 的串口,被越来越多的制造商所抛弃。有很多从事工控、测试等行业的工作人员, 选购笔记本的时候,串口成了他们心中的永远的痛。看似一个简单的接口,对于 他们来说是很重要的。关于什么是串口,串口的分类,以及串口长的什么样子,大家可以去网 上搜一下,上一段的主要信息就是要说明:我们现在的笔记本上没有串口 - -!。第二个问题:没有串口,那我们怎么测试编写串口程序?如今的市面上提供一种usb转串口的工具,具体可以在百度搜索usb转 串口,我是去向隔壁部门借的,据说十几块钱一个,当然得需要两个,我们一般 测试使用这种九针的就可以了,有了这个东西,那就开始动手吧!如图:我的和 这个不一样,我的还带一根延长线。1、插上u转串设备,安装u转串口的驱动,这时右击我的电脑,选择设备管理 器,如果安装成功,就会出现“端口”选项,我的是 win7, xp 的没做测试。如 图:十三 ZGC-2O11O216SLQ占DVD/CDROM驱动器 IDE ATA/ATAPI 控制器-連器J 17 COM LPT)冷? USB-SERJAL CH340 COM3|L? USE-SERJAL CHM40 QOM用| 冼计算机-蝴器 -呻母:鈿人休冷入備;-Ai声音、辄厮0海雄制器门B囱其鳩;“0砸串行就證制器:易圏像设昔丿曾网洛适配器“? Atheros AR9285 8O2.11b/g/n WiFi Adapter -+ M icrosoit Loop back Ada pter“ ? Realtek PCI曰 FE Family Controller *;电案统设昔气豆示肆B器2、问题又来了,两个串口笔记本是能识别了,但是这两个串口怎么连接起来呢? 对此可以去电脑耗材店买一种叫做“串口交叉线”的线,这种线能将两个 usb 转换出来的两个串口连接起来(两个 usb 转成的串口都是带针的口,也就是所谓 的公口),这种“串口交叉线”的两头都是母口,所以正好能连接起来。可惜不 幸的是,我转遍了学校周围,也没有找到“串口交叉线”,人都没听过,没办法, 他们一点也不专业,都不是卖电脑耗材的,本市有卖电脑耗材的地方,可是太远, 来回半天,就只为了一根 6 块钱的线,不值得。网上搜,发现两个串口可以简单的相连,就能达到通信的目的,具体请看下 面的9 针串口功能一览表针脚 功能1 载波检测 ( DCD )2 接收数据 ( RXD )3 发送数据( TXD )4 数据终端准备好 ( DTR )5 信号地 ( GND )6 数据准备好 ( DSR )7 发送请求 ( RTS )8 发送清除 ( CTS )9 振铃指示 ( RI )6 7 8 93 4 5DB9针我们做串口测试,只需要2 口和3 口就好了。意思是将A串口的2针接到B 串口的3针,将A串口的3针接到B串口的2针,这就是所谓的串口交叉,另外 一个就是 5 针是信号地,可以直连,也可以不连,剩下的针脚据说从开发出来至 今还没用到。那就好办了,我去找搞嵌入式的同学问一下能不能做个串口交叉线,结果他 给了我两根线,我不知道该怎么称呼这根线,那么我就贴图出来吧。有了这样的两跟线,可以很方便的讲 2 口和 3 口交叉相连。To Be Continuedjava 读取串口信息(二)2011-11-18 11:15串口连接好了,剩下的就是写程序了1.准备下载 Communication 包下载地址如下:http:/mdubuc.freeshell.org/Jolt/javacomm20win32.zip。2.配置 解压缩 javacomm20win32.zipjava docs2011/11/8 19;38文恃samples2011/11/B 19:38文悻皀 apichang已s,hml199S/11/15 15:59HTML文件4 KB工 comm jar199S/11/15 1600JAR文件23 KB.COM M 2.0_l i c&n s e.txt1998/11/15 15:598 KB=匚 o m mAPI FAQ.txt199B/11/15 15:596 KB.魯m.prop已rtigs1998/11/1S 15:59PROPERTIES 文件i KBjdkl2,html1998/11/15 15:59HTML女件3 KB團 Pl atform Specili c. htm 11998/11/15 15:59HTML文1牛4 KE邑 Readme.html1998/11/15 15:59HTML文件4 KB巴 Rec已1993/11/15 1559HTML文件2 KB倒 win32com.dll1998/11/15 16:00旅1WT晟27 KB把 win32com.dll 拷贝到 JAVA_HOMEjrebin把 comm.jar 拷贝到 JAVA_HOMEjrelibext把 m.properties 拷贝到 JAVA_HOMEjrelib再环境变量的 CLASSPATH 中添加一项:JAVA_HOMEjrelibextcomm.jar;我的 CLASSPATH 添加后为:.;%JAVA_HOME%libtools.jar;%JAVA_HOME%jrelibextcomm.jar;%JAVA_HO ME%libdt.jar;%JAVA_HOME%libjtds.jar;%Tomcat_Home%commonlibserv let-api.jar;3. 列举出本机所有可用串口void listPortChoices() CommPortIdentifier portId;Enumeration en = CommPortIdentifier.getPortIdentifiers();/ iterate through the ports.while (en.hasMoreElements() portId = (CommPortIdentifier) en.nextElement();if (portId.getPortType() = CommPortIdentifier.PORT_SERIAL) System.out.println(portId.getName(); portChoice.select(parameters.getPortName();以上代码可以列举出当前系统所有可用的串口名称,我的机器上输出的结果是 COM3 和 COM4。C: MJsers Mldmin istrator. ZGC-2fll.0216SLQD:Xjauac Test,JauaP:Xjaua TestCOM4COM3t:X4. 下载串口调试程序下载地址:安装后,它会自动辨认计算机的端口,如果电脑没有串口,会提示:“串口不存 在,或被占用”5. 程序package m;import java.io.IOException;import java.io.InputStream;import java.util.Iterator;import java.util.List;import java.util.TooManyListenersException;import m.CommPortIdentifier;import m.PortInUseException;import m.SerialPort;import m.SerialPortEvent;import m.SerialPortEventListener;import m.UnsupportedCommOperationException;public class Readstr static String str = 000000;public void init()tryCommPortIdentifier portId = CommPortIdentifier.getPortIdentifier(COM3);/ 直接取得 COM3 端口Sys tem.o ut .pri ntl n(por tl d.ge tN ame()+:开启); SuppressWarnings(unused)Read reader = new Read(portId);catch(Exception ex) ex.printStackTrace();class Read implements Runnable, SerialPortEventListener InputStream inputStream; SerialPort serialPort; Thread readThread; publicRead(CommPortIdentifierportId)throwsInterruptedException try serialPort = (SerialPort) portId.open(MyReader, 2000); /portld.open(“串口所有者名称,超时等待时间); catch (PortInUseException e) /如果端口被占用就抛出这个异常 e.printStackTrace();try inputStream = serialPort.getInputStream();/从 COM3 获取数据 catch (IOException e) try serialPort.addEventListener(this);/添加监听器 catch (TooManyListenersException e) serialPort.notifyOnDataAvailable(true);/* 侦听到串口有数据 , 触发串口事件 */try serialPort.setSerialPortParams(9600,/ 波特率SerialPort.DATABITS_8,/ 数据位数SerialPort.STOPBITS_1,/ 停止位 SerialPort.PARITY_NONE);/ 校验 catch (UnsupportedCommOperationException e) readThread = new Thread(this); readThread.start();/ 启动线程public void run() try Thread.sleep(30000);serialPort.close();System.out.println(COM3: 关闭 );/ 设定 30 秒后端口关闭,程序随之结束 catch (InterruptedException e) /* BI - 通讯中断 .CD - 载波检测 .CTS -清除发送.DATA_AVAILABLE -有数据到达.DSR -数据设备准备好.FE -帧错误.OE -溢位错误.OUTPUT_BUFFER_EMPTY -输出缓冲区已清空.PE -奇偶校验错.RI - 振铃指示 .一般最常用的就是 DATA_AVAILABLE-串口有数据到达事件。*/public void serialEvent(SerialPortEvent event) switch(event.getEventType() case SerialPortEvent.BI:case SerialPortEvent.OE:case SerialPortEvent.FE:case SerialPortEvent.PE:case SerialPortEvent.CD:case SerialPortEvent.CTS:case SerialPortEvent.DSR:case SerialPortEvent.RI:case SerialPortEvent.OUTPUT_BUFFER_EMPTY:break;case SerialPortEvent.DATA_AVAILABLE:byte readBuffer = new byte20;try while (inputStream.available() 0) int numBytes = inputStream.read(readBuffer); /System.out.println(numBytes+numBytes);str = new String(readBuffer).trim();System.out.println(new String(readBuffer).trim();/ 输出读入的字符 catch (IOException e) break;public static void main(String args)Readstr reader = new Readstr();reader.init();/此程序只用于监听COM3端口,当程序执行时开启COM3端口,等待30秒后, 端口 COM3 关闭,程序随之关闭/Read 为内部类,这样可以共用读取出来的字符串信息/在 Readstr 中定义一个静态变量 static String str = 000000;/然后在读出数据后 str = new String(readBuffer).trim(); /这样可以在一个事件触发后,将 str 中的值赋给相应的值(比如说,让这个值 显示在输入框中)6. 执行程序执行上边的程序,打开超级超级串口调试器,选择除COM3以外的端口,波特率 改为9600,因为上面的程序选择的是COM3端口,波特率为9600,也可以将上边 程序端口改的别的,反正就是:这个串口调试程序占用一个端口,上边的执行程 序再占用一个端口,两个端口不能为同一个,不然会出异常。如图所示:点击手动发送,后台是不是输出数据了?呵呵好了做到这里,我们可以在程序中读取出服务端的串口信息了。但由于项目是B/S的,最终目的是读取出来每个登录客户端的串口信息To Be Continued
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 图纸设计 > 毕设全套


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!