logo资料库

利用comm_jar开发包实现Java与单片机全双工串口通信.pdf

第1页 / 共4页
第2页 / 共4页
第3页 / 共4页
第4页 / 共4页
资料共4页,全文预览结束
 第 2 期  2005 年 4 月 工 矿 自 动 化   Industry and Mine Automation   No. 2   Apr. 2005   文章编号 :1671 - 251X(2005) 02 - 0049 - 04 利用 comm. jar 开发包实现 Java 与单片机 全双工串口通信 霍晓丽1 ,  贾祥芝2 (1. 焦作大学 ,河南 焦作  454003 ; 2. 煤科总院常州自动化研究所 ,江苏 常州  213015)   摘要 :讨论了在 Java 程序中使用 comm. jar 开发包 ,通过 RS - 232 - C 串口与单片机系统进行全双工数据 通信的原理和方法 。主要介绍了在 Java 程序中如何使用串口收发数据 。 关键词 :单片机 ;串行通信 ;全双工 ;comm. jar ;Java   中图分类号 :TP312    文献标识码 :B Implementation of Full Duplex Serial Communication Between Java and Single chip Microcomputer With Comm. jar Package HUO Xiao li1 ,  J IA Xiang zhi2 (1.Jiaozuo University ,Jiaozuo 454003 , China. 2. Changzhou Automation Research Institute of CCRI ,Changzhou 213015 ,China)   Abstract : A principle and method to implement full duplex serial communication between Java and single microcomputer with comm. jar package was given and mainly introduced how to receive and send date in Java. chip Key words :single chip microcomputer ,serial commumicotion ,full duplex ,comm. jar , Java 0  引言 在以微机为控制中心的自动化控制系统中 ,通 常是单片机采集数据 ,然后用异步串行通信方式传 给微机 ,微机再将控制信息发送给单片机 。Java 程 序语言具有许多优点 ,如面向对象 、平台无关 、分布 式 、多线程 、可靠和安全等特性 ,是一种跨平台 、适合 于分布式计算环境的面向对象的编程语言 。因此 , 实现 Java 程序与单片机全双工串口通信具有很强 的实用意义 。本文介绍如何利用 comm. jar 开发包 中的类库 ,通过串口实现 Java 与单片机系统的全双 工通信 。 1  Java 类和 comm. jar 开发包 Java 语言由语法规则和类库两部分组成 。Java 类库是编写好的 Java 程序模块 ,每个模块通常对应 一种特定的功能和任务 ,这样在编写 Java 程序完成 收稿日期 :2004 - 12 - 23 作者简介 :霍晓丽(1965 - ) ,女 ,河南省孟州市人 ,焦作大学副教 授 ,华中科技大学在读博士 ,主要研究方向为软件工程、自动控制。 某 一 功 能 的 时 候 , 就 可 以 直 接 利 用 这 些 类 库 。 comm. jar 包分别提供了对常用的 RS - 232 - C 串行 端口和 IEEE1284 并行端口通信的支持 ,通过该类库 能够极大地简化对串口的操作过程 。 comm. jar 包是 Sun 公司以独立的 jar 包形式发布 在Java. sun. com网站上 ,称之为 Javatm Communications API ,它是 J2SE 的标准扩展。下载的开发包里面有安 装说明 ,解压后有一些文件 ,将其中的 Javax. comm 文 件和 Javax. comm. properties 文件拷贝到 JDK类路径里 ({Java - home} \ jre \ lib \ ext) 。Javax. comm 提供了通 信用的 Java API ,Javax. comm. properties 是这个驱动的 类配置文件。 所有的 comm API 位于Javax. comm 包下面。根据 comm API 的 Javadoc 说明 ,它有 13 个类或接口 ,有关 RS - 232 - C 串口的类功能如表 1 所示。   Java 读写串口过程主要就是调用上面 Javax. comm 包中的 comm API 函数 。Java 是面向对象编程 的 ,可以根据上面的几个类定义出相应的串口对象 , 然后根据对象提供的方法或属性进行操作 。流式输 入输出 ( Stream) 是一种很常见的输入输出方式 ,在 Javax. comm. 包中串口的输入输出操作是数据流形
3 3 3 ·05· ΠΠ 式 ,通过数据流 Java 可以很方便地与外部设备或其 它 计 算 机 进 行 交 流 。通 过 CommPort 类 的 getInputStream() 可以取得端口的输入流 。 表 1  RS - 232 串口的类及功能介绍 端口类 功能 Javax. comm. CommPort 跟实际的输入和输出功能有关 Javax. comm. CommPortIdentifier 主要负责端口的初始化和开启 Javax. comm. SerialPortEvent 串口事件类 Javax. comm. SerialPortEventListener 串口事件监听类 Javax. comm. NoSuchPortException 没有此端口异常处理类 Javax. comm. PortInUseException 端口正在使用异常处理   图 1 、图 2 是 Java 读 、写串口的实现原理 。由 Javax. comm. SerialPort 类可以产生串口对象 。Java 写 串口的实现原理是通过包中 CommPort 类定义一个 getOutputStream() 流 ,向该输出流写数据可以方便地 实现写串口操作 。Java 读串口的实现原理是首先通 过 SerialPortEventListener 类注册一个串口事件监听 器 ,如果捕获到串口事件并且是有数据到来 ,就可以 从输入流进行数据读取 。 图 1  Java 写串口的实现原理 图 2  Java 读串口的实现原理 2  Java 读写串口的编程实现 (1) 根据编程要求 ,需要引用包以及定义的对象 如下 : ;/ / ;/ / 引用串口开发包 ;/ / 引用系统输入输出包   import Java. io.   import Javax. comm. 需要定义的对象如下 :   static CommPortIdentifier portId ;/ / 定义串口 ID 对象   static SerialPort serialPort ;   static OutputStream output ;/ / 定义输出流对象   static InputStream input ;/ / 定义输入流对象 上面定义的对象用 static 修饰符定义为静态域 , 它保存在公共的存储单元 ,这样程序中任何一个类 都可以访问 、修改它 。 定义串口对象 (2) 初始化端口和打开程序如下 : 假定使用串口 COM1 ,串口属性是 (9600 ,N ,8 , 1) ,方法代码如下 : public void SerialInit () 工矿自动化 2005 年 4 月       { 如果端口正被使用 ,异常处理} try  {   portId = CommPortIdentifier. getPortIdentifier (“COM1”) ;    try     {   serialPort = (SerialPort) . portId. open (″Serial - test″,2000) ;     } catch (PortInUseException e)     {. . . ;    try     {   serialPort. setSerialPortParams(9600 ,/ / 端口波特率是9 600 bps   SerialPort. DATABITS - 8 ,/ / 数据位是 8 位   SerialPort. STOPBITS - 1 ,/ / 停止位是 1 位   SerialPort. PARITY- NONE) ;/ / 没有校验位     } catch (UnsupportedCommOperationException e)     {. . . ;如果该端口操作不被支持 ,异常处理}    }   } 通过 CommPortIdentifier 的 open 方法可以返回一 个 CommPort 对象 。open 方法有两个参数 :第一个是 String ,通常设置为应用程序的名字 ; 第二个参数是 时间 ,表示开启端口超时的毫秒数 。catch () 表示如 果端口被另外的应用程序占用时或该端口操作不被 支持 ,程序将抛出异常 。 (3) 向端口写一个 Byte 的二进制数据操作 由 CommPort 对象的 getOutputStream 可以获得端 口的输出流 ,这样就可以往串口输出数据了 。代码 如下 : Public void WriteByte (int ch) 定义串口对象输出流 try {   output = serialPort. getOutputStream() ;    output ,write (ch) ;/ / 向端口写一个 Byte 的二进制数据    }catch (PortInUseException ex)     {. . . ;/ / 如果端口正被使用 ,异常处理}   } output 是前面定义的输出流对象 ;ch 是要向端 口写 1 B 的二进制数据 ,其值是 0~255 之间的整 数 。 (4) 使用监听方式实现二进制数据接收操作 comm. jar 提供了两种灵活的读取数据方式 。其 中轮询方式 ( Polling) 在程序的每个关键功能之后 , 可以通过检查 CommEvent 属性值来查询事件和错 误 。如果应用程序较小 ,这种方法可能更可取 。本 实例使用监听方式 (listening) 读取数据 ,这种方法的 优点是响应及时 、可靠性高 。 Comm API 支持标准的Java Bean 型的事件模型 。 你可以使用类似 AddXXXListener 这样的方法为一个
ΠΠ ΠΠ 2005 年第 2 期 霍晓丽等 :利用 comm. jar 开发包实现 Java 与单片机全双工串口通信 ·15·      串口注册自己的监听器 ,以监听方式进行数据读取 。 当通信事件发生时 ,调用者可以捕获该事件 ,通过检 查其 serialEvent 方法便可确认发生的是哪种事件或 错误 ,从而进行相应的处理 。 对于上面 CommPortIdentifier 类的实例 serialPort , 可以调用它的 addEventListener 方法为它添加监听 器 ,通过下面语句实现 : serialPort ,addEventListener (new MyPortListener () ) SerialPort 的监听 器 必 须 继 承 于 SerialPortEvent Listener接口 。当有任何 SerialPort 的事件发生时 ,将 自动调用监听器中的 serialEvent 方法 。SerialEvent 有以下几种类型 :BI 为通信中断 ; CD 为载波检测 ; CTS 为清除发送 ;DATA - avaILABLE 为有数据到达 ; DSR 为数据设备准备好 ;FE 为帧错误 ;OE 为溢位错 误 ;OUTPUT- BUFFER - EMPTY 为输出缓冲区已清 空 ;PE 为奇偶校验错 ;RI 为振铃指示 。 对于 控 制 应 用 程 序 来 说 , 关 心 的 是 DATA - avaILABLE 事件 ,当数据从外部设备传送到端口上 时将触发此事件 ,此时就可以从串口输入流中读取 数据了 。 下面是一个监听器的示例 : public void MyPortListener implements SerialPortEventListener {    public void serialEvent (SerialPortEvent evt)    {       if ( evt. getEventType ( ) = = SerialPortEvent. DATA - avaILABLE)   / / 如果串口事件是 DATA - avaILABLE 事件    {     int ch ;     InputStream input = serialPort. getInputStream() ;     ch = input. read() ;     . . . ;/ / 根据接收到的 ch 值进行相关控制处理    }    else if (evt. getEventType () = = SerialPortEvent. FE)     { …; 出现帧错误 ,通知系统进行相关处理。}      else if (evt. getEventType () = = SerialPortEvent.BI)       { …;   } 出通信中断 ,通知系统进行相关处理。} input 是前面定义的输入流对象 。变量 ch 值的 低字节是接收的有用数据 ,根据接收到的该数据 ,计 算并进行自动控制 。 (5) 关闭端口和输入输出流 对于使用完的端口 ,必须将其关闭 ,以便让其它 的程序有机会使用它。调用 CommPort 类的 close () 方 法关闭端口。程序代码如下 :   serialPort. close () ;/ / 关闭端口   output. close () ;/ / 关闭输出流   Input. close () ;/ / 关闭输入流 3  Java 读写串口的编程实现实例 以上代码中的处理部分可以封装成一个单独的 类 ,在 Applet 或 Application 程 序 中 调 用 即 可 。在 Applet 中简化代码如下 : import Java. io. ; import Javax. comm. ; import Java. applet. public clsss SerialPro extends Applet implements SerialPortEventListener {   / / 定义对象代码段   public vold init ()    {SerialInit () ;}/ / 在 Applet 开始时初始化串口   serialPort. addEventListener (new MyPortListener () ) ; 串口对象 添加监听器   ……/ / 其它代码   Public void WriteByte (int ch)    { ……/ / 发送代码段}   public void MyPortListener implements SerialPortEventListener    { ……/ / 监听代码段 ,根据接收监听到的数据 ,计算并发 送控制信息) } 4  硬件接口与单片机串口操作 单片机与微机之间的硬件接口用 1 片 MAX - 232 与几个电容即可实现 。在远距离的数据传送和 控制时 ,可以用 MAX - 485 的接口转换芯片将 RS - 232 转换成 RS - 485 协议进行远距离传送 。单片机 串口的全双工操作有许多文献讨论过3 ,此处不再 介绍 。 5  结语 介绍了利用 comm. jar 开发包实现 Java 与单片 机全双工串口通信的基本原理和实例 。该实例在 Windows 2000 + Java SDK 1. 3 环境下编译通过 ,并成 功与 AT89C51 通信 。开发的通信程序简洁明了 ,编 程效率高 ,可维护性好 ,具有一定的实用意义 。
2 Π Π Π Π ΠΠ 工 矿 自 动 化   Industry and Mine Automation   No. 2   Apr. 2005    第 2 期  2005 年 4 月 技术交流 文章编号 :1671 - 251X(2005) 02 - 0052 - 03 工控机在固态粉状物料自动称量与配比中的应用 赵  明 ,  刘海江 (鞍山科技大学高职院电气工程系 ,辽宁 鞍山  114044)   摘要 :在改性固体燃料的生产中 ,应用研华工控机实现 8 种固态粉状物料按照规定配方自动称量与配 比 。文章介绍了系统的软 、硬件设计及提高称量精度所采取的措施 ,并经实践验证方案可行 。该系统可应用 于新型建材 、工矿产品深加工 、农业饲料 、钢铁冶金和食品加工等生产领域 。 关键词 :工控机 ;电子秤 ;粉状物料 ;窍门程序   中图分类号 :TP399    文献标识码 :B 0  引言 1  称量系统工艺流程 在用于烤肉 、烤各类食品 、野炊等固体燃料的生 产中 ,质量的关键是煤矸石 、石灰石 、矾土 、硝酸钾等 8 种固体粉状物料按照规定配方的配比精度 。应用 工业控制机实现这些物料的自动称量与配比 ,不仅 提高了生产效率 、安全可靠 、精度高 、配方可调 ,而 且 ,配料过程不需要人工操作 ,从而消除了人为因素 的影响 。同时计算机能对生产过程中各种数据进行 统计与分析 ,自动生成包括班次 、批次 、日期 、配方 、 各种物料配出量的日 、月报表等 ,将有利于产品成本 核算及质量分析等现代化管理 。并配有串行通信口 为生产规模扩大 、组成小型集散控制系统和实现远 程监视与控制提供可发展空间 。在价格方面 ,与成 套设备相比 ,仅为同类产品的一半 。笔者在实际研 制过程中 ,以研华工控机为核心 ,并与徐州拉姆奇电 子秤构成系统 ,实现自动称量与配比 。 收稿日期 :2004 - 11 - 16 作者简介 :赵  明 (1963 - ) ,男 ,硕士 ,副教授 ,硕士生导师 ,主要 从事大系统模型简化技术、计算机控制系统开发与研制及智能仪表 等方面的教学与研究。   工艺流程如图 1 所示 。8 个储料仓在电子秤上 方围成一圈 (图中只画出 1 个储料仓) ,通过电子秤 对 8 种物料依次称量 。给料采用螺旋给料机 ,通过 变频器对螺旋给料机实现变频调速 。储料仓下部通 过 J 1 、J 2 阻尼式料位计进行上 、下料位控制 ,以防止 螺旋给料机堵转 。称过的物料先放入中间料仓中暂 图 1  工艺流程示意图 参考文献 : 2  印   .Java 语言与面向对象程序设计 M . 北京 :清华 大学出版社 ,2002. 1  Sun 公司. Javacomm 20 win32. zip. EB OL . http : Java. 3  余锡存. 单片机原理及接口技术 M . 西安 :西安电子 sun. com products Javacomm 科技大学出版社 ,2000.
分享到:
收藏