雷俊峰(襄陽職業技術學院汽車工程學院,湖北襄陽,441050)
單片機MODBUS通訊程序開發
雷俊峰
(襄陽職業技術學院汽車工程學院,湖北襄陽,441050)
本文主要介紹單片機與計算機之間的串行通訊程序的功能結構和部分源代碼,使用MODBUS RTU通訊協議實現兩者之間的工程數據交換,單片機作為從站,對主站的通訊操作要求進行應答,返回操作結果,實現現場數據的采集。
單片機;MODBUS協議;通訊應答程序
某水處理公司希望為其產品添加遠程監控設備關鍵狀態的功能,筆者為其開發一款通訊模塊,鑒于產品的功能要求較為簡單,而成本控制較為嚴格,因而選擇采用計算機和單片機組成上下位機系統,計算機放置于中控室,安裝組態監控軟件,下位機就近裝設在水處理產品上,與現場傳感器相連,上下位機通過串行通訊實時交換數據,本文重點探討下位機單片機的通訊應答程序的開發。
在確定采用串行通訊方式之后,可以保證數據的雙向傳送,但傳送的數據內容的含義則需要通過通訊協議約定。經過對比,通訊協議選擇MODBUS通訊協議,該協議具有標準、開放、通俗易懂、適應性好等特點,應用開發較為簡單。具體又分為RTU和ASCII兩種傳輸方式,性能區別主要在于,RTU方式通訊效率較高,ASCII方式可直接傳送ASCII字符,較為直觀,鑒于本應用中無需顯示字符,故而選擇RTU方式,上位機的通訊程序集成在組態軟件中,可直接在軟件的通訊方式中選擇,下位機的通訊程序則需要自行開發。
MODBUS RTU協議采用主、從站工作方式,規定了功能、數據幀格式,我們以上位機為主站,下位機為從站,從站只需要應答主站的讀寫操作指令,返回相應的讀寫結果,這樣設計可以減少程序開發工作量。站在從站視角,以主站讀取數據為例,MODBUS RTU通訊模式的數據幀格式為:

表1 主站操作命令發送幀(8個字節)

表2 從站操作結果返回幀(6+N個字節)
主站發送讀指令后,從站返回讀取結果,在這一問一答過程中,完成數據的交換,因此單片機端的開發主要是通訊應答程序的編寫。
單片機上的通訊程序主要完成以下任務:串行通訊初始化、接收主站數據幀、校驗數據幀是否合法完整、執行主站讀寫操作命令、發送結果返回幀到主站。

圖1 流程圖
可以在單片機里面設置接收和發送緩沖區,該區域是上位機和下位機共享的,均可以向該區域讀取或寫入值,所有的通訊指令都是針對該快區域的操作,下位機也是根據這塊區域的值做相應的操作。
程序的結構為main函數、串行中斷處理程序(接收主站數據幀,發送從站返回幀)、串口初始化子函數等。
為敘述簡便,在頭文件中已將8位無符號整形變量預定義為Uint8,16位無符號整形變量預定義為Uint16。

3.2 串行通訊初始化函數

3.3 串行中斷處理程序


單片機側通訊程序通常需要自行開發,調試工作量比較大,通訊程序目前可以實現數據交換,下一步計劃進一步提高通訊的穩定性和傳輸效率,希望筆者的開發經歷能夠給讀者提供借鑒和啟發。
[1] http://blog.gkong.com/jiayoua_65051.ashx.
[2] 劉杰.王慧組態王與單片機多機串口通信的設計[J].電子設計工程 2009(7).
[3] http://blog.csdn.net/tiemufeng1122/article/details/17791903.
SCM MODBUS communication program development
Lei Junfeng
(School of automotive engineering,Xiangyang Vocational and Technical College,Xiangyang Hubei,441050)
This paper mainly introduces the serial communication between SCM and computer program of the function structure and part of the source code, using the MODBUS RTU communication protocol engineering data exchange between them. The single chip microcomputer as from the station, the main station communication operation request response, return the results of the operation, realize data acquisition.
single chip microcomputer;MODBUS protocol;communication answering program