實(shí)驗(yàn)一 基于Z-Stack的磁檢測傳感器實(shí)驗(yàn)_第1頁
實(shí)驗(yàn)一 基于Z-Stack的磁檢測傳感器實(shí)驗(yàn)_第2頁
實(shí)驗(yàn)一 基于Z-Stack的磁檢測傳感器實(shí)驗(yàn)_第3頁
實(shí)驗(yàn)一 基于Z-Stack的磁檢測傳感器實(shí)驗(yàn)_第4頁
實(shí)驗(yàn)一 基于Z-Stack的磁檢測傳感器實(shí)驗(yàn)_第5頁
已閱讀5頁,還剩4頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

實(shí)驗(yàn)一基于Z-Stack的磁檢測傳感器實(shí)驗(yàn)一、實(shí)驗(yàn)?zāi)康膶W(xué)習(xí)磁檢測傳感器的使用方法二、實(shí)驗(yàn)設(shè)備硬件:CC2530射頻板,磁檢測傳感器,串口線,電源,電腦等。軟件:IAR,STC_ISP_V479或者串口調(diào)試助手,CRC_16。三、實(shí)驗(yàn)原理及步驟注意:1.讀者可以直接將配套關(guān)盤\源代碼\無線通訊實(shí)驗(yàn)\Zigbee無線通訊實(shí)驗(yàn)\CC2530控制傳感器實(shí)驗(yàn)\CC2530控制傳感器實(shí)驗(yàn)\實(shí)驗(yàn)一基于Z-Stack的磁檢測傳感器實(shí)驗(yàn)\GenericApp磁檢測傳感器整個(gè)文件夾一起拷貝到Zstack協(xié)議棧安裝之后的Projects目錄的zstack下創(chuàng)建的FRO目錄(筆者在安裝時(shí)選擇的是默認(rèn)安裝,所以將FRO整個(gè)目錄拷貝到C:\TexasInstruments\ZStack-CC2530-2.5.0\Projects\zstack\FRO)下。在編譯源碼時(shí)一定要注意工程的環(huán)境變量設(shè)置,如果有環(huán)境變量問題可以打開相應(yīng)工程然后逐次對(duì)比。建議初學(xué)者在原工程上修改,不要輕易改動(dòng)環(huán)境變量。3.由于工程在編譯時(shí)會(huì)根據(jù)工程設(shè)置的環(huán)境變量去調(diào)用ZStack的文件,所以想要不去修改那些麻煩的環(huán)境變量能夠編譯通過,請(qǐng)按照注意1中筆者的路徑下打開相應(yīng)工程文件,切記?。?!如果直接打開配套關(guān)盤\源代碼無線通訊實(shí)驗(yàn)\Zigbee無線通訊實(shí)驗(yàn)\CC2530控制傳感器實(shí)驗(yàn)\CC2530控制傳感器實(shí)驗(yàn)\下的任何工程而不去修改正確的環(huán)境變量,直接編譯就會(huì)出現(xiàn)很多文件找不到。源碼路徑:配套光盤\源代碼\無線通訊實(shí)驗(yàn)\Zigbee無線通訊實(shí)驗(yàn)\CC2530控制傳感器實(shí)驗(yàn)\CC2530控制傳感器實(shí)驗(yàn)\實(shí)驗(yàn)一基于Z-Stack的磁檢測傳感器實(shí)驗(yàn)\GenericApp磁檢測傳感器\CC2530DB\hex文件路徑:配套光盤\源代碼\無線通訊實(shí)驗(yàn)\Zigbee無線通訊實(shí)驗(yàn)\CC2530控制傳感器實(shí)驗(yàn)\CC2530控制傳感器實(shí)驗(yàn)\可執(zhí)行程序\磁檢測傳感器\3.1磁檢測傳感器介紹檢測傳感器使用的是干簧管。干簧管(ReedSwitch)也稱舌簧管或磁簧開關(guān),是一種磁敏的特殊開關(guān)。它通常有兩個(gè)軟磁性材料做成的、無磁時(shí)斷開的金屬簧片觸點(diǎn),有的還有第三個(gè)作為常閉觸點(diǎn)的簧片。這些簧片觸點(diǎn)被封裝在充有惰性氣體(如氮、氦等)或真空的玻璃管里,玻璃管內(nèi)平行封裝的簧片端部重疊,并留有一定間隙或相互接觸以構(gòu)成開關(guān)的常開或常閉觸點(diǎn)。干簧管比一般機(jī)械開關(guān)結(jié)構(gòu)簡單、體積小、速度高、工作壽命長;而與電子開關(guān)相比,它又有抗負(fù)載沖擊能力強(qiáng)等特點(diǎn),工作可靠性很高。干簧管可以作為傳感器用,用于計(jì)數(shù),限位等等。例如,有一種自行車公里計(jì),就是在輪胎上粘上磁鐵,在一旁固定上干簧管構(gòu)成的。把干簧管裝在門上,可作為開門時(shí)的報(bào)警用,也可作為開關(guān)使用。干簧管的外形如圖3.1所示。圖3.1干簧管磁控傳感器3.1.2磁檢測傳感器的電路圖磁檢測傳感器的電路圖,如圖3.2所示。圖3.2磁控傳感器電路原理圖由圖3.2可以看出磁控的檢測管腳與CC2530的P0.7連接。當(dāng)沒有磁性物質(zhì)靠近磁檢測傳感器時(shí),磁檢測傳感器開路,Q1不導(dǎo)通。當(dāng)有磁性物質(zhì)靠近磁檢測傳感器的時(shí)候,磁檢測傳感器導(dǎo)通,則在Q1的基極得到使得Q1導(dǎo)通的電壓,即Q1導(dǎo)通,電源從R6--D3--Q1--地形成電流回路,此時(shí)P0.7為低電平。3.2程序代碼分析本實(shí)驗(yàn)主要是傳感器方面的實(shí)驗(yàn),對(duì)應(yīng)Zigbee組網(wǎng)通信方面的解析請(qǐng)參考組網(wǎng)實(shí)驗(yàn),所以ZStack具體的通信在這里不會(huì)作過多的解析。3.2.1ZStack組網(wǎng)通信說明基本流程:本實(shí)驗(yàn)的協(xié)調(diào)器與終端節(jié)點(diǎn)采用固定的PANID=0x2FFFF(同一個(gè)地方多人實(shí)驗(yàn)最好自己獨(dú)立一個(gè)PANID,另外PANID設(shè)定與其他已啟動(dòng)的PANID相同的話,那么你的PANID會(huì)自動(dòng)加1),廣播模式。首先是上位機(jī)發(fā)Modbus指令(指令格式后面有介紹)給協(xié)調(diào)器,協(xié)調(diào)器把從上位機(jī)接收到的數(shù)據(jù)通過無線發(fā)送出去,終端節(jié)點(diǎn)接收到數(shù)據(jù)以后判定是不是自己對(duì)應(yīng)的地址及傳感器,如果是那么作出反應(yīng),讀取傳感器數(shù)據(jù)并發(fā)送給協(xié)調(diào)器,協(xié)調(diào)器接收到傳感器數(shù)據(jù)以后就轉(zhuǎn)發(fā)給上位機(jī)。3.2.2協(xié)調(diào)器基本工作代碼分析Revice_From_PC(unsignedcharport,unsignedcharevent)函數(shù)負(fù)責(zé)接收上位機(jī)的串口數(shù)據(jù),并把數(shù)據(jù)通過無線發(fā)送出去。GenericApp_SendTheMessage(UINT8*PC_CMD,UINT8Rx_Count)函數(shù)負(fù)責(zé)把PC_CMD里面的Rx_Count個(gè)數(shù)據(jù)通過無線發(fā)送出去。GenericApp_MessageMSGCB(afIncomingMSGPacket_t*pkt)函數(shù)負(fù)責(zé)處理無線接收到的數(shù)據(jù),并轉(zhuǎn)發(fā)給串口。GenericApp_ProcessEvent(bytetask_id,UINT16events)函數(shù)負(fù)責(zé)事件處理函數(shù),其中caseAF_INCOMING_MSG_CMD是無線接收響應(yīng)。GenericApp_Init(bytetask_id)函數(shù)負(fù)責(zé)硬件初始化3.2.3終端節(jié)點(diǎn)基本工作代碼分析GenericApp_Init(bytetask_id)函數(shù)負(fù)責(zé)硬件初始化。GenericApp_ProcessEvent(bytetask_id,UINT16events)函數(shù)負(fù)責(zé)事件處理函數(shù),其中caseAF_INCOMING_MSG_CMD是無線接收響應(yīng)。GenericApp_MessageMSGCB(afIncomingMSGPacket_t*pkt)函數(shù)負(fù)責(zé)處理無線接收到的數(shù)據(jù),并調(diào)用傳感器讀取數(shù)據(jù)函數(shù)。GenericApp_SendTheMessage(UINT8*PC_CMD,UINT8Rx_Count)函數(shù)負(fù)責(zé)把PC_CMD里面的Rx_Count個(gè)數(shù)據(jù)通過無線發(fā)送出去。Read_Sense(void)函數(shù)負(fù)責(zé)傳感器數(shù)據(jù)的讀取并發(fā)數(shù)據(jù)發(fā)送出去cal_crc(UINT8*snd,UINT8num)函數(shù)是CRC-16校驗(yàn)碼生成函數(shù)。3.2.4Modbus指令介紹Modbus協(xié)議是1979年由Modicon發(fā)明,應(yīng)用于電子控制器上的一種通用語言,它已經(jīng)成為一通用工業(yè)標(biāo)準(zhǔn),目前由IDA組織管理,它定義了一個(gè)控制器能認(rèn)識(shí)使用的消息結(jié)構(gòu),而不管它們是經(jīng)過何種網(wǎng)絡(luò)進(jìn)行通信的。它描述了一控制器請(qǐng)求訪問其它設(shè)備的過程,如何回應(yīng)來自其它設(shè)備的請(qǐng)求,以及怎樣偵測錯(cuò)誤并記錄。它制定了消息域格局和內(nèi)容的公共格式ModBus協(xié)議采用查詢--響應(yīng)的工作模式查詢消息中的功能代碼告之被選中的從設(shè)備要執(zhí)行何種功能,數(shù)據(jù)段必須包含要告之從設(shè)備的信息:從何寄存器開始讀及要讀或者寫的寄存器數(shù)量。錯(cuò)誤檢測域?yàn)閺脑O(shè)備提供了一種驗(yàn)證消息內(nèi)容是否正確的方法。如果從設(shè)備有響應(yīng),那么從設(shè)備響應(yīng)的消息中有查詢的功能代碼,并把收集的信息一道發(fā)送給查詢端,如果從設(shè)備發(fā)現(xiàn)有錯(cuò)誤的幀,那么功能代碼將以錯(cuò)誤功能代碼來響應(yīng)。ModBus協(xié)議的兩種傳輸方式ASCII模式下的幀格式如下:表8開始地址功能碼數(shù)據(jù)LRC結(jié)束1字節(jié)2字節(jié)2字節(jié)0~~2*252字節(jié)2字節(jié)2字節(jié)CR,LF在消息中的每個(gè)8Bit字節(jié)都作為一個(gè)ASCII碼(兩個(gè)十六進(jìn)制字符)發(fā)送。這種方式的主要優(yōu)點(diǎn)是字符發(fā)送的時(shí)間間隔可達(dá)到1秒而不產(chǎn)生錯(cuò)誤。由于ASCII模式基本很少使用,在此不再多介紹。RTU模式下的幀格式如下:表9地址功能碼數(shù)據(jù)CRC校驗(yàn)8位8位N*8位16位當(dāng)控制器設(shè)為在Modbus網(wǎng)絡(luò)上以RTU(遠(yuǎn)程終端單元)模式通信,在消息中的每個(gè)8Bit字節(jié)包含兩個(gè)4Bit的十六進(jìn)制字符。這種方式的主要優(yōu)點(diǎn)是:在同樣的波特率下,可比ASCII方式傳送更多的數(shù)據(jù)。CRC--16校驗(yàn)(循環(huán)冗長檢測)的介紹CRC校驗(yàn)碼生成你可以參考軟件“CRC_16”,軟件地址:配套光盤\應(yīng)用程序\串口調(diào)試及CRC軟件在RTU模式下,采用CRC16,它包含2個(gè)字節(jié),為一個(gè)16位的二進(jìn)制數(shù)。CRC產(chǎn)生過程中,每個(gè)8位字符都單獨(dú)和寄存器內(nèi)容相異或(XOR),結(jié)果向最低有效位方向移動(dòng),最高有效位以0填充。LSB被提取出來檢測,如果LSB為1,寄存器單獨(dú)和預(yù)置的值或一下,如果LSB為0,則不進(jìn)行。整個(gè)過程要重復(fù)8次。在最后一位(第8位)完成后,下一個(gè)8位字節(jié)又單獨(dú)和寄存器的當(dāng)前值相或。最終寄存器中的值,是消息中所有的字節(jié)都執(zhí)行之后的CRC值。CRC添加到消息中時(shí),低字節(jié)先加入,然后高字節(jié)。簡單的CRC功能函數(shù)如下,其是固定的一種格式,在此不再多解釋UINT16cal_crc(UINT8*snd,UINT8num){UINT8i,j;UINT16c,crc=0xFFFF;for(i=0;i<num;i++){c=snd[i]&0x00FF;crc^=c;for(j=0;j<8;j++){if(crc&0x0001){crc>>=1;crc^=0xA001;}elsecrc>>=1;}}return(crc);}ModBus協(xié)議的功能碼技術(shù)手冊(cè)地址:配套光盤\附件\ModBus協(xié)議下面只列出常用的0~~21功能碼表10功能碼名稱用途描述01讀取線圈狀態(tài)取得一組邏輯線圈的當(dāng)前狀態(tài),判斷是ON還是OFF02讀取輸入狀態(tài)取得一組開關(guān)輸入的當(dāng)前狀態(tài),判斷ON還是OFF03讀取保持寄存器在一個(gè)或多個(gè)保持寄存器中取得當(dāng)前的二進(jìn)制值04讀取輸入寄存器在一個(gè)或多個(gè)輸入寄存器中取得當(dāng)前的二進(jìn)制值05強(qiáng)置單線圈強(qiáng)置一個(gè)邏輯線圈的通斷狀態(tài)06預(yù)置單寄存器把具體二進(jìn)制裝入一個(gè)保持寄存器07讀取異常狀態(tài)取得8個(gè)內(nèi)部線圈的通斷狀態(tài),這8個(gè)線圈的地址由控制器決定,用戶邏輯可以將這些線圈定義。08回送診斷校驗(yàn)把診斷校驗(yàn)報(bào)文送從機(jī)09編程(適用485)使主機(jī)模擬編程器作用,修改PC邏輯10控詢(適用485)可使得主機(jī)與一臺(tái)正在執(zhí)行長程序任務(wù)的從機(jī)通信,查詢?cè)搹臋C(jī)是否完成操作任務(wù)。11讀取事件個(gè)數(shù)使主機(jī)發(fā)出單詢問,判斷操作是否成功12讀取通信事件記錄使得主機(jī)檢索每臺(tái)從機(jī)的ModBus事務(wù)處理記錄,如果某一個(gè)事務(wù)處理完成,記錄會(huì)出相關(guān)錯(cuò)誤13編程(484等)使得主機(jī)模擬編程器功能修改PC從機(jī)邏輯14探詢(484等)使得主機(jī)與正在執(zhí)行任務(wù)的從機(jī)通信,定期控詢從機(jī)是否已完成其程序操作,僅在有13這個(gè)功能碼的報(bào)文發(fā)送后,本功能碼才發(fā)送15強(qiáng)置多線圈強(qiáng)置一串連續(xù)邏輯線圈的通斷16預(yù)置多寄存器把具體的二進(jìn)制值裝入一串連續(xù)的保持寄存器17報(bào)告從機(jī)標(biāo)識(shí)使得主機(jī)判斷編址從機(jī)的類型及該從機(jī)的運(yùn)行指示燈的狀態(tài)18(884和MICRO84)使得主機(jī)模擬編程功能,修改PC狀態(tài)邏輯19重置通信鏈路發(fā)生非可修改錯(cuò)誤后,從機(jī)復(fù)位于已知狀態(tài),可重置順序字節(jié)20讀取通用參數(shù)顯示擴(kuò)展存儲(chǔ)器文件的數(shù)據(jù)信息21寫入通用參數(shù)把通用參數(shù)寫入擴(kuò)展存儲(chǔ)文件或者修改它功能碼舉例,以03為例子發(fā)送:地址+0x03+StartAddr_Hi+StartAddr_Lo+Count_Hi+Count_Lo+CRC返回:地址+0x03+Count+Reg_Hi+Reg_Lo+CRC地址:從機(jī)地址,可以理解為終端節(jié)點(diǎn)的固有地址。StartAddr_Hi:開始地址的高字節(jié)StartAddr_Lo:開始地址的低字節(jié)Count_Hi:寄存器數(shù)量的高字節(jié)Count_Lo:寄存器數(shù)量的低字節(jié)CRC:兩字節(jié)的CRC校驗(yàn)碼Reg_Hi:寄存器數(shù)據(jù)的高字節(jié)Reg_Lo:寄存器數(shù)據(jù)的低字節(jié)Count:返回的有效數(shù)據(jù)字節(jié)個(gè)數(shù),就是發(fā)送指令里寄存器個(gè)數(shù)的2倍。例如:要讀取地址為01,功能碼為03,開始地址為0000,讀取2個(gè)寄存器(即0002)的ModBus--RTU格式的命令發(fā)送010300000002c40b接收01030400010003EBF2那么接收到的寄存器數(shù)據(jù)有兩個(gè)分別是0001、0003,所以有效數(shù)據(jù)字節(jié)個(gè)數(shù)為04。3.2.5磁檢測傳感器采集代碼分析voidRead_Sense(void){UINT8i;UINT16temp;if(buffer[0]==0x01)//判定第0個(gè)字節(jié)是不是本終端節(jié)點(diǎn)地址01{if(buffer[1]==0x03)//判定第1個(gè)字節(jié)是不是Modbus讀取指令03{ Crc_buf[0]=((cal_crc(buffer,6)>>8)&0xff);//取得CRC值的高8位 Crc_buf[1]=(cal_crc(buffer,6)&0xff);//取得CRC值的低8位 if((buffer[6]==Crc_buf[1])&&(buffer[7]==Crc_buf[0])){//判定CRC校驗(yàn)碼是否相同//磁控傳感器if(buffer[3]==0x28){if(P0_7==1)//判定P0.7是否為高電平,如果是則磁檢傳感器未導(dǎo)通,反之導(dǎo)通。{buffer[4]=0x00;HalLedSet(HAL_LED_1,HAL_LED_MODE_ON);}else{buffer[4]=0x01;HalLedSet(HAL_LED_1,HAL_LED_MODE_OFF);}buffer[2]=(buffer[4]*256+buffer[5])*2;buffer[3]=0;//buffer[4]=temp&0x00FF;buffer[6]=((cal_crc(buffer,5)>>8)&0xff);//取得CRC值的高8位 buffer[5]=(cal_crc(buffer,5)&0xff);//取得CRC值的低8位GenericApp_SendTheMessage(buffer,7);

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論