王德志
(包頭職業(yè)技術學院 電氣工程系,包頭 014030)
Modbus的分布式應用及標準協(xié)議使得控制器之間、控制器與網(wǎng)絡和其它設備之間通訊成為可能。因此,不同廠家的控制或測量設備可以連成工業(yè)網(wǎng)絡,進行集中監(jiān)控或數(shù)據(jù)反饋。為了使終端設備具有更好的系統(tǒng)兼容性和市場競爭力,監(jiān)測設備應具有多種方便通訊的外部接口。模擬量信號如0~10 V,4~20 mA,數(shù)字量信號如脈沖頻率信號輸出接口應用廣泛,而Modbus通訊協(xié)議及RS485接口作為分布式控制系統(tǒng)的通用標準,可以進一步滿足現(xiàn)代設備的智能化聯(lián)網(wǎng)要求。
本文提出了一種脈沖頻率信號精確轉換為Modbus協(xié)議幀數(shù)據(jù)的方案,以具備脈沖輸出功能的磁漩渦流量計為實驗載體,利用C8051F310中的PCA捕捉/比較模塊的邊沿觸發(fā)捕捉功能,計算出單位時間內(nèi)脈沖的個數(shù)和對應的脈沖頻率,以RS485為電氣接口,Modbus ASCII碼為傳輸方式構成工業(yè)網(wǎng)絡中的1個節(jié)點完成即時通訊。該方案增強了終端監(jiān)測設備的通用性和友好度,提高了系統(tǒng)整體的智能化監(jiān)測和控制水平。
C8051F31x系列器件使用Silicon Labs的專利CIP-51微控制器內(nèi)核。CIP-51與MCS-51TM指令集完全兼容,可以使用標準803x/805x的匯編器和編譯器進行軟件開發(fā)。CIP-51內(nèi)核具有標準8052的所有外設部件,包括4個通用的16位計數(shù)器/定時器、1個具有增強波特率配置的全雙工UART、1個增強型SPI端口、1280 B內(nèi)部RAM、128 B特殊功能寄存器(SFR)地址空間及29/25個I/O端口等,特殊功能可編程計數(shù)器/定時器陣列(PCA)具有5個捕捉/比較模塊和看門狗定時器功能。
可編程計數(shù)器陣列(PCA)提供增強的定時器功能,與標準8051的計數(shù)器/定時器相比,它需要較少的CPU干預。PCA由1個專用的16位計數(shù)器/定時器和5個16位捕捉/比較模塊組成,捕捉/比較模塊有單獨的I/O線(CEXn),這些I/O線在被使能時通過交叉開關連接到端口I/O。因此,較傳統(tǒng)的通過檢測I/0口高低電平的方式對外部輸入脈沖計數(shù),PCA計數(shù)器/定時器通過對輸入信號捕捉并進入中斷的方式檢測脈沖信號,可以獲得更高精度的檢測值。
捕捉/比較模塊0的I/O線CEX0通過交叉開關連接到端口I/O。因此,程序中設置端口I/O交叉開關寄存器 1:XBR1 的位 6:XBARE=1,交叉開關使能;位 2-0:PCA0ME=1,CEX0連接到端口引腳。為使CEX0連接到端口P1.0,須令端口0跳過寄存器P0SKIP=0xCF。由于P0.4,P0.5連接UART0的TX0和RX0,為防止URAT0功能關閉,P0.4,P0.5不能被交叉開關跳過。利用Config2軟件對C8051F310的port I/O口進行配置。
16位的PCA計數(shù)器/定時器由2個8位的SFR組成:PCA0L和PCA0H。讀PCA0L時,“瞬象寄存器”自動鎖存PCA0H的值。由于讀PCA0H或PCA0L不影響計數(shù)器工作,保證讀操作不會造成對脈沖計數(shù)的延時,進一步保證檢測精度。置ECCF0位=1將允許模塊的CCF0中斷。本方案應用捕捉/比較模塊0的正邊沿觸發(fā)捕捉模式。
PCA的捕捉方式原理如圖1所示,PCA0捕捉/比較寄存器 PCA0CPM0的位 5:CAPP0=1,使能PCA0的正邊沿捕捉功能;位0:ECCF0=1,允許CCF0的捕捉/比較標志中斷請求。因此,程序中設置PCA0CPM0=0x21。當CEX0引腳上出現(xiàn)正邊沿跳變(從低電平到高電平跳變)時,PCA捕捉PCA0L和PCA0H的值并將其裝入到對應模塊的16位捕捉/比較寄存器(PCA0CPL0和PCA0CPH0)。捕捉發(fā)生時,CCF0被置為邏輯‘1’并產(chǎn)生1個中斷請求,并在中斷服務程序中對CCF0位清0。幀的數(shù)據(jù)位中,完成數(shù)據(jù)的傳輸。
圖1 PCA捕捉方式原理框圖Fig.1 Principle diagram for the captureway in PCA
Modbus遵從主從控制策略,只有1個主機,可支持多達247個遠程從屬控制器或節(jié)點。此協(xié)議要求從機具備單獨的設備地址,可由主機巡測并實時回應。Modbus協(xié)議幀數(shù)據(jù)包由地址碼、功能碼、數(shù)據(jù)位、校驗位等組成。
ASCII碼傳輸模式中每個ASCII碼字符都由1個16進制字符組成。每個字節(jié)包括1個起始位,7個數(shù)據(jù)位,1個奇偶校驗位(無校驗則無),1個停止位和錯誤檢測域。數(shù)據(jù)校驗方式一般為CRC或LRC。
Modbus支持多種電氣接口,如RS232、RS485等,其中RS485作為工業(yè)總線應用更為廣泛。RS485二線制(AB)接法可實現(xiàn)多點雙向主從通信,總線可連接多達32個有效負載,特性阻抗為120 Ω,信號最大傳輸距離為1219 m,最大傳輸速率為10 Mb/s?;赗S485總線通信的穩(wěn)定性和現(xiàn)場布網(wǎng)方便等優(yōu)點,被廣泛應用于分布組網(wǎng)系統(tǒng)中。
在C8051F310中開啟PCA捕捉/比較模塊0的邊沿觸發(fā)捕捉功能,在E2PROM中更新CEX0端檢測到的單位時間內(nèi)脈沖個數(shù)值,結合頻率脈沖轉換算法,將計算得出的流量值信息打包儲存在Modbus
信號捕捉電路采用光耦隔離的方式對輸入信號進行處理。采用光耦傳輸?shù)膬?yōu)點是信號單向傳輸,輸入端與輸出端完全實現(xiàn)電氣隔離,輸出信號對輸入端無影響,抗干擾能力強,無觸點,傳輸效率高。此處應用的TLP521光耦合器的主要作用是實現(xiàn)信號隔離和電平轉換。PCA捕捉外部信號的電路圖如圖2所示,PULSE為外部信號輸入接口,端口P1.0連接捕捉/比較模塊0的CEX0。
圖2 PCA捕捉外部信號的電路圖Fig.2 PCA capture external signal circuit diagram
圖3 典型的UART0 RS232轉RS485通訊電路Fig.3 Typical communication circuit of UART0 RS232 turn to RS485
如圖 3所示,C8051F310的 UART0串口的RXD,TXD通過光電隔離芯片HCPL0600連接半雙工SN65HVD3082E芯片的RO,DI引腳,控制信號RS485_0同樣經(jīng)光電隔離電路連接485芯片的DE和RE引腳。DE=RE=1時,485芯片的發(fā)送器有效,接收器禁止;DE=RE=0時,485芯片的接收器有效,發(fā)送器禁止。
連接至A引腳的上拉電阻R22、連接至B引腳的下拉電阻R20用于保證無連接的485芯片處于空閑狀態(tài),提供網(wǎng)絡失效保護,以提高RS485節(jié)點與網(wǎng)絡的可靠性。使用DC-DC隔離器件如MORNSUN公司的WRF0505S-1WR2可以產(chǎn)生1組與微處理器電路完全隔離的電源輸出,用于向RS485收發(fā)器電路提供+5 V電源。該隔離RS485接口電路實現(xiàn)了信號和電源的雙隔離,可廣泛應用于煤礦井下防爆或本質(zhì)安全型產(chǎn)品中。
C8051F310的UART0接口電路通過設置端口I/O交叉開關寄存器0:XBR0=0x01;使UART TX0、RX0連接到端口引腳的P0.4和P0.5。設置端口0輸出方式寄存器P0MDOUT=0x12;使TX0和P0.1端口為推挽方式輸出。
通信基板電路的軟件設計主要包括硬件初始化程序、脈沖頻率信號與Modbus協(xié)議幀數(shù)據(jù)轉換程序、脈沖頻率捕捉算法設計和RS485收發(fā)子程序等。
主程序流程圖如圖4所示,主要包括系統(tǒng)初始化函數(shù)、I/O端口初始化函數(shù)、UART0初始化函數(shù),以及PCA0脈沖檢測函數(shù)等。完成系統(tǒng)初始化掃描后,系統(tǒng)等待PCA0中斷觸發(fā)。當檢測到外部脈沖信號時,即跳入PCA0脈沖檢測與Modbus轉換子程序。
圖4 主程序流程圖Fig.4 Flow chart of the main program
PCA0初始化函數(shù)允許PCA0 CEX0口每次捕捉到正邊沿跳變時進入捕捉中斷 (中斷標志位CCF0),在中斷函數(shù)中,當捕獲到程序設定的固定脈沖個數(shù)goal時,記錄此時PCA0CPL0和PCA0CPH0的值。PCA0定時器時鐘f為系統(tǒng)時鐘12分頻:f=SYSCLK/12=3.0625 MHz/12,捕捉到第goal個正邊沿脈沖時tf的值:tf=SH×256+SL,則goal個正邊沿脈沖的總周期:T=tf/f,單個方波脈沖的周期:t=T/goal,方波脈沖的頻率F=1/t;程序表達如下:
PCA0脈沖檢測與Modbus轉換流程圖如圖5所示。
圖5 PCA0脈沖檢測與Modbus轉換流程圖Fig.5 Flow chart of PCA0 pulse detection and the Modbus conversion
Modbus協(xié)議幀數(shù)據(jù)以ASCII碼形式傳輸,應答機制為主機發(fā)送后目標接收器應答。主機發(fā)送碼格式一般為:[從機地址][功能碼][n位數(shù)據(jù)][CRC校驗]。該方案中,設置的主機發(fā)送碼格式為***ZSQ01回車。若從機地址對應,則從機01響應主機巡測,應答碼為***SQ”流量值”回車。從機UART0中斷函數(shù)中響應主機發(fā)送碼程序為
485接收利用UART0中斷,在中斷程序內(nèi)讀取緩存區(qū)SBUF0中的值。RS485收發(fā)子程序流程圖如圖6所示。
圖6 RS485收發(fā)子程序流程圖Fig.6 Flow chart of the RS485 transceiver subroutine
現(xiàn)場安裝的被測流量計的管徑為DN25,儀表系數(shù)為160。實驗過程中記錄的3組數(shù)據(jù)如表1、表2和表3所示。
表1 流量計實驗數(shù)據(jù)組1Tab.1 Experimental data of flow meter as group 1
表2 流量計實驗數(shù)據(jù)組2Tab.2 Experimental data of flow meter as group 2
表3 流量計實驗數(shù)據(jù)組3Tab.3 Experimental data of flow meter as group 3
由以上3組數(shù)據(jù)可以看出,Modbus通信基板檢測到的流量計脈沖頻率與流量計實際輸出的脈沖頻率間的誤差在實際應用要求的范圍之內(nèi)。
基于C8051F310中PCA0計數(shù)器/定時器功能的Modbus協(xié)議幀數(shù)據(jù)轉換已經(jīng)成功應用在磁漩渦流量計通信基板電路中。通過硬件設計和軟件編程,實現(xiàn)了脈沖頻率信號向RS485信號精確的數(shù)據(jù)傳輸,并完成與主機系統(tǒng)聯(lián)網(wǎng)穩(wěn)定通訊。該方案在一定程度上提高了終端設備的智能化水平和組網(wǎng)能力。
[1]新華龍公司.C8051F310/1/2/3/4/5/8/16 KB ISP FLASH微控制器數(shù)據(jù)手冊[M].2004:167-177.
[2]江賢志,劉華章,張教育,等.基于C8051F020單片機的RS485串行通信設計[J].電子測量技術,2014,3(1):24-28.
[3]王永力,任開春,何春晗.基于C8051F060單片機的CAN/RS485轉換器的設計與實現(xiàn)[J].工業(yè)控制計算機,2009,9(1):47-49.
[4] 劉曉峰,耿蒲龍.基于C8051F040單片機的CAN/RS-485轉換模塊設計[J].科學之友,2012,5(2):29-33.
[5]沈金鑫,夏靜.基于C8051F350的多路高精度數(shù)據(jù)采集系統(tǒng)及應用[J].電子設計工程,2014,5(1):26-28.
[6]寧占彬,曾新順.基于STM32F050的RS485數(shù)據(jù)轉發(fā)器設計[J].電腦編程技巧與維護,2013,14(4):35-37.