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