`
hgq0011
  • 浏览: 553567 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

关于java使用javacomm20-win32实践总结

    博客分类:
  • J2SE
阅读更多

                                         关于java使用javacomm20-win32实践总结
        由于这几天要通过java调用通过串口或并口连接的硬件资源,所以我就要用到和底层的硬件进行通讯。通过RS-232的通讯协议,了解电脑和外设是怎样进行通讯的。在应用中我们也可以通过JNI来实现(详情请见http://hgq0011.iteye.com/blog/31508),这样的话,就必须知道更多的知识。由于java已经提供我们一个javacomm20-win32通用的API我们还是实行“拿来主义”吧。我就把整个应用的过程详细的说一下,希望给需要的人一点帮助。
       我们经过串口和外设通讯,下面我就以串口为例进行解说。
       1)我们要准备相应的设备。

             电脑,外设,通过数据线把他们连接起来。
         2)检验外设到底是用的那个COM口和电脑通讯的.

              也就是说,他们有没有真确的连接上。我们可以通过下载串口通讯口测试软件,我用的是"SuperCommTool.exe"的绿色软件,进行测试的。这软件很适应,如果选中的某个COM已经被使用了,它会给你一个相应的提示(端口以被占用)。如果你不知道到底是使用的那个端口,那么你可以通过superCommTool软件一个一个的试,如果正常的话,那么你可以看到有数据显示在数据接收窗口。也许,有些主板的串口坏了,那么你就要买一个转接卡,通过PCI插口转接。
           3)察看外设使用说明书知道外设的相关参数.

                比如,波特率,数据位,停止位,校验位,等等。只有正确参数,才能显示正确的数据。当然,你可以在通讯测试软件上调试这些参数的。比如:波特率 = 2400,数据位 = 8,停止位 = 2 ,校验位 = 1。
            4)准备开发环境。

                 最基本的JDK了,你可以使用自己钟爱的IDE,帮助你开发。IDE可能自带了JDK,那么 你要把相应的javaComm20-win32放到运行时使用的JDK中。 下载JAVAcomm20-win32。
            5)了解javaComm20-win32。

                 你必须把win32com.dll复制到java.home/bin下;把javax.comm.properties复制到java.home/lib下;把comm.jar添加到你classPath下。前面两个都是非常重要的。
                  下面说明用到的几个类:
                         javax.comm.CommPortIdentifier 

                         通讯端口管理器,CommPortIdentifier是控制访问到通讯端口的中 心类。它包括的方法有:
                       a. 通过驱动决定通讯端口是可用的。
                        b. 打开通讯端口为了I/O操作。
                        c. 决定端口的拥有者。
                        d. 解析端口拥有者的争夺。
                        e. 管理事件显示在端口拥有者的中的状态改变。
                       一个应用程序首先使用CommPortIdentifier中的方法,通过相关的驱动去获取那些通讯端口是可用的  并且选择一个端口便于开始。然后它使用方法在其它类中想      CommPort,ParallelPort和SerialPort通过  这个端口进行通讯。
                         javax.comm.SerialPort 

                                一个RS-232串口通讯端口。SerialPort 描述底层的接口到一个串口通讯端口
 变得有效的通过底层的系统。SerialPort定义最小的必需的功能便于串口通讯端口。 

                         javax.comm.SerialPortEventListener 串行端口事件传播。
                         javax.comm.CommDriver

            6)代码的编写。

                  a. 获取SerialPort sPort对象的两种方法。
                  1)                      2)

java 代码
  1. System.loadLibrary("win32com");   
  2.  javax.comm.CommDriver driver = null;   
  3.  String driverName = "com.sun.comm.Win32Driver";   
  4.  SerialPort sPort = (SerialPort) driver.getCommPort("COM4", ommPortIdentifier.PORT_SERIAL);  

 

java 代码
  1. CommPortIdentifier portId = CommPortIdentifier.getPortIdentifier("COM4");   
  2. SerialPort sPort = (SerialPort)portId.open("shipment",1000);      

                     以上两种方法都可以。不过一般都会采用第二种。方法说明我们获取了对串行端口(COM4),可以和它进行通讯了。
                    b. 设置串行端口通讯参数。

java 代码
  1. sPort.setSerialPortParams(2400,SerialPort.DATABITS_8,SerialPort.STOPBITS_2,SerialPort.PARITY_NONE);  

                          c. 获取输入(出)流。

java 代码
  1. InputStream is = sPort.getInputStream();//从外设获取数据   
  2. OutputStream os = sPort.getOutputStream();//发送命令到外设  

                          d.通过监听器就可以得到数据了。

java 代码
  1. //Set notifyOnDataAvailable to true to allow event driven input.   
  2.             sPort.notifyOnDataAvailable(true);   
  3.   
  4.              // Set notifyOnBreakInterrup to allow event driven break handling.   
  5.             sPort.notifyOnBreakInterrupt(true);   
  6.   
  7.              // Set receive timeout to allow breaking out of polling loop during  input handling.   
  8.             sPort.enableReceiveTimeout(30);   
  9.             StringBuffer linkWgt = new StringBuffer();//存放获取的数据   
  10.             sPort.addEventListener(    
  11.                 new SerialPortEventListener(){   
  12.                     public void serialEvent(SerialPortEvent e){   
  13.                         int newData = 0;   
  14.                         // Determine type of event.   
  15.                         switch (e.getEventType()) {   
  16.                         // Read data until -1 is returned. If \r is received substitute   
  17.                             // \n for correct newline handling.   
  18.                             case SerialPortEvent.DATA_AVAILABLE:   
  19.                                 while (newData != -1) {   
  20.                                     try {   
  21.                                         newData = is.read();   
  22.                                         if (newData == -1) {   
  23.                                             break;   
  24.                                         }   
  25.                                         if ('\r' == (char)newData) {   
  26.                                         } else {   
  27.                                             linkWgt.append((char)newData);   
  28.                                         }   
  29.                                     } catch (IOException ex) {   
  30.                                         System.err.println(ex);   
  31.                                         return;   
  32.                                     }   
  33.                                 }   
  34.   
  35.                             // Append received data to messageAreaIn.   
  36.                                
  37.                              try{   
  38.                                 System.out.println("linkWgt ---------|||||          "+Double.valueOf(linkWgt.toString()));   
  39.                                    
  40.                              }catch(Exception ew){   
  41.                                 ew.printStackTrace();   
  42.                              }finally{   
  43.                                 try{   
  44.                                     //用完了,记得关闭端口。   
  45.                                     is.close();   
  46.                                     sPort.close();   
  47.                                 }catch(Exception c){   
  48.                                     c.printStackTrace();   
  49.                                 }   
  50.                              }   
  51.                             break;   
  52.                             // If break event append BREAK RECEIVED message.   
  53.                             case SerialPortEvent.BI:   
  54.                                 System.out.println("\n--- BREAK RECEIVED ---\n");   
  55.                         }   
  56.                     }   
  57.   
  58.                 }   
  59.             );  

                7)常见的异常

                     a. javax.comm.NoSuchPortException   这个说明你的javax.comm.properties没有放到正确的位置。               

                          如果有什么不正确的地方,欢迎批评指正,谢谢!

分享到:
评论

相关推荐

    javacomm20-win32.zip

    在实际应用中,JavaComm20-win32.zip可能还会与其他标签"javacore"相关的技术结合使用,例如Java Core技术,这涵盖了Java语言的基础和高级特性,如内存管理、线程、异常处理、集合框架、I/O流、网络编程等。...

    javacomm20-win32

    因此,在不同平台上使用时,可能需要安装特定的操作系统支持库,例如这里的"javacomm20-win32"。 在实际应用中,开发者还需要关注一些串口通信的常见问题,如串口冲突、数据同步、错误处理等。同时,由于Java Comm ...

    java串口插件win64位.zip

    在使用这个win64位的Java串口插件时,首先需要确保你的开发环境是64位的Java Development Kit (JDK)。然后,解压下载的zip文件,将其中的库文件(通常为jar包)添加到项目的类路径中。这样,你就可以通过导入相关的...

    短信猫收发lib及Demo---comm.jar,javax.comm.properties和win32comm.dll

    4. **win32comm.dll**:这是针对Windows操作系统的动态链接库,是Java Comm API在Windows平台上的实现。它提供了底层的串口通信功能,Java程序通过加载这个库来访问串口设备,比如短信猫。 5. **短信猫接收与发送...

    Java串口通信详解

    在Windows下,需要从SUN官网下载javacomm20-win32.zip,包含win32com.dll、comm.jar和javax.comm.properties。安装步骤包括: - 将win32com.dll复制到JDK的bin目录。 - 将comm.jar复制到JDK的lib目录。 - 将javax....

    基于GPRS和单片机的串口通讯设计.doc

    Java的跨平台性使得上位机可以在多种操作系统上运行,而javacomm20-win32库则提供了在Windows环境下对串口的全面控制,使得上位机可以接收和处理来自GPRS模块的数据。 5. **系统优势** 采用GPRS技术的无线通讯方案...

    java读串口(com口)说明

    1. **下载并安装必要的DLL文件**:从Sun官方网站下载`javacomm20-win32.zip`,该压缩包包含了必要的动态链接库文件(例如`win32com.dll`)。 2. **设置环境**:将上述DLL文件复制到`<JDK>\bin`目录下,并将`comm.jar...

    JAVA操作串口demo&dll;&jar;__win-x86&x64;

    在IT领域,尤其是在Java编程中,串口通信是一种常见的硬件交互方式,用于设备间...使用DEMO作为起点,结合DLL和JAR包,开发者可以快速了解并实践Java串口编程,而开发说明书则进一步帮助他们解决可能出现的问题和挑战。

    SerialComm.7z

    《Java串口通信技术详解——基于win7、Java8、IntelliJ IDEA及RXTXcomm.jar的实现》 在IT行业中,串口通信是一种常见的硬件接口技术,它允许计算机与其他设备之间进行数据交换。本篇文章将深入探讨如何在Windows 7...

    短信猫java,java集成短信接口

    3. **win32com.dll**:这是一个Windows系统下的动态链接库文件,通常用于处理与硬件设备(如短信猫)的底层通信,是Java Comm API在Windows环境下的依赖。 集成短信猫接口的步骤一般包括以下几点: 1. **导入相关...

    全面掌握JAVA串口编程

    在Java串口编程中,了解最佳实践,如使用完串口后及时释放资源,避免并发访问冲突,以及如何确保数据的安全传输,都是非常重要的。此外,遵循OS特定的规范和权限管理,以防止潜在的安全风险。 通过深入学习这些...

    Java串口通信详解收藏

    1. 下载`javacomm20-win32.zip`压缩包。 2. 解压后将`win32com.dll`文件复制到`<JDK>\bin`目录下。 3. 将`comm.jar`文件复制到`<JDK>\lib`目录下。 4. 将`javax.comm.properties`文件也复制到`<JDK>\lib`目录下。 ...

    Java实现串口通讯的必备3个包

    以上就是关于“Java实现串口通讯的必备3个包”的详细解释和相关知识,希望对你在进行Java串口通信开发时有所帮助。在实践中,结合示例代码和文档,你可以更深入地理解并灵活运用这些工具和概念。

    2022年Java串行端口技术协议Java教程.docx

    将comm.jar复制到JRE的lib/ext目录下,win32com.dll放置于应用程序运行目录(即user.dir),javax.comm.properties放入lib目录。需要注意的是,不同操作系统可能需要不同的版本,例如Windows和Solaris,而在Linux...

    vc-sms发短信,以及蓝牙数据传送程序

    在VC++中,通常使用Windows API函数或者第三方库如Win32 API、SerialPort类等来实现串口收发。通过串口,设备可以发送和接收ASCII或二进制数据,例如短信服务(SMS)就是一种常见的应用。在描述中提到的短信发送,可能...

    SerialPortDemo.zip

    由于javax.comm库在Java 1.5之后不再维护,开发者可以使用第三方库如RXTX或者jSerialComm来替代。 2. **SerialPort接口**: `SerialPort`接口是串口操作的核心,提供了打开、关闭串口,设置波特率、数据位、停止位...

    log文件对比

    - **命令行工具**:Linux/Unix中的`diff`命令可以高效地显示两个文件的差异,`comm`命令则可以列出共同的和不共有的行。 - **专用软件**:如WinMerge、Beyond Compare等可视化对比工具,提供直观的界面和丰富的...

Global site tag (gtag.js) - Google Analytics