雷俊峰(襄陽(yáng)職業(yè)技術(shù)學(xué)院汽車工程學(xué)院,湖北襄陽(yáng),441050)
單片機(jī)MODBUS通訊程序開(kāi)發(fā)
雷俊峰
(襄陽(yáng)職業(yè)技術(shù)學(xué)院汽車工程學(xué)院,湖北襄陽(yáng),441050)
本文主要介紹單片機(jī)與計(jì)算機(jī)之間的串行通訊程序的功能結(jié)構(gòu)和部分源代碼,使用MODBUS RTU通訊協(xié)議實(shí)現(xiàn)兩者之間的工程數(shù)據(jù)交換,單片機(jī)作為從站,對(duì)主站的通訊操作要求進(jìn)行應(yīng)答,返回操作結(jié)果,實(shí)現(xiàn)現(xiàn)場(chǎng)數(shù)據(jù)的采集。
單片機(jī);MODBUS協(xié)議;通訊應(yīng)答程序
某水處理公司希望為其產(chǎn)品添加遠(yuǎn)程監(jiān)控設(shè)備關(guān)鍵狀態(tài)的功能,筆者為其開(kāi)發(fā)一款通訊模塊,鑒于產(chǎn)品的功能要求較為簡(jiǎn)單,而成本控制較為嚴(yán)格,因而選擇采用計(jì)算機(jī)和單片機(jī)組成上下位機(jī)系統(tǒng),計(jì)算機(jī)放置于中控室,安裝組態(tài)監(jiān)控軟件,下位機(jī)就近裝設(shè)在水處理產(chǎn)品上,與現(xiàn)場(chǎng)傳感器相連,上下位機(jī)通過(guò)串行通訊實(shí)時(shí)交換數(shù)據(jù),本文重點(diǎn)探討下位機(jī)單片機(jī)的通訊應(yīng)答程序的開(kāi)發(fā)。
在確定采用串行通訊方式之后,可以保證數(shù)據(jù)的雙向傳送,但傳送的數(shù)據(jù)內(nèi)容的含義則需要通過(guò)通訊協(xié)議約定。經(jīng)過(guò)對(duì)比,通訊協(xié)議選擇MODBUS通訊協(xié)議,該協(xié)議具有標(biāo)準(zhǔn)、開(kāi)放、通俗易懂、適應(yīng)性好等特點(diǎn),應(yīng)用開(kāi)發(fā)較為簡(jiǎn)單。具體又分為RTU和ASCII兩種傳輸方式,性能區(qū)別主要在于,RTU方式通訊效率較高,ASCII方式可直接傳送ASCII字符,較為直觀,鑒于本應(yīng)用中無(wú)需顯示字符,故而選擇RTU方式,上位機(jī)的通訊程序集成在組態(tài)軟件中,可直接在軟件的通訊方式中選擇,下位機(jī)的通訊程序則需要自行開(kāi)發(fā)。
MODBUS RTU協(xié)議采用主、從站工作方式,規(guī)定了功能、數(shù)據(jù)幀格式,我們以上位機(jī)為主站,下位機(jī)為從站,從站只需要應(yīng)答主站的讀寫操作指令,返回相應(yīng)的讀寫結(jié)果,這樣設(shè)計(jì)可以減少程序開(kāi)發(fā)工作量。站在從站視角,以主站讀取數(shù)據(jù)為例,MODBUS RTU通訊模式的數(shù)據(jù)幀格式為:
表1 主站操作命令發(fā)送幀(8個(gè)字節(jié))
表2 從站操作結(jié)果返回幀(6+N個(gè)字節(jié))
主站發(fā)送讀指令后,從站返回讀取結(jié)果,在這一問(wèn)一答過(guò)程中,完成數(shù)據(jù)的交換,因此單片機(jī)端的開(kāi)發(fā)主要是通訊應(yīng)答程序的編寫。
單片機(jī)上的通訊程序主要完成以下任務(wù):串行通訊初始化、接收主站數(shù)據(jù)幀、校驗(yàn)數(shù)據(jù)幀是否合法完整、執(zhí)行主站讀寫操作命令、發(fā)送結(jié)果返回幀到主站。
圖1 流程圖
可以在單片機(jī)里面設(shè)置接收和發(fā)送緩沖區(qū),該區(qū)域是上位機(jī)和下位機(jī)共享的,均可以向該區(qū)域讀取或?qū)懭胫?,所有的通訊指令都是針?duì)該快區(qū)域的操作,下位機(jī)也是根據(jù)這塊區(qū)域的值做相應(yīng)的操作。
程序的結(jié)構(gòu)為main函數(shù)、串行中斷處理程序(接收主站數(shù)據(jù)幀,發(fā)送從站返回幀)、串口初始化子函數(shù)等。
為敘述簡(jiǎn)便,在頭文件中已將8位無(wú)符號(hào)整形變量預(yù)定義為Uint8,16位無(wú)符號(hào)整形變量預(yù)定義為Uint16。
3.2 串行通訊初始化函數(shù)
3.3 串行中斷處理程序
單片機(jī)側(cè)通訊程序通常需要自行開(kāi)發(fā),調(diào)試工作量比較大,通訊程序目前可以實(shí)現(xiàn)數(shù)據(jù)交換,下一步計(jì)劃進(jìn)一步提高通訊的穩(wěn)定性和傳輸效率,希望筆者的開(kāi)發(fā)經(jīng)歷能夠給讀者提供借鑒和啟發(fā)。
[1] http://blog.gkong.com/jiayoua_65051.ashx.
[2] 劉杰.王慧組態(tài)王與單片機(jī)多機(jī)串口通信的設(shè)計(jì)[J].電子設(shè)計(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