朱姣
摘 要:通過對Modbus RTU協(xié)議的詳細(xì)分析,基于AT91SAM7X256單片機功能,開發(fā)了一種關(guān)于抽油機控制器數(shù)據(jù)采集及模擬的上位機軟件。以4~20mA的模擬量作為輸入,按照一定規(guī)約轉(zhuǎn)換后的工程值存儲在AT91SAM7X256單片機的寄存器中,基于C#實現(xiàn)的上位機軟件通過Modbus RTU協(xié)議進(jìn)行數(shù)據(jù)采集,通過組態(tài)軟件實現(xiàn)控制模擬。
關(guān)鍵詞:Modbus RTU協(xié)議;數(shù)據(jù)采集;控制模擬;組態(tài)軟件
DOIDOI:10.11907/rjdk.151609
中圖分類號:TP302
文獻(xiàn)標(biāo)識碼:A 文章編號文章編號:16727800(2015)009003403
0 引言
Modbus協(xié)議已經(jīng)成為我國工業(yè)自動化網(wǎng)絡(luò)協(xié)議規(guī)范的國家標(biāo)準(zhǔn)之一,國內(nèi)許多廠商的產(chǎn)品或系統(tǒng)均支持該協(xié)議[1]。Modbus協(xié)議是由Modicon公司在1979年開發(fā)出來的網(wǎng)絡(luò)協(xié)議,是第一個真正意義上用于工業(yè)現(xiàn)場的總線協(xié)議,它定義了設(shè)備與設(shè)備之間的信息傳輸方式,使控制器之間、控制器和其它設(shè)備之間可以進(jìn)行通信和數(shù)據(jù)傳輸 [2]。文獻(xiàn)[1]介紹了一種基于MSP430單片機的Modbus協(xié)議軟件設(shè)計方法,只是簡單地將通信過程分為4個階段,未涉及采集到的數(shù)據(jù)。文獻(xiàn)[3]把特定數(shù)據(jù)從單片機的存儲設(shè)備里讀取出來,作適當(dāng)處理后存儲到數(shù)據(jù)庫中并顯示部分?jǐn)?shù)據(jù),而在現(xiàn)場工業(yè)控制過程中往往需要的是實時數(shù)據(jù),所以數(shù)據(jù)庫的設(shè)計顯得有些冗余。文獻(xiàn)[4]開發(fā)設(shè)計了一款上位機仿真軟件,為數(shù)據(jù)采集系統(tǒng)調(diào)試、檢驗提供了便捷的手段,但是不能直觀仿真顯示采集數(shù)據(jù)的信息。為了使人們更加直觀地看到采集的數(shù)據(jù),通過對Modbus協(xié)議實用案例的分析和研究,本設(shè)計進(jìn)行了完善,并采用組態(tài)軟件實現(xiàn)了數(shù)據(jù)的顯示,達(dá)到了數(shù)據(jù)采集與控制模擬的目的。
1 系統(tǒng)總體結(jié)構(gòu)
系統(tǒng)體系結(jié)構(gòu)如圖1所示。該系統(tǒng)主要包括5大功能區(qū),各功能模塊如下:
(1) 模擬量4~20mA:根據(jù)CPU以及外圍設(shè)備正常工作時所需要的供電電壓,選取合適的電阻值,從而獲得模擬量4~20mA的電流值作為輸入。
(2) CPU:中央處理單元,專用于對采集到的數(shù)據(jù)進(jìn)行處理的單元模塊。本設(shè)計中通過I/O口接收輸入的模擬量,再通過A/D轉(zhuǎn)化模塊將模擬量轉(zhuǎn)為數(shù)字量并存儲在CPU的Registers中。
(3) Modbus Data:一旦下位機(從站)接收到上位機(主站)下達(dá)的正確命令,則從站立刻將CPU所存儲的數(shù)據(jù)進(jìn)行處理,遵照Modbus RTU協(xié)議規(guī)范,形成Modbus ADU數(shù)據(jù)包,通過串口發(fā)送出去。
(4) 上位機:基于C#編寫實時顯示數(shù)據(jù)軟件。接收來自串口傳送的數(shù)據(jù)包,按照Modbus RTU協(xié)議對數(shù)據(jù)包進(jìn)行解析,獲得要顯示的數(shù)據(jù)。
(5) 組態(tài)軟件:使用Espider 力控6.0組態(tài)軟件直觀顯示數(shù)據(jù)。
圖1 系統(tǒng)結(jié)構(gòu)
2 系統(tǒng)設(shè)計
2.1 硬件電路設(shè)計
2.1.1 單片機電源模塊
AT91SAM7X256是基于32位ARM RISC處理器系列微控制器中的一員,集成有256K字節(jié)的高速Flash和64K字節(jié)的SRAM和全套外圍設(shè)備。硬件系統(tǒng)采用24V電源作為輸入電壓,經(jīng)過兩次電路轉(zhuǎn)換(先由24V轉(zhuǎn)為5V,再由5V通過內(nèi)部電路轉(zhuǎn)為3.3V)后給AT91SAM7X256管腳VDDIN等提供輸入標(biāo)稱值為3.3V的電壓,AT91SAM7X256工作后通過VDDOUT管腳輸出1.8V電壓為各個邏輯部件供電。
2.1.2 串口通信模塊
系統(tǒng)采用通用的RS232作為串口通信。通過CPU各個管腳PA3、PA4、RXD1、TXD1和VDD3.3與轉(zhuǎn)換芯片連接,達(dá)到串口數(shù)據(jù)收發(fā)的目的。
2.2 軟件設(shè)計
軟件設(shè)計包含3部分:上位機PC界面設(shè)計、組態(tài)軟件設(shè)計以及下位機控制系統(tǒng)設(shè)計。
2.2.1 上位機軟件設(shè)計
上位機軟件主要完成本機設(shè)置和數(shù)據(jù)實時顯示2個任務(wù)。本機設(shè)置包括對串口通信的設(shè)置:選擇串口,設(shè)置串口(本系統(tǒng)采用默認(rèn)的串口屬性設(shè)置。波特率是9 600,數(shù)據(jù)位是8,停止位是1,無校驗位),打開串口。串口打開成功即進(jìn)入數(shù)據(jù)顯示界面,打開失敗則提示重新選擇正確串口。實時顯示數(shù)據(jù)的變化,開機按鈕起到上載數(shù)據(jù)的作用,關(guān)機按鈕則用于停止上位機與下位機的通信。上位機軟件設(shè)計流程如圖2所示。
圖2 上位機軟件流程
2.2.2 組態(tài)軟件設(shè)計
在Espider軟件中進(jìn)行組態(tài)界面設(shè)計。本系統(tǒng)通過串口對變量包括數(shù)據(jù)庫組態(tài)和IO設(shè)備組態(tài)進(jìn)行設(shè)置,選擇標(biāo)準(zhǔn)的Modbus RTU協(xié)議串行口,并對內(nèi)存區(qū)、偏置和數(shù)據(jù)格式進(jìn)行設(shè)置,用以在界面上顯示相應(yīng)的實時數(shù)據(jù)。
2.2.3 下位機控制系統(tǒng)
控制系統(tǒng)完成數(shù)據(jù)的采集及發(fā)送功能。系統(tǒng)上電后進(jìn)入初始化,一切準(zhǔn)備工作就緒后,等待上位機命令,一旦接收到發(fā)送來的數(shù)據(jù)即按命令進(jìn)行處理,隨后將所需數(shù)據(jù)發(fā)送到上位機實時顯示。控制系統(tǒng)部分流程如圖3所示。
3 MODBUS 通信協(xié)議
目前,Modbus通信協(xié)議是工業(yè)控制領(lǐng)域最為流行的協(xié)議,主要分為3種類型:Modbus RTU、Modbus ASCII和Modbus TCP/IP。通信協(xié)議棧結(jié)構(gòu)見圖4。Modbus協(xié)議采用主從工作方式,允許一臺主機和多臺從機進(jìn)行通信,從機地址由用戶設(shè)定。地址范圍為1-255,地址0用作廣播地址,所有主機把它當(dāng)作一條命令來執(zhí)行,從設(shè)備不作任何回應(yīng)[5]。本設(shè)計采用Modbus RTU協(xié)議,因為RTU模式規(guī)定了消息、數(shù)據(jù)的結(jié)構(gòu)、命令和應(yīng)答方式。在校驗上,RTU模式采用16位CRC校驗[6],CRC校驗保證了數(shù)據(jù)傳輸?shù)恼_性。在Modbus 協(xié)議中,一般CRC產(chǎn)生的校驗數(shù)據(jù)位于Modbus ADU的后兩個字節(jié),比如在本設(shè)計中,主站上位機需要向下位機寫入的數(shù)據(jù)是:0x00 0x00 0x00 0x04,按照圖5,先后加入從地址(系統(tǒng)默認(rèn)為1)、功能碼和校驗位形成Modbus ADU(0x01 0x03 0x00 0x00 0x00 0x04 0x44 0x09),再通過串口發(fā)送給下位機,下位機再對接收到的數(shù)據(jù)包進(jìn)行解析,從而得知要執(zhí)行的動作,并將上位機所需的數(shù)據(jù)(0x01 0x03 0x08 0x00 0x1a 0x00 0x1e 0x00 0x09 0x00 0x1a 0xd7 0xdd)以同樣的方式傳送給上位機。收到的數(shù)據(jù)同樣包括站號和功能碼,該處功能碼是3,最后兩字節(jié)是校驗位,0x08表示返回的數(shù)據(jù)字節(jié)數(shù)。數(shù)據(jù)位采用大端模式,0x00 0x1a 0x00 0x1e 0x00 0x09 0x00 0x1a分別表示十進(jìn)制數(shù)26,30,9,26。
圖3 控制系統(tǒng)流程
圖4 MODBUS通信協(xié)議棧
根據(jù)標(biāo)準(zhǔn)Modbus協(xié)議規(guī)范(Modbus 通用數(shù)據(jù)幀如圖5所示),通過串口通信的ADU(Application Data Unit)最大字節(jié)長度為256 bytes,所以在通信過程中PDU長度是:256-Server address(1 byte 從地址)-CRC(2 byte CRC校驗)=253 bytes。
Server address:從地址。用于標(biāo)識和上位機通信的下位機模塊,具有唯一性。
Function code:功能碼。它是Modbus協(xié)議最重要的標(biāo)志,位于所需數(shù)據(jù)之前,表示上位機給下位機下達(dá)的命令。下位機接收到數(shù)據(jù)包后解析出功能碼,按照功能碼執(zhí)行上位機分配的任務(wù),隨后返回上位機所需數(shù)據(jù)(同時返回相同的功能碼以便上位機識別)。本設(shè)計使用的Modbus協(xié)議功能碼見表1。
圖5 Modbus通用幀
校驗位:一般占用2個字節(jié),用于對丟失或者錯誤數(shù)據(jù)的檢測。
表1 功能碼
Function Code[]Description
0x01[]Read Coils
0x02[]Read Discrete Inputs
0x03[]Read Holding Registers
0x04[]Read Input Registers
0x05[]Write Single Coil
4 運行結(jié)果
4.1 上位機運行界面
通過本機設(shè)置選擇需要連接的串口,打開串口后點擊開機按鈕,通過RS232接口與下位機通信,將采集到的數(shù)據(jù)上傳到上位機并進(jìn)行實時顯示,運行界面如圖6所示。
圖6 數(shù)據(jù)采集界面
為了更加直觀形象地看到數(shù)據(jù)的動態(tài)顯示,通過組態(tài)軟件設(shè)計了組態(tài)畫面,用于對接收到的數(shù)據(jù)進(jìn)行模擬顯示,部分運行界面如圖7所示。
圖7 組態(tài)軟件數(shù)據(jù)采集界面
4.2 Modscan 測試驗證
為了測試接收的數(shù)據(jù)是否正確,選擇Modscan軟件進(jìn)行驗證,用以讀取寄存器中的數(shù)值。經(jīng)過對數(shù)據(jù)的分析和驗證表明該系統(tǒng)數(shù)據(jù)采集的正確性,如圖8所示。
(a)采集的數(shù)據(jù)(30001~30005寄存器)
(b)轉(zhuǎn)換后的工程值(40001~40005寄存器)
圖8 測試驗證
5 結(jié)語
本設(shè)計實現(xiàn)了對AT91SAM7X256單片機中存儲的4~20mA模擬量轉(zhuǎn)換為工程值后的數(shù)據(jù)采集,并使用組態(tài)軟件進(jìn)行仿真。對運行結(jié)果的分析表明,上位機操作便捷、運行良好。系統(tǒng)充分運用了Modbus RTU協(xié)議進(jìn)行數(shù)據(jù)傳輸,協(xié)議中的CRC校驗減少了數(shù)據(jù)出錯,這一點進(jìn)一步說明了Modbus協(xié)議在工業(yè)控制領(lǐng)域中的優(yōu)勢。
參考文獻(xiàn)參考文獻(xiàn):
[1] 高旭彬.基于MSP430單片機的Modbus協(xié)議軟件設(shè)計方法[J].工礦自動化,2013,39(4):8790.
[2] 中國國際標(biāo)準(zhǔn)化管理委員會.基于Modbus協(xié)議的工業(yè)自動化網(wǎng)絡(luò)規(guī)范GB/T19582-2008[J].儀器儀表標(biāo)準(zhǔn)化與計量,2008 (2):155159.
[3] 姜拓,張劍平.基于C#的數(shù)據(jù)采集系統(tǒng)上位機軟件設(shè)計與實現(xiàn)[J].電子測試,2009(9):5861.
[4] 高旭彬.基于Modbus協(xié)議的數(shù)據(jù)采集系統(tǒng)上位機仿真軟件設(shè)計[J].電氣開關(guān),2013,51(4):4447.
[5] 許龍虎,張浩,彭道剛,等.基于Modbus的嵌人式數(shù)據(jù)采集系統(tǒng)設(shè)計[J].華東電力,2009,37(2):311313.
[6] 劉紫燕,馮亮,詹志輝.Modbus協(xié)議RTU模式與TCP模式的通信轉(zhuǎn)換設(shè)計[J].科學(xué)技術(shù)與工程,2013,13(18):51915196.
責(zé)任編輯(責(zé)任編輯:杜能鋼)