何塽納 陳國(guó)金
摘 要: Android設(shè)備可用作工業(yè)控制上位機(jī)。設(shè)計(jì)了一種Android透明串口傳輸模塊,模塊集成了藍(lán)牙轉(zhuǎn)串口、WiFi轉(zhuǎn)串口與USB轉(zhuǎn)串口三種通信方式,用戶(hù)可任意選取一種; 模塊自動(dòng)建立通信連接,提供與下位機(jī)串口通信的透明輸入輸出接口。討論了Android透明串口傳輸模塊的軟件功能、硬件連接與軟件實(shí)現(xiàn),并將其應(yīng)用于自動(dòng)縫紉設(shè)備。
關(guān)鍵詞: 安卓;工業(yè)控制;藍(lán)牙;串口;無(wú)線(xiàn)局域網(wǎng);通用串行總線(xiàn)
引言
智能移動(dòng)設(shè)備近幾年來(lái)發(fā)展迅速,在日常生活與工業(yè)中的應(yīng)用日益廣泛。對(duì)傳統(tǒng)的工業(yè)控制領(lǐng)域,通常采用PC機(jī)、操作面板控制設(shè)備[1]。PC機(jī)成本較高,體積較大,攜帶性不好;操作面板界面不直觀,操作復(fù)雜。智能移動(dòng)設(shè)備如智能手機(jī)、平板電腦體積較小,在工業(yè)現(xiàn)場(chǎng)便于攜帶,其觸摸屏用戶(hù)體驗(yàn)較好,相比傳統(tǒng)的PC機(jī)、操作面板更具優(yōu)勢(shì)。Android是一款基于Linux的開(kāi)源移動(dòng)設(shè)備操作系統(tǒng),具有完全開(kāi)放性,適合取代工業(yè)控制上位機(jī)PC與操作面板[2]。工業(yè)控制下位機(jī)通信接口通常為串口,Android設(shè)備可作為上位機(jī)通過(guò)藍(lán)牙轉(zhuǎn)串口、WiFi轉(zhuǎn)串口或USB轉(zhuǎn)串口模塊與下位機(jī)串口通信。Android設(shè)備雖然支持這三種通信方式,但直接使用Android API開(kāi)發(fā)應(yīng)用程序較為麻煩,且對(duì)于USB轉(zhuǎn)串口通信,目前沒(méi)有可用API,這使得開(kāi)發(fā)存在一定復(fù)雜性。本文旨在提出一種Android透明串口傳輸模塊,簡(jiǎn)化Android工業(yè)控制上位機(jī)應(yīng)用程序的開(kāi)發(fā)。
1.功能說(shuō)明
本模塊集成藍(lán)牙轉(zhuǎn)串口、WiFi轉(zhuǎn)串口與USB轉(zhuǎn)串口三種通信方式,可直接與下位機(jī)串口通信。用戶(hù)選擇三種方式中的一種,模塊建立對(duì)應(yīng)通信連接,這一過(guò)程由模塊自動(dòng)處理與維護(hù),對(duì)用戶(hù)透明。模塊提供一組統(tǒng)一的read(),write()方法作為對(duì)外數(shù)據(jù)通信接口,用戶(hù)通過(guò)此接口與下位機(jī)串口通信。
3.Android透明串口傳輸模塊的軟件設(shè)計(jì)
Android透明串口傳輸軟件模塊分為三個(gè)部分:通信方式選擇功能設(shè)計(jì)、自動(dòng)建立通信功能設(shè)計(jì)以及數(shù)據(jù)通信功能設(shè)計(jì)。
3.1 通信方式選擇功能設(shè)計(jì)
通信方式選擇功能用于選擇模塊通信方式,配置通用通信地址。通信方式m_ComMode可為藍(lán)牙轉(zhuǎn)串口、WiFi轉(zhuǎn)串口和USB轉(zhuǎn)串口通信中的一種,通用通信地址m_ComAddr為與通信方式對(duì)應(yīng)的藍(lán)牙Mac地址、WiFi IP地址與端口號(hào)以及串口設(shè)備名稱(chēng)與波特率。
3.2 自動(dòng)建立通信功能設(shè)計(jì)
自動(dòng)建立通信功能根據(jù)用戶(hù)置入的通信方式與通用通信地址,自動(dòng)建立通信。
3.2.1 Android藍(lán)牙轉(zhuǎn)串口、WiFi轉(zhuǎn)串口、USB轉(zhuǎn)串口通信建立方法
Android從2.2版本開(kāi)始支持藍(lán)牙功能,并且為開(kāi)發(fā)者提供開(kāi)發(fā)藍(lán)牙應(yīng)用程序的API[3]。開(kāi)發(fā)藍(lán)牙應(yīng)用程序首先需要在Manifest中添加權(quán)限。
利用Android API建立藍(lán)牙轉(zhuǎn)串口通信的主要步驟如下:根據(jù)藍(lán)牙Mac地址返回藍(lán)牙設(shè)備對(duì)象、建立藍(lán)牙套接字、得到輸入輸出流。
利用Android API建立WiFi轉(zhuǎn)串口通信的主要步驟如下[4]:建立套接字、得到輸入輸出流。
對(duì)于USB轉(zhuǎn)串口通信應(yīng)用程序開(kāi)發(fā), Android SDK未提供API,本文在開(kāi)源項(xiàng)目android-serialport-api基礎(chǔ)上進(jìn)行開(kāi)發(fā)修改[5]。
首先在工程中導(dǎo)入開(kāi)源項(xiàng)目android-serialport-api的源代碼,然后修改代碼。建立串口通信代碼如下:
// 調(diào)用android-serialport-api自帶的open方法,根據(jù)選擇的波特率與設(shè)備名稱(chēng)打開(kāi)串口
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 通信的自動(dòng)建立
Android的藍(lán)牙轉(zhuǎn)串口、WiFi轉(zhuǎn)串口和USB轉(zhuǎn)串口雖然在建立通信過(guò)程中的實(shí)現(xiàn)細(xì)節(jié)不同,但其過(guò)程皆可以概括為利用所需參數(shù)(藍(lán)牙Mac地址、WiFi IP地址與端口號(hào)、串口波特率與設(shè)備名稱(chēng))經(jīng)過(guò)多步配置建立連接,最終得到輸入輸出流??梢岳闷溥^(guò)程中的相似性編寫(xiě)統(tǒng)一的建立通信方法,方法根據(jù)通信方式m_ComMode 調(diào)用對(duì)應(yīng)的通信建立程序,通過(guò)通用通信地址m_ComAddr經(jīng)多步配置建立連接,得到輸入輸出流。
3.3 數(shù)據(jù)通信功能設(shè)計(jì)
數(shù)據(jù)通信功能是Android透明串口傳輸模塊面向用戶(hù)的接口,提供一組輸入輸出方法read()、write(),用戶(hù)通過(guò)此方法經(jīng)藍(lán)牙轉(zhuǎn)串口、WiFi轉(zhuǎn)串口或USB轉(zhuǎn)串口模塊與下位機(jī)串口通信。
InputStream/OutputStream類(lèi)與DataInputStream/DataOutputStream類(lèi)存在繼承關(guān)系,它們的read()、write()方法具有相同的名稱(chēng)與參數(shù)形式,無(wú)論建立何種通信方式,都可以用同樣的方法對(duì)它們進(jìn)行讀寫(xiě)。輸入輸出流讀寫(xiě)主要方法的如下:根據(jù)通信方式選擇對(duì)應(yīng)的輸入流讀取數(shù)據(jù)、根據(jù)通信方式選擇對(duì)應(yīng)的輸出流寫(xiě)入數(shù)據(jù)。
對(duì)于設(shè)備流數(shù)據(jù)讀寫(xiě),一般為阻塞方式, 為適應(yīng)阻塞操作,本模塊創(chuàng)建一個(gè)用于數(shù)據(jù)讀寫(xiě)的讀寫(xiě)線(xiàn)程[6]。讀寫(xiě)方法read()、write()將讀寫(xiě)輸入輸出流所需參數(shù)m_receive_byte_Offset(接收數(shù)據(jù)起始位)、m_receive_byteCount(接收數(shù)據(jù)位數(shù))、m_send_byte_Offset(發(fā)送數(shù)據(jù)起始位)、m_send_byteCount(發(fā)送數(shù)據(jù)位數(shù))傳遞給讀寫(xiě)線(xiàn)程,讀寫(xiě)線(xiàn)程調(diào)用read_stream()、write_stream()方法實(shí)現(xiàn)數(shù)據(jù)通信。read()、write()方法會(huì)休眠一定時(shí)間等待讀寫(xiě)線(xiàn)程完成任務(wù),超出時(shí)限后不再等待,判定任務(wù)失敗,以避免調(diào)用程序的阻塞。
4.應(yīng)用實(shí)例
自動(dòng)縫紉設(shè)備在服裝廠(chǎng)中應(yīng)用普遍,這些設(shè)備通常通過(guò)操作面板控制設(shè)備運(yùn)行、修改參數(shù)。操作面板界面不直觀,操作復(fù)雜。本文以Android平板代替操作面板,遠(yuǎn)程控制設(shè)備[7]。使用Android透明串口傳輸模塊,通過(guò)藍(lán)牙轉(zhuǎn)串口模塊與自動(dòng)縫紉設(shè)備單片機(jī)串口通信。用戶(hù)操作Android觸摸屏向設(shè)備發(fā)送控制、修改參數(shù)指令,通過(guò)透明串口傳輸模塊發(fā)送至設(shè)備單片機(jī)串口,單片機(jī)執(zhí)行指令。單片機(jī)定時(shí)讀取設(shè)備當(dāng)前狀態(tài)參數(shù),通過(guò)藍(lán)牙轉(zhuǎn)串口模塊發(fā)送至Android設(shè)備,在觸摸屏顯示。
5.結(jié)束語(yǔ)
本文提出的Android透明串口傳輸模塊,將藍(lán)牙轉(zhuǎn)串口、WiFi轉(zhuǎn)串口和USB轉(zhuǎn)串口這三種通信方式封裝在一起,用戶(hù)可以任意選擇一種通信方式與下位機(jī)串口進(jìn)行通信,而不必關(guān)心每種方式的不同實(shí)現(xiàn)細(xì)節(jié),簡(jiǎn)化了Android工業(yè)控制應(yīng)用程序開(kāi)發(fā),提高了開(kāi)發(fā)效率。
參考文獻(xiàn):
[1]鄭彪,汪秉文.串口通信在工業(yè)控制中的應(yīng)用[J].自動(dòng)化儀表,2002,23(4):58-59.
[2]黃慧萍,肖世德,孟祥印.基于Android平臺(tái)的步進(jìn)電機(jī)遠(yuǎn)程控制系統(tǒng)[J].制造業(yè)自動(dòng)化,2014,36(2):44-47,61.
[3]李黎國(guó),張輝,程號(hào).基于Android健康服務(wù)終端藍(lán)牙傳輸軟件的設(shè)計(jì)[J].電子科技,2012,25(5):115-118.
[4]向誠(chéng),謝峰粹.基于WiFi和Android的智能探測(cè)車(chē)設(shè)計(jì)[J].電子技術(shù)應(yīng)用,2013,39(12):82-85.
[5]趙春亭,左小五.基于Android系統(tǒng)的USB轉(zhuǎn)串口的研究[J].工業(yè)控制計(jì)算機(jī),2014,27(1):83-84.
[6]朱冬梅,王錚,鄧先燦.微機(jī)與多臺(tái)單片機(jī)通信的多線(xiàn)程實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用,2000,20(10):79-80.
[7]李培培,朱維杰.基于Android車(chē)載虛擬儀表人機(jī)界面設(shè)計(jì)[J].電子科技,2013,26(2):74-75,78.
作者簡(jiǎn)介:
何塽納(1989-),男(漢族),浙江省奉化人,杭州電子科技大學(xué)碩士生,主要研究方向?yàn)檐浖_(kāi)發(fā)。