Android透明串口传输模块的设计与应用
2014-10-21何塽纳陈国金
何塽纳 陈国金
摘 要: Android设备可用作工业控制上位机。设计了一种Android透明串口传输模块,模块集成了蓝牙转串口、WiFi转串口与USB转串口三种通信方式,用户可任意选取一种; 模块自动建立通信连接,提供与下位机串口通信的透明输入输出接口。讨论了Android透明串口传输模块的软件功能、硬件连接与软件实现,并将其应用于自动缝纫设备。
关键词: 安卓;工业控制;蓝牙;串口;无线局域网;通用串行总线
引言
智能移动设备近几年来发展迅速,在日常生活与工业中的应用日益广泛。对传统的工业控制领域,通常采用PC机、操作面板控制设备[1]。PC机成本较高,体积较大,携带性不好;操作面板界面不直观,操作复杂。智能移动设备如智能手机、平板电脑体积较小,在工业现场便于携带,其触摸屏用户体验较好,相比传统的PC机、操作面板更具优势。Android是一款基于Linux的开源移动设备操作系统,具有完全开放性,适合取代工业控制上位机PC与操作面板[2]。工业控制下位机通信接口通常为串口,Android设备可作为上位机通过蓝牙转串口、WiFi转串口或USB转串口模块与下位机串口通信。Android设备虽然支持这三种通信方式,但直接使用Android API开发应用程序较为麻烦,且对于USB转串口通信,目前没有可用API,这使得开发存在一定复杂性。本文旨在提出一种Android透明串口传输模块,简化Android工业控制上位机应用程序的开发。
1.功能说明
本模块集成蓝牙转串口、WiFi转串口与USB转串口三种通信方式,可直接与下位机串口通信。用户选择三种方式中的一种,模块建立对应通信连接,这一过程由模块自动处理与维护,对用户透明。模块提供一组统一的read(),write()方法作为对外数据通信接口,用户通过此接口与下位机串口通信。
3.Android透明串口传输模块的软件设计
Android透明串口传输软件模块分为三个部分:通信方式选择功能设计、自动建立通信功能设计以及数据通信功能设计。
3.1 通信方式选择功能设计
通信方式选择功能用于选择模块通信方式,配置通用通信地址。通信方式m_ComMode可为蓝牙转串口、WiFi转串口和USB转串口通信中的一种,通用通信地址m_ComAddr为与通信方式对应的蓝牙Mac地址、WiFi IP地址与端口号以及串口设备名称与波特率。
3.2 自动建立通信功能设计
自动建立通信功能根据用户置入的通信方式与通用通信地址,自动建立通信。
3.2.1 Android蓝牙转串口、WiFi转串口、USB转串口通信建立方法
Android从2.2版本开始支持蓝牙功能,并且为开发者提供开发蓝牙应用程序的API[3]。开发蓝牙应用程序首先需要在Manifest中添加权限。
利用Android API建立蓝牙转串口通信的主要步骤如下:根据蓝牙Mac地址返回蓝牙设备对象、建立蓝牙套接字、得到输入输出流。
利用Android API建立WiFi转串口通信的主要步骤如下[4]:建立套接字、得到输入输出流。
对于USB转串口通信应用程序开发, Android SDK未提供API,本文在开源项目android-serialport-api基础上进行开发修改[5]。
首先在工程中导入开源项目android-serialport-api的源代码,然后修改代码。建立串口通信代码如下:
// 调用android-serialport-api自带的open方法,根据选择的波特率与设备名称打开串口
FileDescriptor m_FileDescriptor = open ( device_name , baudrate, flags);
// 得到输入输出流
InputStream m_com_InStream = new FileInputStream ( m_FileDescriptor );
OutputStream m_com_OutStream = new FileOutputStream ( m_FileDescriptor );
3.2.2 通信的自动建立
Android的蓝牙转串口、WiFi转串口和USB转串口虽然在建立通信过程中的实现细节不同,但其过程皆可以概括为利用所需参数(蓝牙Mac地址、WiFi IP地址与端口号、串口波特率与设备名称)经过多步配置建立连接,最终得到输入输出流。可以利用其过程中的相似性编写统一的建立通信方法,方法根据通信方式m_ComMode 调用对应的通信建立程序,通过通用通信地址m_ComAddr经多步配置建立连接,得到输入输出流。
3.3 数据通信功能设计
数据通信功能是Android透明串口传输模块面向用户的接口,提供一组输入输出方法read()、write(),用户通过此方法经蓝牙转串口、WiFi转串口或USB转串口模块与下位机串口通信。
InputStream/OutputStream类与DataInputStream/DataOutputStream类存在继承关系,它们的read()、write()方法具有相同的名称与参数形式,无论建立何种通信方式,都可以用同样的方法对它们进行读写。输入输出流读写主要方法的如下:根据通信方式选择对应的输入流读取数据、根据通信方式选择对应的输出流写入数据。
对于设备流数据读写,一般为阻塞方式, 为适应阻塞操作,本模块创建一个用于数据读写的读写线程[6]。读写方法read()、write()将读写输入输出流所需参数m_receive_byte_Offset(接收数据起始位)、m_receive_byteCount(接收数据位数)、m_send_byte_Offset(发送数据起始位)、m_send_byteCount(发送数据位数)传递给读写线程,读写线程调用read_stream()、write_stream()方法实现数据通信。read()、write()方法会休眠一定时间等待读写线程完成任务,超出时限后不再等待,判定任务失败,以避免调用程序的阻塞。
4.应用实例
自動缝纫设备在服装厂中应用普遍,这些设备通常通过操作面板控制设备运行、修改参数。操作面板界面不直观,操作复杂。本文以Android平板代替操作面板,远程控制设备[7]。使用Android透明串口传输模块,通过蓝牙转串口模块与自动缝纫设备单片机串口通信。用户操作Android触摸屏向设备发送控制、修改参数指令,通过透明串口传输模块发送至设备单片机串口,单片机执行指令。单片机定时读取设备当前状态参数,通过蓝牙转串口模块发送至Android设备,在触摸屏显示。
5.结束语
本文提出的Android透明串口传输模块,将蓝牙转串口、WiFi转串口和USB转串口这三种通信方式封装在一起,用户可以任意选择一种通信方式与下位机串口进行通信,而不必关心每种方式的不同实现细节,简化了Android工业控制应用程序开发,提高了开发效率。
参考文献:
[1]郑彪,汪秉文.串口通信在工业控制中的应用[J].自动化仪表,2002,23(4):58-59.
[2]黄慧萍,肖世德,孟祥印.基于Android平台的步进电机远程控制系统[J].制造业自动化,2014,36(2):44-47,61.
[3]李黎国,张辉,程号.基于Android健康服务终端蓝牙传输软件的设计[J].电子科技,2012,25(5):115-118.
[4]向诚,谢峰粹.基于WiFi和Android的智能探测车设计[J].电子技术应用,2013,39(12):82-85.
[5]赵春亭,左小五.基于Android系统的USB转串口的研究[J].工业控制计算机,2014,27(1):83-84.
[6]朱冬梅,王铮,邓先灿.微机与多台单片机通信的多线程实现[J].计算机应用,2000,20(10):79-80.
[7]李培培,朱维杰.基于Android车载虚拟仪表人机界面设计[J].电子科技,2013,26(2):74-75,78.
作者简介:
何塽纳(1989-),男(汉族),浙江省奉化人,杭州电子科技大学硕士生,主要研究方向为软件开发。