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