基于掌上終端的藍(lán)牙微微網(wǎng)無線數(shù)據(jù)采集控制系統(tǒng)
2.3掌上智能控制終端系統(tǒng)
掌上終端代替 PC機(jī)、筆記本電腦、工控機(jī)等作為現(xiàn)場(chǎng)數(shù)據(jù)采集系統(tǒng)的上位機(jī),是現(xiàn)場(chǎng)數(shù)據(jù)采集與控制中心及數(shù)據(jù)接收中心,主要任務(wù)包括:藍(lán)牙數(shù)據(jù)采集器管理及傳感器校正、數(shù)據(jù)采集器參數(shù)設(shè)置、數(shù)據(jù)采集控制、無線數(shù)據(jù)接收、實(shí)時(shí)顯示與數(shù)據(jù)存儲(chǔ)、回放。
基于掌上智能終端內(nèi)嵌的藍(lán)牙模塊,調(diào)用相應(yīng)的協(xié)議棧庫函數(shù)即可完成藍(lán)牙的相關(guān)操作。數(shù)據(jù)采集器管理模塊負(fù)責(zé)設(shè)備查找與設(shè)備安全認(rèn)證;采集參數(shù)攝制及控制模塊向采集器發(fā)送工作控制命令;無線數(shù)據(jù)接收模塊實(shí)時(shí)接收采集器數(shù)據(jù)并提供圖形化顯示;實(shí)時(shí)采集的數(shù)據(jù)按照約定格式存放在指定文件中,并根據(jù)需要提供歷史數(shù)據(jù)回放。
2.4藍(lán)牙微微網(wǎng)無線數(shù)據(jù)通信
藍(lán)牙是一種短距離低功耗無線傳輸技術(shù),工作于 2.4GHz的 ISM頻段[2]。藍(lán)牙通信協(xié)議棧分為四層,其中核心層為基帶協(xié)議層( BaseBand)鏈路管理協(xié)議( LMP)、邏輯鏈接控制和適配協(xié)議( L2CAP)以及服務(wù)發(fā)現(xiàn)協(xié)議( SDP),核心層之上為電纜替代協(xié)議(RFCOMM)與電話傳送控制協(xié)議( TCS-Binary)[2]。本系統(tǒng)藍(lán)牙無線傳輸工作在 RFCOMM協(xié)議上,利用 Serial Port Profile將藍(lán)牙設(shè)備虛擬成串口設(shè)備,數(shù)據(jù)的傳輸操作與串口操作相同,開發(fā)方便。 本文引用地址:http://butianyuan.cn/article/166660.htm
3掌上控制系統(tǒng)的工作流程
掌上控制系統(tǒng)的主要功能包括采集參數(shù)設(shè)置、采集器系統(tǒng)自檢、傳感器校正、采集控制以及數(shù)據(jù)回顯。參數(shù)設(shè)置模塊設(shè)置采樣間隔、保存文件路徑、工程信息等參數(shù);采集器系統(tǒng)自檢模塊以預(yù)采集的方式啟動(dòng)采集器,檢測(cè)整個(gè)系統(tǒng)軟硬件工作狀態(tài);傳感器校正模塊實(shí)現(xiàn)各傳感器的零漂糾正及系數(shù)率定;采集控制模塊控制采集器的數(shù)據(jù)采樣啟動(dòng)與結(jié)束,接收并處理數(shù)據(jù),完成數(shù)據(jù)的實(shí)時(shí)顯示及保存;數(shù)據(jù)回顯模塊從文件讀取歷史數(shù)據(jù)并顯示。
4 主要功能實(shí)現(xiàn)
4.1數(shù)據(jù)幀藍(lán)牙數(shù)據(jù)通信中,命令幀結(jié)構(gòu)與數(shù)據(jù)幀的約定如下:命令幀由兩位命令標(biāo)識(shí)、四位命令參數(shù)和兩位結(jié)束符組成,如 IT0001ZZ,IT代表設(shè)置采樣間隔命令, 0001約定為采樣間隔為 0.01ms,ZZ為統(tǒng)一結(jié)束符。數(shù)據(jù)幀由兩位機(jī)器識(shí)別碼、兩位數(shù)據(jù)和兩位結(jié)束符組成,如 A1HLZZ;其中 H表示 16進(jìn)制數(shù)據(jù)的高位 ,L代表低位。
每次采集傳輸數(shù)據(jù)時(shí),終端無間隔采集并傳送 5組數(shù)據(jù),在掌上控制終端進(jìn)行中值濾波,以減小誤差。
4.2藍(lán)牙設(shè)備發(fā)現(xiàn)與連接實(shí)現(xiàn)
4.2.1 基于微軟協(xié)議棧的藍(lán)牙傳輸實(shí)現(xiàn)基于微軟的藍(lán)牙驅(qū)動(dòng),開發(fā)簡(jiǎn)單。通過使用 Socket實(shí)現(xiàn)通信連接。
發(fā)現(xiàn)設(shè)備需要用到三個(gè) Winsock的 API,分別是 WSALookupServiceBegin、 WSALookupServiceNext和 WSALookupServiceEnd。頭文件為 Winsock2.h,庫文件為 Ws2_32.lib。
使用 Socket設(shè)備發(fā)現(xiàn)的代碼如下: WSALookupServiceBegin (querySet, LUP_CONTAINERS, hLookup); WSALookupServiceNext (hLookup, flags, dwSize, pwsaResults) WSALookupServiceEnd(hLookup);利用 pwsaResults返回的藍(lán)牙物理地址與 GUID做為 socket連接參數(shù),可與目的設(shè)備
進(jìn)行連接。代碼如下:
SOCKET m_socketClient = socket (AF_BT, SOCK_STREAM,
BTHPROTO_RFCOMM); connect (m_socketClient, (SOCKADDR *)sa, sizeof(sa))進(jìn)行設(shè)備連接。連接成功后,可用下列代碼進(jìn)行數(shù)據(jù)收發(fā):
recv(p->m_socketClient,buf,1024,0); send (m_socketClient, (char *)buf, nSize, 0);
4.2.2 基于 widcomm協(xié)議棧的藍(lán)牙傳輸實(shí)現(xiàn)使用如下語句啟動(dòng)查詢:
StartInquiry();
Void OnDeviceResponded (BD_ADDR bda, DEV_CLASS devClass, BD_NAME bdName, BOOL bConnected)
bda為返回設(shè)備地址, bdName為返回設(shè)備名稱。當(dāng)查詢時(shí)間結(jié)束時(shí),響應(yīng)查詢定時(shí)器函數(shù),開啟服務(wù)查找線程:
StartDiscovery(m_BdAddr, m_pServiceGuid) ;
Widcomm提供了各種協(xié)議的不同連接方式,基于 RFCOMM協(xié)議的 SPP連接代碼如下:
CSppClient::CreateConnection(m_BdAddr,m_serviceName);
當(dāng)設(shè)備連接成功,可以返回相關(guān)狀態(tài):
Void OnClientStateChange(BD_ADDR bda, DEV_CLASS dev_class, BD_NAME name, short com_port, SPP_STATE_CODE state)
使用函數(shù)返回的 com_port為串口號(hào)建立串口操作
CreateFile (buff, GENERIC_READ | GENERIC_WRITE,0,NULL,OPEN_EXISTING,0, NULL )。
評(píng)論