夏春飛
摘要 本文將51單片機通過485總線接入計算機,由計算機將數(shù)據(jù)上傳到中移物聯(lián)網(wǎng)云平臺,并通過計算機及Android手機實現(xiàn)遠程監(jiān)控,將傳統(tǒng)的控制技術(shù)引入遠程監(jiān)控,為職業(yè)院校的機電專業(yè)或信息類專業(yè)引入物聯(lián)網(wǎng)技術(shù)提供了技術(shù)參考。
[關(guān)鍵詞]OneNET 51單片機 modbus協(xié)議C#Android
單片機控制技術(shù)是自動控制領(lǐng)域的核心技術(shù),各職業(yè)院校的機電技術(shù)專業(yè)都建設(shè)了相應(yīng)實訓室,而隨著物聯(lián)網(wǎng)的興起,如何將新技術(shù)引入到傳統(tǒng)專業(yè),培養(yǎng)新時代合格的機電類高技能人才,成為了職業(yè)院校教師需要思考的問題。本文以LM35溫度傳感器采集信號為例,將LM35通過AD轉(zhuǎn)換接入51單片機,單片機通過485總線接入計算機,再通過計算機將數(shù)據(jù)上傳到中移動物聯(lián)網(wǎng)云平臺,通過手機實現(xiàn)遠程監(jiān)控。具體實現(xiàn)過程如下:
1 51單片機通過485總線接入計算機
1.1 單片機硬件設(shè)計
本設(shè)計單片機芯片采用STC12C5A60S2,因它價格便宜,且和8051指令、管腳完全兼容,并且內(nèi)部自帶高達60K FLASHROM。通信采用TTL轉(zhuǎn)RS-485模塊,在Modbus通訊中單片機作為從機,PC機作為主機.通過RS232-485接口實現(xiàn)通訊。
1.2 485通信技術(shù)
485總線是常用的一種工業(yè)總線,采用平衡發(fā)送和差分接收方式實現(xiàn)通信,有極強的抗共模干擾的能力,最大的通信距離約為1219m,一般采用MODBUS/RTU通訊協(xié)議,根據(jù)Modbus協(xié)議中的RTU模式實現(xiàn)讀寫寄存器等多個功能。本程序可實現(xiàn)01、02、03、04、05、06、15、16功能碼,且修改方便靈活。具體實現(xiàn)如下:
1.2.1 單片機485從機通信程序
本文的Modbus從機通信程序有resister.h、Modbus.e及maln.e文件,程序編寫說明如下。
resister.h文件:定義可實現(xiàn)的功能碼,如可讀可寫離散寄存器定義為#defineRWSTATUESO O,可實現(xiàn)功能碼01、05、15;保持寄存器定義為#define RWDATO40000,可實現(xiàn)功能碼03、06、16;其他的寄存器可根據(jù)需要靈活定義,從而可實現(xiàn)01、02、03、04、05、06、15、16功能碼。
Modbus.e文件:首先定義接收數(shù)組ucharreceBuf[50];發(fā)送數(shù)組ucharsendBuf[50],再定義接收數(shù)據(jù)個數(shù)變量receCount及發(fā)送數(shù)據(jù)個數(shù)變量sendCount。根據(jù)需要定義數(shù)據(jù)區(qū)如3個只讀整型ucharROdat[3],3個可讀可寫整型uintRWdat[3],只讀線圈bit ROstatus0=0,可讀可寫線圈bitRWstatus0=0。然后編寫各功能碼的實現(xiàn)函數(shù),如05功能碼的實現(xiàn)函數(shù)程序流程圖見圖1,其余的根據(jù)需要寫出。有了功能碼實現(xiàn)函數(shù),則寫checkCommOModbus()函數(shù),主要是根據(jù)查詢串口接收的數(shù)據(jù)包內(nèi)容執(zhí)行相應(yīng)的功能碼動作,實現(xiàn)程序流程框圖見圖2。
1.2.2 編寫LM35傳感器通過AD轉(zhuǎn)換獲取溫度
先編寫控制函數(shù)adzh(),LM35通過ADC0809將轉(zhuǎn)換后的數(shù)據(jù)存入RWdat[0],因ADC0809的參考程序較多,這里不再重復(fù)。將編寫好的控制函數(shù)加入循環(huán)函數(shù)掃描,主函數(shù)的流程框圖如圖3。另外計算出modbus協(xié)議中該數(shù)據(jù)的讀取命令,并通過串口助手測試。如RWstatus[0]為O,則modbus讀取RWdat[0]的命令為01 03 00 0000 01 84 0A。
2 電腦與云平臺的通信程序
(1) OneNET是中國移動物聯(lián)網(wǎng)有限公司面向公共服務(wù)自主研發(fā)的開放云平臺,學生自己注冊即可使用。先新建設(shè)備,并得到appkey=”xxxxxxxx”,DeviceID=”xxxxx”,添加數(shù)據(jù)流wendu,給后邊的程序使用,最后針對HTTP協(xié)議,下載OneNET提供的c#語言SDK。
(2)編寫單片機控制類Dpjcs.cs。首先定義好獲取溫度命令byte[] onWendu= newbyte[]{ Ox01, Ox03, Ox00, Ox00, Ox00, Ox01,Ox84,OxOA),具體獲取溫度的GetWendu()函數(shù)流程圖見圖4,串口程序部份省略。
(3)上傳溫度值到云平臺并查看數(shù)據(jù),流程圖如圖5。當點擊上傳數(shù)據(jù)按鈕,則實例化單片機控制類Dpjcs.cs,調(diào)用類中的GetWendu0函數(shù)獲取溫度,再調(diào)用己下載SDK中的方法上傳數(shù)據(jù)。獲取溫度數(shù)據(jù)顯示見流程圖。
(4)最終生成的運行界面如圖6,通過左邊的發(fā)送及接收按鈕可對單片機進行測試。通過上傳數(shù)據(jù)按鈕可將采集后的溫度間隔1秒持續(xù)上傳數(shù)據(jù)。點擊獲取按鈕以1S的時間間隔采集云平臺數(shù)據(jù)并顯示在文本框間中。
3 Android手機與云平臺的通信
(1)在OneNET文檔中心,根據(jù)查看單個數(shù)據(jù)流的API文檔,寫相應(yīng)實體類。
(2)主程序利用異步線程AsyncTask類,用OkHttp訪問網(wǎng)絡(luò)獲取數(shù)據(jù),用gson進行解析后,將獲取數(shù)據(jù)返回給UI界面中的文本框。AsyncTask類中dolnBackground回調(diào)方法的程序流程見圖7,onPostExecute的回調(diào)方法只須將解析出的溫度值賦值給文本框即可。最終生成的手機運行界面如圖8,可以實時查看溫度。
4 結(jié)論
本文通過對51單片機加入modbus協(xié)議從機程序,PC作為主機,用Visual C#進行編程進行數(shù)據(jù)獲取并上傳到中移動物聯(lián)網(wǎng)云平臺,再使用手機查看相應(yīng)信息。為學生及相關(guān)學習者學習使用云平臺上傳及查看數(shù)據(jù)提供了一種方法,經(jīng)實踐證明,效果良好。但本文主要針對學習,所以用PC機作為了網(wǎng)關(guān)使用,在應(yīng)用中還須根據(jù)實際情況選擇合適的產(chǎn)品。
參考文獻
[1]中國移動物聯(lián)網(wǎng)開放平臺OneNet文檔中心https: //open. iot. 10086. cn/,
[2]《c#入門典(第5版)》Karli Watson,Christian Nagel(美國)著齊立波(譯)[M].北京:清華大學出版社,2015.
[3]陳文.深入理解Android網(wǎng)絡(luò)編程:技術(shù)詳解與最佳實踐[M].機械工業(yè)出版社.2014.