夏春飛



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