劉俊宇,趙立宏
(南華大學(xué) 機械工程學(xué)院,湖南 衡陽 421001)
目前,卷煙廠所使用的卷煙機大多采用管道煙絲送料[1],卷煙機工作過程中,煙絲料全部由氣力輸送。當(dāng)卷煙機以每分鐘生產(chǎn)7 000 支或更高的生產(chǎn)速度工況下,送絲管內(nèi)風(fēng)速小于16 m/s,煙絲供應(yīng)不足;而當(dāng)管道內(nèi)風(fēng)速高于25 m/s 時又會造成煙絲質(zhì)量下降[2]。依據(jù)卷煙廠生產(chǎn)經(jīng)驗,當(dāng)煙絲速度控制在9-11 m/s 時,既能保證卷煙機中煙絲給入量充足、不影響正常生產(chǎn),又能使管道內(nèi)大部分煙絲處于懸浮狀態(tài),最大程度減小了燥碎,提高了卷煙質(zhì)量。由于管道中煙絲速率較快,實現(xiàn)煙絲速度的實時監(jiān)測需要處理大量數(shù)據(jù),同時也對系統(tǒng)數(shù)據(jù)傳輸速率提出一定要求。因此該設(shè)計采用更大并行度的現(xiàn)場可編程邏輯門陣列(FPGA)作為控制核心,使用Modbus 協(xié)議為數(shù)據(jù)鏈路傳遞有效數(shù)據(jù),使其高效快速的將煙絲測速儀處理完的數(shù)據(jù)傳送到上位機和其它子模塊。
Modbus 是1979 年由Modicon 公司發(fā)表的一種串行通信協(xié)議,由于其簡單、開放的特點已成為工業(yè)通信領(lǐng)域的行業(yè)標(biāo)準(zhǔn),在電子通信領(lǐng)域得到廣泛的應(yīng)用。Modbus 有RTU(Remote Terminal Unit)和ASCII 兩種模式,都是以幀報文的形式傳輸數(shù)據(jù)。但在同等情況下,RTU 模式比ASCII 模式的數(shù)據(jù)密度更大,更適合多字節(jié)數(shù)據(jù)的傳輸。RTU 模式下,一幀報文包括:地址碼、功能碼、數(shù)據(jù)和校驗碼,見表1。由于每個數(shù)據(jù)都是16 進制,因此在理論上,每個Modbus 網(wǎng)絡(luò)可以掛載255 個從機。不同的碼有著不同功能,如功能碼06 為預(yù)置單寄存器,功能碼16為預(yù)置多寄存器等。功能不同數(shù)據(jù)長度和結(jié)構(gòu)也有所不同,因此每幀報文發(fā)送完成后,間隔3.5 個字符時長,標(biāo)志著一幀報文的結(jié)束[3]。
表1 Modbus 報文格式圖Tab.1 Modbus message format diagram
本次實驗采用Altera 公司的MAX 10 FPGA,該芯片在眾多FPGA 中屬于低成本的一款,性價比較高,內(nèi)部嵌入豐富的存儲資源和乘法器資源,加上FPGA 本身并行度較高,足夠?qū)Ω咚龠\動的煙絲進行采樣計算。并且該FPGA 內(nèi)部集成度比較高,集成了鎖相環(huán)(PLL)、RAM、PLD 邏輯等。特別是雙數(shù)模轉(zhuǎn)換(ADC)通道,能直接滿足數(shù)據(jù)采集要求,減少了硬件設(shè)計要求,簡化了設(shè)計流程,節(jié)約了時間成本。
數(shù)據(jù)采集傳輸硬件系統(tǒng),由信號調(diào)理電路、FPGA、數(shù)模(DA)轉(zhuǎn)換模塊和顯示模塊組成。FPGA是整個電路的控制中心,負(fù)責(zé)連接控制各個硬件部分,并用算法實現(xiàn)對煙絲速度的求取。傳感器電信號經(jīng)信號調(diào)理電路處理后,由FPGA 集成的ADC 模塊讀取。數(shù)據(jù)傳輸硬件基于RS485 連接的通信鏈路,通過FPGA 分別將計算得到的煙絲速度和質(zhì)量系數(shù)通過Modbus 協(xié)議傳送到鏈路上的其它模塊。如顯示模塊,實現(xiàn)數(shù)據(jù)傳輸?shù)狡渌刂颇K以及上位機的可視化。DA 模塊除了將接收到的數(shù)據(jù)轉(zhuǎn)換成模擬量外,還完成開關(guān)量的輸入讀取功能。根據(jù)開關(guān)量的通斷,提供DA 模塊是否正常運行的標(biāo)志。數(shù)據(jù)采集傳輸系統(tǒng)的架構(gòu)如圖1 所示。
圖1 數(shù)據(jù)采集傳輸系統(tǒng)硬件框圖Fig.1 Hardware block diagram of data acquisition and transmission system
FPGA 遵從自上而下的設(shè)計原則,頂層模塊只進行各個子模塊的例化和連接[4]。為節(jié)省資源和提升系統(tǒng)整體速度,采取完成一個數(shù)據(jù)的計算則發(fā)送一個數(shù)據(jù)的方式。Modbus 通信模塊連接如圖2所示。
圖2 Modbus 通信部分功能模塊圖Fig.2 Modbus communication function module diagram
該模塊主要功能是根據(jù)項目要求控制發(fā)送和接收??刂撇糠钟梢粋€狀態(tài)機組成,狀態(tài)機控制FPGA 從內(nèi)部數(shù)據(jù)寄存器內(nèi)讀取數(shù)據(jù),把數(shù)據(jù)按格式轉(zhuǎn)換成Modbus 協(xié)議所規(guī)定的報文形式,并存儲到該模塊的數(shù)據(jù)寄存器中。之后將報文發(fā)送到CRC 校驗?zāi)K。驗證正確后,給發(fā)送模塊發(fā)送報文,并且根據(jù)發(fā)送、接收等模塊返回的標(biāo)志位進行狀態(tài)判斷,控制不同的狀態(tài)轉(zhuǎn)換,達到能夠按要求控制485 總線上數(shù)據(jù)發(fā)送和接收的目的。
發(fā)送模塊基于普通串口通信原理,將Modbus報文分成若干個字節(jié),每次需要發(fā)送10 位數(shù)據(jù),其中包括8 位有效數(shù)據(jù)、1 位起始位和1 位停止位[5]。主機上485 芯片DE 端電平上升沿,作為每個字符發(fā)送起始標(biāo)志(DE 端電位由FPGA 控制),采用定時計數(shù)器,當(dāng)數(shù)據(jù)發(fā)送到停止位正中時,計時器停止計時,并將該計時器停止標(biāo)志位作為一個字節(jié)數(shù)據(jù)發(fā)送完成標(biāo)志。一幀報文發(fā)送完成后,發(fā)送模塊會產(chǎn)生一個標(biāo)志位,并將該標(biāo)志位傳遞給發(fā)送/接收控制模塊。每幀報文起始位標(biāo)志的實現(xiàn)采用定時器判斷,保證每幀報文之間間隔不小于3.5 個字符時長。
接收模式中,485 芯片的DE 端必須拉低控制,為保證主機能夠接收到各從機返回數(shù)據(jù),除發(fā)送模式外,其它時間將DE 端拉低,等待接收數(shù)據(jù)。檢測到串口有數(shù)據(jù)輸入時,接收模塊接收一個字節(jié)有效數(shù)據(jù),并存入寄存器的高8 位,第二個字節(jié)存入寄存器的9-16 位,以此類推,直到一幀報文接收完畢。Modbus 每一幀報文都有固定的格式,如果格式位數(shù)與接收數(shù)據(jù)寄存器位數(shù)不匹配,或CRC 檢驗?zāi)K發(fā)現(xiàn)數(shù)據(jù)不正確,則接收數(shù)據(jù)失敗,將丟棄該幀接收的報文。
Modbus 通信協(xié)議報文最后兩個字符都由CRC校驗碼組成。CRC 校驗步驟如下:
(1)定義一個16 位的CRC 寄存器,用于寄存CRC 校驗碼,初始值為0XFFFF[6]。
(2)將報文第一個字節(jié)的數(shù)值與CRC 寄存器中數(shù)據(jù)進行異或,并將結(jié)果替換原CRC 寄存器中數(shù)據(jù)。
(3)將CRC 寄存器中數(shù)據(jù)右移一位,高位補“0”,同時檢測移出位,如果為“0”,則重復(fù)該步驟,如果移出位為“1”,將CRC 寄存器數(shù)據(jù)與0XA001異或并將結(jié)果保存至CRC 寄存器中。重復(fù)移動8次,便處理完一個字節(jié)數(shù)據(jù)。
(4)按順序由高到低將報文中每一字節(jié)重復(fù)執(zhí)行步驟(2)、(3),直到報文數(shù)據(jù)全都處理完畢,最終CRC 寄存器中的值即為CRC 校驗碼。
(1)提供4 路測速數(shù)據(jù)模擬量輸出。其分別為煙絲速度、質(zhì)量系數(shù)的電壓和電流模擬量。電流型模擬量數(shù)據(jù)輸出范圍4-20 mA,電壓型模擬量輸出直流0-10 V。測速過程中需保證模擬量輸出的連續(xù)性,且每兩個數(shù)據(jù)間隔不超過40 ms/次。
(2)根據(jù)輸入信號(讀開關(guān)量)清零數(shù)據(jù)和保持?jǐn)?shù)據(jù)。提供24 V DC 開關(guān)量測速裝置的狀態(tài),指示模擬電壓、電流輸出是否正確。
(3)提供一個實時測速顯示,至少達小數(shù)點后兩位。測速數(shù)據(jù)要求每秒鐘顯示10 個數(shù)據(jù)以上。
該系統(tǒng)采用Mentor 公司的Modelsim 仿真軟件與FPGA 內(nèi)部的嵌入式邏輯分析儀(Signaltap)結(jié)合調(diào)試。由于煙絲速度值和質(zhì)量系數(shù)的模擬電壓、電流輸出是連續(xù)的,因此FPGA 主機必須連續(xù)不斷的向DA 模塊發(fā)送更新的報文,并且每幀報文間隔小于40 ms。
在原有通信的前提下,調(diào)試的重點是提高數(shù)據(jù)更新速率。調(diào)試主要采用以下3 種方式:
(1)提高波特率。提高波特率則能加快數(shù)據(jù)傳輸速率。1 個字節(jié)數(shù)據(jù)需要傳輸10 位數(shù)據(jù),當(dāng)波特率為9 600 bps 情況下,傳輸時間為:10×1/9 600,約1 ms。發(fā)送一幀8 字節(jié)的報文所需要的時間大約8.3 ms,將波特率提高到38 400 bps 后,發(fā)送8 字節(jié)報文所需時間小于2.1 ms。當(dāng)然,波特率并非越高越好,波特率越大傳輸數(shù)據(jù)準(zhǔn)確性越難以保證,最終通過調(diào)試采用波特率為38 400 bps。
(2)合并報文發(fā)送。速度、質(zhì)量系數(shù)總共4 路模擬量輸出,一次寫一個寄存器,需要發(fā)送4 幀報文,每幀報文8 字節(jié),總共需要發(fā)送32 個字節(jié)。如果采用Modbus 功能碼10,一次直接向DA 模塊連續(xù)寫入四個寄存器的值,僅需17 個字節(jié),除去每幀報文之間的3.5 個字符的起始標(biāo)志時間,合并發(fā)送報文時間可縮減一半。
(3)充分利用總線空閑。在保證模擬量連續(xù)發(fā)送情況下,可在向DA 模塊發(fā)送報文后,總線空閑的時間內(nèi)完成發(fā)送顯示報文、讀開關(guān)量輸入等操作??砂匆笤趦蓭瑢慏A 模塊內(nèi)寄存器的報文之間,插入一幀送顯示報文或者讀取開關(guān)量輸入。需要注意,在中間插入新的報文時要確保發(fā)送報文時間小于空閑時間,否則會影響模擬量輸出的連續(xù)性。Modelsim 部分波形仿真圖如圖3 所示。
圖3 Modelsim 仿真圖Fig.3 Modelsim simulation diagram
由于管道中煙絲運動速率是無規(guī)律的,測試中采用FPGA 計數(shù)器產(chǎn)生一組有規(guī)律的模擬數(shù)據(jù),將模擬數(shù)據(jù)寫入FPGA 的數(shù)據(jù)寄存器中,觀察儀器運行狀況。通過485 轉(zhuǎn)USB 模塊,將485 總線上數(shù)據(jù)讀入PC 端,將接收到數(shù)據(jù)與發(fā)送數(shù)據(jù)進行比對,通過比對發(fā)現(xiàn)總線上與發(fā)送數(shù)據(jù)完全一致。串口調(diào)試工具讀取數(shù)據(jù)如圖4 所示。
圖4 串口調(diào)試模塊讀取數(shù)據(jù)圖Fig.4 The serial debugging module read data graph
測試過程中發(fā)現(xiàn),通過USB 將總線上數(shù)據(jù)讀出并未出現(xiàn)異常,用示波器觀察DA 模塊輸出模擬量數(shù)據(jù)也正常,但是現(xiàn)實模塊顯示數(shù)據(jù)有時出現(xiàn)異常。最終通過示波器觀察485 總線上A、B 的波形發(fā)現(xiàn),DA 模塊和顯示模塊在接收到一幀Modbus 的報文后,返回一幀報文,DA 模塊返回報文狀態(tài)如圖5 中“1”處所示。由于返回的一幀報文與發(fā)送報文在同一時刻占用485 總線,造成與顯示模塊通訊的偶然混亂,導(dǎo)致顯示異常。而USB 模塊掛載到485 總線上屬于從機,只會接收主機發(fā)送的數(shù)據(jù),沒有檢測到其它模塊返回數(shù)據(jù)。
最終通過合理延時,在DA 輸出合理空隙范圍內(nèi),將DA 模塊返回幀算入占用總線時長,錯開返回幀與發(fā)送報文幀的時間,調(diào)整顯示數(shù)據(jù)報文發(fā)送時間,拉低顯示模塊485 發(fā)送數(shù)據(jù)使能端,讓顯示模塊僅處于接收狀態(tài)等方式,解決了顯示紊亂的問題。
圖5 485 總線A、B 線波形圖Fig.5 A and B line waveform of 485 bus
該設(shè)計基于MAX 10 FPGA,通過Modbus 協(xié)議搭載RS485 芯片,采用主從通信的方式,將煙絲測速儀中煙絲的數(shù)據(jù)轉(zhuǎn)換成模擬量,同時在顯示模塊上顯示數(shù)字量。最終測試得出模擬量每35 ms 更新一次,顯示模塊顯示數(shù)據(jù)每秒鐘更新10 次,能夠準(zhǔn)確讀取提供的開關(guān)量,并做出相應(yīng)處理。目前該煙絲測速儀的樣機已經(jīng)設(shè)計完成,在風(fēng)力送絲機管道上,能夠在誤差允許范圍內(nèi),測量出管道中高速運動的煙絲,并將各接口數(shù)據(jù)傳遞到相應(yīng)的上位機控制系統(tǒng)中。