【正文】
調(diào)器射頻接收、終端節(jié)點射頻發(fā)送:串口調(diào)試助手;下載器驅(qū)動程序;SmartRF Flash Programer燒寫軟件。3.協(xié)調(diào)器射頻發(fā)送(采集參數(shù)及遠程控制):串口調(diào)試助手;下載器驅(qū)動程序;SmartRF Flash Programer燒寫軟件。3.硬件模塊開發(fā)與測試:主要內(nèi)容:1) 協(xié)調(diào)器串口功能測試2) 協(xié)調(diào)器射頻接收、終端節(jié)點射頻發(fā)送功能測試3) 協(xié)調(diào)器射頻發(fā)送(采集參數(shù)及遠程控制)功能測試1) 協(xié)調(diào)器串口功能測試*準(zhǔn)備事項:1)硬件:協(xié)調(diào)器1個;燒寫器1套(下載器、USB線);串口線1條;PC 一臺。2)軟件:串口調(diào)試助手;下載器驅(qū)動程序;SmartRF Flash Programer燒寫軟件。*測試方法與步驟:1)為協(xié)調(diào)器燒寫相應(yīng)hex文件。2)用串口線連接協(xié)調(diào)器和PC,然后為協(xié)調(diào)器上電,并在PC上利用串口調(diào)試助手按預(yù)定波特率打開協(xié)調(diào)器所連接串口。3)按預(yù)定通訊協(xié)議(數(shù)據(jù)幀格式),由串口調(diào)試助手下發(fā)指令到協(xié)調(diào)器,觀察協(xié)調(diào)器是否有數(shù)據(jù)返回串口。根據(jù)源碼分析可知,協(xié)調(diào)器串口收到數(shù)據(jù)后,會通過串口返回相同數(shù)據(jù)。因此,若串口有與下發(fā)數(shù)據(jù)相同的數(shù)據(jù)返回,說明協(xié)調(diào)器串口功能順利實現(xiàn)。2) 協(xié)調(diào)器射頻接收、終端節(jié)點射頻發(fā)送功能測試*準(zhǔn)備事項:1)硬件:協(xié)調(diào)器1個、終端節(jié)點2個(ZigBee煙霧傳感器、ZigBee噴淋和報警控制器各1個);燒寫器1套(下載器、USB線);串口線1條;PC 一臺。2)軟件:串口調(diào)試助手;下載器驅(qū)動程序;SmartRF Flash Programer燒寫軟件。*測試方法與步驟:1)為協(xié)調(diào)器、終端節(jié)點燒寫相應(yīng)hex文件。2)用串口線連接協(xié)調(diào)器和PC,然后為協(xié)調(diào)器上電,并在PC上利用串口調(diào)試助手按預(yù)定波特率打開協(xié)調(diào)器所連接串口。3)為終端節(jié)點上電,在串口調(diào)試助手上觀察終端節(jié)點是否會以不定周期循環(huán)上傳數(shù)據(jù)。根據(jù)源碼分析可知,終端節(jié)點在加入網(wǎng)絡(luò)后,會周期性采集煙霧傳感器和噴淋器、報警器的狀態(tài),并返回給協(xié)調(diào)器。因此,若有符合預(yù)定數(shù)據(jù)幀格式標(biāo)準(zhǔn)的數(shù)據(jù)返回,則說明協(xié)調(diào)器射頻接收、終端節(jié)點射頻發(fā)送功能順利實現(xiàn)。3) 協(xié)調(diào)器射頻發(fā)送(采集參數(shù)及遠程控制)功能測試*準(zhǔn)備事項:1)硬件:協(xié)調(diào)器1個、終端節(jié)點2個(ZigBee煙霧傳感器、ZigBee噴淋和報警控制器各1個);燒寫器1套(下載器、USB線);串口線1條;PC 一臺。2)軟件:串口調(diào)試助手;下載器驅(qū)動程序;SmartRF Flash Programer燒寫軟件。*測試方法與步驟:1)為協(xié)調(diào)器、終端節(jié)點燒寫相應(yīng)hex 文件。2)用串口線連接協(xié)調(diào)器和PC,然后為協(xié)調(diào)器上電,并在PC 上利用串口調(diào)試助手按預(yù)定波特率打開協(xié)調(diào)器所連接串口。3)為終端節(jié)點上電,并等待入網(wǎng)。4)終端節(jié)點入網(wǎng)后,在PC 上利用串口調(diào)試助手下發(fā)開關(guān)報警和噴淋器指令,觀察報警器和噴淋器的運行情況;同時利用打火機觸發(fā)煙霧傳感器,觀察反饋給協(xié)調(diào)器的數(shù)據(jù)。通過上述兩個方面,綜合評估系統(tǒng)功能的實現(xiàn)情況。l 軟件設(shè)計1應(yīng)用層軟件設(shè)計上位機軟件用于人機交互,包括展示系統(tǒng)運行狀態(tài)、執(zhí)行操作指令等,其界面如圖登陸界面:通過連接數(shù)據(jù)庫對用戶的輸入進行判定,相關(guān)的判定語句為:(注,其中對用戶輸入的各種情況進行分析:包括輸入為空,密碼錯誤,密碼正確的處理方式) 其中會用到 控件,來連接數(shù)據(jù)庫。我們數(shù)據(jù)庫是windows access 創(chuàng)建。其中創(chuàng)建了兩張表:煙霧傳感器記錄表和用戶信息表。Private Sub Command1_Click()If = ThenMsgBox 用戶名不能為空,請重新輸入!, 16, 提示Exit SubEnd IfIf = ThenMsgBox 用戶密碼不能為空,請重新輸入!, 16, 提示Exit SubEnd If = adCmdText = select * from 用戶信息 Where 用戶名=39。 amp。 amp。 39。 If 0 Then If = (密碼) Then Unload Me ElseIf (密碼) Then MsgBox 密碼錯誤,請重新輸入!, 64, 提示: Text1 = : End IfElseMsgBox 沒有該用戶!, 64, 提示: Text2 = : : Text1 = End IfEnd Sub注冊用戶界面:主要通過判定兩次密碼是否一致,若是一致,便連接數(shù)據(jù)庫,并寫入用戶名和密碼:相關(guān)代碼如下:Private Sub Command1_Click()If = Then 39。數(shù)據(jù)庫(用戶名) = (密碼) = Else: MsgBox 兩次輸入密碼不同,請重新輸入 = = End IfEnd Sub當(dāng)然。讓用戶在輸入完后,敲回車鍵Private Sub Form_Load()End Sub Private Sub Text3_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then Command1_Click End IfEnd Sub主控界面:主控界面分為兩個模塊:串口通信模塊,控制模塊,顯示當(dāng)前網(wǎng)絡(luò)拓撲模塊1. 串口通訊模塊。其主要是實現(xiàn)串口通訊,發(fā)送接收16進制的數(shù)據(jù)。并實時的顯示出來。并且為了更好的用戶體驗,我們特別添加了接收計數(shù)和發(fā)送計數(shù)功能,這樣就一目了然的看出接收和發(fā)送了多少數(shù)據(jù)。更重要的是對接收到的數(shù)據(jù)沒一個字節(jié)自動補零,這樣就能更好的顯示,同時要是收到低于16位的字節(jié),自動補0。相關(guān)代碼如下:接收數(shù)據(jù)部分:On Error GoTo Err Dim ReceiveArr() As Byte 39。 接收數(shù)據(jù)數(shù)組 Dim ReceiveData As String 39。 數(shù)據(jù)暫存 Dim Counter As Integer 39。 接收數(shù)據(jù)個數(shù)計數(shù)器 Dim i As Integer 39。 循環(huán)變量 If ( 0) Then Counter = 39。 讀取接收數(shù)據(jù)個數(shù) ReceiveData = 39。 清緩沖 ReceiveArr = 39。 數(shù)據(jù)放入數(shù)組 For i = 0 To 30 Step 1 39。 數(shù)據(jù)格式處理 If (ReceiveArr(i) 16) Then ReceiveData = ReceiveData amp。 0 + Hex(ReceiveArr(i)) amp。 Space(1) 39。 小于16,前面加0ElseReceiveData = ReceiveData amp。 Hex(ReceiveArr(i)) amp。 Space(1) 39。 加空格顯示End If Next i = + ReceiveData 39。 顯示接收的十六進制數(shù)據(jù) = Len() 39。 顯示光標(biāo)位置 End If ReceiveCount = ReceiveCount + Counter 39。 接收計數(shù) = RX: amp。 ReceiveCount39。 接收字節(jié)數(shù)顯示 If = 1 Then39。 自動清空判斷 If ReceiveCount = 65535 Then = End If End IfErr:發(fā)送數(shù)據(jù)部分: Dim outputLen As Integer 39。 發(fā)送數(shù)據(jù)長度 Dim outData As String 39。 發(fā)送數(shù)據(jù)暫存 Dim SendArr() As Byte 39。 發(fā)送數(shù)組 Dim TemporarySave As String 39。 數(shù)據(jù)暫存 Dim dataCount As Integer39。 數(shù)據(jù)個數(shù)計數(shù) Dim i As Integer 39。 局部變量 outData = UCase(Replace(, Space(1), Space(0))) 39。 先去掉空格,再轉(zhuǎn)換為大寫字母 outData = UCase(outData) 39。 轉(zhuǎn)換成大寫 outputLen = Len(outData) 39。 數(shù)據(jù)長度For i = 0 To outputLen TemporarySave = Mid(outData, i + 1, 1) 39。 取一位數(shù)據(jù) If (Asc(TemporarySave) = 48 And Asc(TemporarySave) = 57) Or (Asc(TemporarySave) = 65 And Asc(TemporarySave) = 70) ThendataCount = dataCount + 1 ElseExit ForExit Sub End If Next If dataCount Mod 2 0 Then 39。 判斷十六進制數(shù)據(jù)是否為雙數(shù) dataCount = dataCount 139。 不是雙數(shù),則減1End If outData = Left(outData, dataCount) 39。 取出有效的十六進制數(shù)據(jù) ReDim SendArr(dataCount / 2 1)39。 重新定義數(shù)組長度 For i = 0 To dataCount / 2 1 SendArr(i) = Val(amp。H + Mid(outData, i * 2 + 1, 2)) 39。 取出數(shù)據(jù)轉(zhuǎn)換成十六進制并放入數(shù)組中 NextSendCount = SendCount + (dataCount / 2)39。 計算總發(fā)送數(shù) = TX: amp。 SendCount = SendArr39。 發(fā)送數(shù)據(jù)數(shù)據(jù)幀的判斷Private Sub Timer1_Timer()Dim bnum As IntegerDim inbyte(6) As ByteIf = 關(guān)閉串口通信 ThenOn Error GoTo Err Dim ReceiveArr() As Byte, s% Dim ReceiveData As String Dim ReceiveData1 As String Dim Counter As Integer Dim i As Integer Dim m As Long If ( 0) Then = RGB(0, 255, 0)39。協(xié)調(diào)器入網(wǎng)Counter = ReceiveData = ReceiveArr = 39。======================================For i = 0 To (Counter 1) Step 1If (ReceiveArr(i) 16) Then ReceiveData = ReceiveData amp。 0 amp。 Hex(ReceiveArr(i)) amp。 ElseReceiveData = ReceiveData amp。 Hex(ReceiveArr(i)) amp。 End If Next i = + ReceiveData = Len()ReceiveCount = ReceiveCount + Counter 39。 接收計數(shù) = RX: amp。 ReceiveCount39。 接收字節(jié)數(shù)顯示If (ReceiveArr(0) = amp。H0 And ReceiveArr(1) = amp。H0) Then 39。 = RGB(0, 255, 0) = 0 amp。 0 amp。 0 amp。 0End If39。協(xié)調(diào)器入網(wǎng)If (ReceiveArr(4) = amp。H4A And ReceiveArr(5) = amp。H4E) Then If (ReceiveArr(6) = amp。H53 And ReceiveArr(23)) = amp。H1 Then = RGB(0, 255, 0) If ((ReceiveArr(18) 16) And (ReceiveArr(19) 16)) Then = 0 amp。 Hex(ReceiveArr(18)) amp。 0 amp。 Hex(ReceiveArr(19)) = TrueEnd If End IfEnd If39。噴淋器和報警器入網(wǎng)If (ReceiveArr(4) = amp。H53 And ReceiveArr(5) = amp。H52) Then If (ReceiveArr(6) = amp。H53 And ReceiveArr(18)) = amp。H55 Then If ReceiveArr(19) = amp。H0 Then = RGB(0, 255, 0) = 0 amp。 0 amp。 0 amp。 0 = True End If End IfEnd If39。煙霧傳感器入網(wǎng) 39。1重嵌套 If (ReceiveArr(4) = amp。H53 And ReceiveArr(5) = amp。H52) Then 39。2重嵌套If (ReceiveArr(6) = amp。H53 And ReceiveArr(18)) = amp。H55 Then 39。3重嵌套If ReceiveArr(19) = amp。H0 Then 39。4重嵌套 If ReceiveArr(20) = amp。H1 Then = RGB(255, 0, 0) 39。數(shù)據(jù)庫 (時間) = No