基于Java的串口通信应用编程
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
public void run ( ) { try { while ( true ) { int c = ComPort.read ( ) ; //从串口读 1 B ComBuffer.putbyte ( c ) ; //将 数 据 放 入 消 息 缓 冲 区 } } catch ( IOException e ) { }
driver= ( CommDriver ) Class . forName
( driverName ) . newInstance ( ) ;
}
catch ( Exception e1 ) { e1 . printStackTrace ( ) ; }
称”,超时等待时间);
(2)获 取 串 口 的 输 入/输 出 流
in=serialPort.getInputStream ( ) ;
out=serialPort.getOutputStream ( ) ;
(3)设 置 串 口 参 数
serialPort.setSerialPortParams (9 600 ,SerialPort.
应用奇葩 Example of Application
基于 Java 的串口通信应用编程
丁振凡 1,王小明 1,邓建明 2,周 斌 2 (1. 华 东 交 通 大 学 , 江 西 南 昌 330013 ;
2. 南 昌 铁 路 局 , 江 西 南 昌 330001 )
摘 要 : 介 绍 了 Java 实 现 串 口 通 信 编 程 的 技 术 处 理 。 着 重 就 串 口 通 信 的 连 接 、 数 据 缓 冲 区 资 源
RT.start ( ) ;
4 串口通信驱动程序的装载
串口驱动程序的装载是实现串口初始化的前提,如
果 程 序 在 Spring STS 开 发 环 境 中 运 行 , 会 从 JDK 的 运 行
环 境 装 载 驱 动 程 序 。 这 种 情 况 下 , 必 须 事 先 将 comm.jar
拷 贝 到 JDK 安 装 目 录 的 jre\lib\ext 目 录 下 ,将 win32com.dll
《 微 型 机 与 应 用 》 2012 年 第 31 卷 第 13 期
如下工作:
(1)打 开 串 口
portId=CommPortIdentifier.getPortIdentifier ( 串 口 名 ) ;
serialPort = (SerialPort )portId.open ( “ 串 口 所 有 者 名
public static void init ( int n ) {
//n 为串口编号
String driverName = “ com. sun . comm. Win32Driver ” ;
CommDriver driver=null ;
try {
System. loadLibrary ( “ win32com ” ) ; // 装 载 DLL
的多线程访问控制以及数据读取中的超时控制等问题进行了详细讨论, 有效地实现了主机与下位单
片机之间的数据传递。 该通信方式已用于基于工控机的绝缘电阻检测应用中。
关 键 词 : Java ; 串 口 通 信 ; 多 线 程 ;comm 包
中 图 分 类 号 : TP391
文献标识码: A
文 章 编 号 : 1674-7720 (2012 )13-0084-03
Key words : Java; serial communcation; multi thread; comm package
嵌入式系统或传感器网络的很多应用都需要通过 PC 机 与 嵌 入 式 设 备 或 传 感 器 节 点 进 行 通 信 。 其 中 , 最 常 用 的 接 口 就 是 RS-232 串 口 。 串 口 通 信 可 以 是 上 位 机 与 下位机之间的直接串口通信,也可以是在串口上连接无 线 通 信 模 块 , 通 过 串 口 进 行 无 线 通 信 。 RS -232 -C 是 在 1970 年 由 美 国 电 子 工 业 协 会 (EIA ) 联 合 贝 尔 系 统 、 调 制 解调器厂家及计算机终端生产厂家共同制定的用于串 行 通 信 的 标 准 。 RS-232 是 一 个 全 双 工 的 通 信 协 议 , 它 可 以同时进行数据接收和发送的工作。
}
3 消 息 分 析 处 理 Bean 消 息 分 析 处 理 Bean (SerialBean 类 ) 是 Swing 界 面 处
理程序对串口进行操作访问的调用接口。 其中封装有 3 个 方 法 :Initialize 方 法 实 现 串 口 的 初 始 化 ;ReadPort ( ) 方 法 从 消 息 缓 冲 区 读 消 息 并 进 行 分 析 ;WritePort (byte [] Msg ) 方 法 写 消 息 到 串 口 。 串 口 初 始 化 只 执 行 1 次 , 包 括
84
getOutputStream ( ) 方 法 即 可 分 别 取 得 端 口 的 输 入 流 和 输 出流。
串口通信应用程序有两种模式: 一种是实现 SerialPortEventListener 接 口 , 通 过 监 听 串 口 事 件 并 作 相 应 处理;另一种就是建立一个独立的接收线程负责数据的 接收。 本文采用的是后一种方式。
DATABITS_8 ,
SerialPort.STOPBITS_1 ,SerialPort.PARITY_NONE ) ;
(4)创 建 消 息 缓 冲 区 对 象
SB=new SerialBufΒιβλιοθήκη Baiduer ( ) ;
(5)创 建 并 启 动 消 息 接 受 线 程
RT=new ReadSerial (SB , in ) ;
拷 贝 到 JDK 安 装 目 录 的 jre\bin 目 录 下 , 将 javax.comm.
properties 拷 贝 到 JDK 安 装 目 录 的 jre\lib 目 录 [2] 下 。
如 果 将 开 发 的 应 用 导 出 为 独 立 的 可 运 行 的 JAR 文
件 , 则 必 须 将 以 上 的 3 个 文 件 安 排 到 应 用 工 程 的 src 所
在目录路径下,并在程序中用如下程序代码进行装载。
Import javax. comm. CommDriver ;
import javax. swing . JOptionPane ;
public class CurrentStatus {
public static SerialBean SB ;
/ / 消 息 分 析 处 理 Bean
Research of Java_based programming for serial communcation
Ding Zhenfan1,Wang Xiaoming1,Deng Jianming2,Zhou Bin2
( 1 . East China Jiaotong University , Nanchang 330013 , China ; 2 . Nanchang Railway Bureau , Nanchang 330001 , China )
(1 )Content 属 性 : 存 放 11 B 的 消 息 ; (2 )Available 属 性 : 标 识 消 息 是 否 可 用 ; (3 )LengthNeeded 属 性 : 统 计 收 到 的 消 息 字 节 长 度 。 该 类 还 定 义 了 两 个 重 要 方 法 : (1 )public synchronized byte [] GetMsg ( ) : 从 缓 冲 区 读 取 消 息 ; (2 ) public synchronized void putbyte (int c ) : 写 一 个 字 节 到 缓 冲 区 。 方 法 定 义 中 均 含 有 synchronized 关 键 词 , 也 就 是 要使用这两个方法必须取得缓冲区的对象锁,从而实现 对缓冲区这个共享资源的访问互斥操作。 2 消息接收线程 消 息 接 收 线 程 (ReadSerial 类 ) 循 环 从 串 口 读 取 数 据 并将其存放到消息缓冲区中,串口无数据或缓冲区满时 它 将 处 于 资 源 等 待 状 态 。 以 下 为 线 程 的 run 方 法 代 码 :
Abstract : Introduce the Java programming process to implements serial comunication. detailly discuss about the connection of serial communication, and the multithread contorll for the access of data Buffer resource, and the expires time control in the data reading. effectively realize the data transmission between host and single chip microcomputer. This mode have used in insulation resistance detection application for Industrial control machine.
《 微 型 机 与 应 用 》 2012 年 第 31 卷 第 13 期
应用奇葩 Example of Application
线程将收到的数据放到一个缓存中; ⑤消息分析处理
程序从缓存中获取数据并进行分析处理。 主机和单片机
间每次通信传送 1 B。
Swing 界面
① 按钮点击事件
消息显示框 ⑤ 消息分析处理 Bean
本文的串口通信是上位工控机与下位单片机之间 的通信。 工控机通过触摸屏方式来使用系统,下位单 片机连接绝缘检测笔实现绝缘电阻的检测,并将检测 过 程 的 结 果 发 送 给 上 位 机 。 本 文 仅 介 绍 主 机 方 的 Java 串口通信编程处理技术, 如图 1 所示的虚线上方部 分 , 包 含 消 息 接 收 线 程 、 Swing 事 件 驱 动 应 用 界 面 、 消 息缓冲区、消息分析处理程序。 其中:①在图形应用界 面中通过用户的操作来触发事件实现与单片机的通 信; ②主机通过串口向单片机发送启动检测的消息; ③单片机在收到消息后,将启动检测,并将传感器获 取 的 数 据 通 过 串 口 发 送 给 主 机 作 为 响 应 ;④ 数 据 接 收
Java 实 现 串 口 通 信 的 编 程 方 式 通 常 采 用 SUN 发 布 的 串 口 通 信 API , 它 是 以 独 立 jar 包 形 式 提 供 的 一 个 标 准 扩 展 。 其 中 包 含 3 个 文 件 :comm.jar 提 供 了 通 信 用 的 java API ;win32com.dll 提 供 了 串 口 通 信 的 本 地 驱 动 接 口 ;javax.comm.properties 是 这 个 驱 动 的 类 配 置 文 件 。 Java 读 写 串 口 过 程 主 要 是 调 用 javax.comm 包 中 的 API 函 数 。 在 javax.comm 包 中 , 串 口 的 读 写 操 作 是 数 据 流 形 式 , 串 口 初 始 化 后 , 通 过 CommPort 类 的 getInputStream ( ) 和
主机串口
④消息接收线程
消息缓冲区
②启动检测消息 ③响应消息
单片机串口 单片机
图 1 Java 串口通信的消息处理过程
1 串口缓冲区的控制 串 口 缓 冲 区 (SerialBuffer 类 ) 实 现 从 串 口 接 收 到 的 一
个 完 整 消 息 的 封 装 , 本 系 统 的 消 息 按 协 议 设 计 为 11 B , 其中包含消息的起始标记、识别标识和数据字节。 消息 缓 冲 区 是 消 息 接 收 线 程 和 消 息 分 析 处 理 Bean 之 间 的 桥 梁,只有在接收到一条完整的消息后才可以进行消息的 分析解析。 串口缓冲区安排有 3 个重要属性:
driver= ( CommDriver ) Class . forName
( driverName ) . newInstance ( ) ;
}
catch ( Exception e1 ) { e1 . printStackTrace ( ) ; }
称”,超时等待时间);
(2)获 取 串 口 的 输 入/输 出 流
in=serialPort.getInputStream ( ) ;
out=serialPort.getOutputStream ( ) ;
(3)设 置 串 口 参 数
serialPort.setSerialPortParams (9 600 ,SerialPort.
应用奇葩 Example of Application
基于 Java 的串口通信应用编程
丁振凡 1,王小明 1,邓建明 2,周 斌 2 (1. 华 东 交 通 大 学 , 江 西 南 昌 330013 ;
2. 南 昌 铁 路 局 , 江 西 南 昌 330001 )
摘 要 : 介 绍 了 Java 实 现 串 口 通 信 编 程 的 技 术 处 理 。 着 重 就 串 口 通 信 的 连 接 、 数 据 缓 冲 区 资 源
RT.start ( ) ;
4 串口通信驱动程序的装载
串口驱动程序的装载是实现串口初始化的前提,如
果 程 序 在 Spring STS 开 发 环 境 中 运 行 , 会 从 JDK 的 运 行
环 境 装 载 驱 动 程 序 。 这 种 情 况 下 , 必 须 事 先 将 comm.jar
拷 贝 到 JDK 安 装 目 录 的 jre\lib\ext 目 录 下 ,将 win32com.dll
《 微 型 机 与 应 用 》 2012 年 第 31 卷 第 13 期
如下工作:
(1)打 开 串 口
portId=CommPortIdentifier.getPortIdentifier ( 串 口 名 ) ;
serialPort = (SerialPort )portId.open ( “ 串 口 所 有 者 名
public static void init ( int n ) {
//n 为串口编号
String driverName = “ com. sun . comm. Win32Driver ” ;
CommDriver driver=null ;
try {
System. loadLibrary ( “ win32com ” ) ; // 装 载 DLL
的多线程访问控制以及数据读取中的超时控制等问题进行了详细讨论, 有效地实现了主机与下位单
片机之间的数据传递。 该通信方式已用于基于工控机的绝缘电阻检测应用中。
关 键 词 : Java ; 串 口 通 信 ; 多 线 程 ;comm 包
中 图 分 类 号 : TP391
文献标识码: A
文 章 编 号 : 1674-7720 (2012 )13-0084-03
Key words : Java; serial communcation; multi thread; comm package
嵌入式系统或传感器网络的很多应用都需要通过 PC 机 与 嵌 入 式 设 备 或 传 感 器 节 点 进 行 通 信 。 其 中 , 最 常 用 的 接 口 就 是 RS-232 串 口 。 串 口 通 信 可 以 是 上 位 机 与 下位机之间的直接串口通信,也可以是在串口上连接无 线 通 信 模 块 , 通 过 串 口 进 行 无 线 通 信 。 RS -232 -C 是 在 1970 年 由 美 国 电 子 工 业 协 会 (EIA ) 联 合 贝 尔 系 统 、 调 制 解调器厂家及计算机终端生产厂家共同制定的用于串 行 通 信 的 标 准 。 RS-232 是 一 个 全 双 工 的 通 信 协 议 , 它 可 以同时进行数据接收和发送的工作。
}
3 消 息 分 析 处 理 Bean 消 息 分 析 处 理 Bean (SerialBean 类 ) 是 Swing 界 面 处
理程序对串口进行操作访问的调用接口。 其中封装有 3 个 方 法 :Initialize 方 法 实 现 串 口 的 初 始 化 ;ReadPort ( ) 方 法 从 消 息 缓 冲 区 读 消 息 并 进 行 分 析 ;WritePort (byte [] Msg ) 方 法 写 消 息 到 串 口 。 串 口 初 始 化 只 执 行 1 次 , 包 括
84
getOutputStream ( ) 方 法 即 可 分 别 取 得 端 口 的 输 入 流 和 输 出流。
串口通信应用程序有两种模式: 一种是实现 SerialPortEventListener 接 口 , 通 过 监 听 串 口 事 件 并 作 相 应 处理;另一种就是建立一个独立的接收线程负责数据的 接收。 本文采用的是后一种方式。
DATABITS_8 ,
SerialPort.STOPBITS_1 ,SerialPort.PARITY_NONE ) ;
(4)创 建 消 息 缓 冲 区 对 象
SB=new SerialBufΒιβλιοθήκη Baiduer ( ) ;
(5)创 建 并 启 动 消 息 接 受 线 程
RT=new ReadSerial (SB , in ) ;
拷 贝 到 JDK 安 装 目 录 的 jre\bin 目 录 下 , 将 javax.comm.
properties 拷 贝 到 JDK 安 装 目 录 的 jre\lib 目 录 [2] 下 。
如 果 将 开 发 的 应 用 导 出 为 独 立 的 可 运 行 的 JAR 文
件 , 则 必 须 将 以 上 的 3 个 文 件 安 排 到 应 用 工 程 的 src 所
在目录路径下,并在程序中用如下程序代码进行装载。
Import javax. comm. CommDriver ;
import javax. swing . JOptionPane ;
public class CurrentStatus {
public static SerialBean SB ;
/ / 消 息 分 析 处 理 Bean
Research of Java_based programming for serial communcation
Ding Zhenfan1,Wang Xiaoming1,Deng Jianming2,Zhou Bin2
( 1 . East China Jiaotong University , Nanchang 330013 , China ; 2 . Nanchang Railway Bureau , Nanchang 330001 , China )
(1 )Content 属 性 : 存 放 11 B 的 消 息 ; (2 )Available 属 性 : 标 识 消 息 是 否 可 用 ; (3 )LengthNeeded 属 性 : 统 计 收 到 的 消 息 字 节 长 度 。 该 类 还 定 义 了 两 个 重 要 方 法 : (1 )public synchronized byte [] GetMsg ( ) : 从 缓 冲 区 读 取 消 息 ; (2 ) public synchronized void putbyte (int c ) : 写 一 个 字 节 到 缓 冲 区 。 方 法 定 义 中 均 含 有 synchronized 关 键 词 , 也 就 是 要使用这两个方法必须取得缓冲区的对象锁,从而实现 对缓冲区这个共享资源的访问互斥操作。 2 消息接收线程 消 息 接 收 线 程 (ReadSerial 类 ) 循 环 从 串 口 读 取 数 据 并将其存放到消息缓冲区中,串口无数据或缓冲区满时 它 将 处 于 资 源 等 待 状 态 。 以 下 为 线 程 的 run 方 法 代 码 :
Abstract : Introduce the Java programming process to implements serial comunication. detailly discuss about the connection of serial communication, and the multithread contorll for the access of data Buffer resource, and the expires time control in the data reading. effectively realize the data transmission between host and single chip microcomputer. This mode have used in insulation resistance detection application for Industrial control machine.
《 微 型 机 与 应 用 》 2012 年 第 31 卷 第 13 期
应用奇葩 Example of Application
线程将收到的数据放到一个缓存中; ⑤消息分析处理
程序从缓存中获取数据并进行分析处理。 主机和单片机
间每次通信传送 1 B。
Swing 界面
① 按钮点击事件
消息显示框 ⑤ 消息分析处理 Bean
本文的串口通信是上位工控机与下位单片机之间 的通信。 工控机通过触摸屏方式来使用系统,下位单 片机连接绝缘检测笔实现绝缘电阻的检测,并将检测 过 程 的 结 果 发 送 给 上 位 机 。 本 文 仅 介 绍 主 机 方 的 Java 串口通信编程处理技术, 如图 1 所示的虚线上方部 分 , 包 含 消 息 接 收 线 程 、 Swing 事 件 驱 动 应 用 界 面 、 消 息缓冲区、消息分析处理程序。 其中:①在图形应用界 面中通过用户的操作来触发事件实现与单片机的通 信; ②主机通过串口向单片机发送启动检测的消息; ③单片机在收到消息后,将启动检测,并将传感器获 取 的 数 据 通 过 串 口 发 送 给 主 机 作 为 响 应 ;④ 数 据 接 收
Java 实 现 串 口 通 信 的 编 程 方 式 通 常 采 用 SUN 发 布 的 串 口 通 信 API , 它 是 以 独 立 jar 包 形 式 提 供 的 一 个 标 准 扩 展 。 其 中 包 含 3 个 文 件 :comm.jar 提 供 了 通 信 用 的 java API ;win32com.dll 提 供 了 串 口 通 信 的 本 地 驱 动 接 口 ;javax.comm.properties 是 这 个 驱 动 的 类 配 置 文 件 。 Java 读 写 串 口 过 程 主 要 是 调 用 javax.comm 包 中 的 API 函 数 。 在 javax.comm 包 中 , 串 口 的 读 写 操 作 是 数 据 流 形 式 , 串 口 初 始 化 后 , 通 过 CommPort 类 的 getInputStream ( ) 和
主机串口
④消息接收线程
消息缓冲区
②启动检测消息 ③响应消息
单片机串口 单片机
图 1 Java 串口通信的消息处理过程
1 串口缓冲区的控制 串 口 缓 冲 区 (SerialBuffer 类 ) 实 现 从 串 口 接 收 到 的 一
个 完 整 消 息 的 封 装 , 本 系 统 的 消 息 按 协 议 设 计 为 11 B , 其中包含消息的起始标记、识别标识和数据字节。 消息 缓 冲 区 是 消 息 接 收 线 程 和 消 息 分 析 处 理 Bean 之 间 的 桥 梁,只有在接收到一条完整的消息后才可以进行消息的 分析解析。 串口缓冲区安排有 3 个重要属性: