摘 要: 介紹了一種總線集成器設計方案的設計原理及各個協議之間互相通訊的軟件實現方法。該方案能同時支持LonWorks、PPI、CANOpen和TCP/IP" title="TCP/IP">TCP/IP協議,采用系統分層結構和周期輪詢" title="輪詢">輪詢方式實現了各協議之間的通信,成功地解決了傳統總線集成設計存在的通信延時、節(jié)點通信困難等問題。
關鍵詞: 總線集成 LonWorks PPI CANOpen TCP/IP
由于工業(yè)現場總線在工業(yè)控制、智能儀器儀表、數據采集等方面得到了廣泛的應用,因此對于總線集成的需求也應運而生。不同種類的現場總線協議" title="總線協議">總線協議側重于各自的應用領域,導致基于各種現場總線的產品由于協議的不同而無法相互通信。而一些傳統的總線集成方法采用總線橋級連的方式來完成協議之間的通信,存在通信延時大、穩(wěn)定性差、節(jié)點通信困難等缺點。針對以上問題,本文提出一套總線集成器的設計方案。該系統同時支持LonWorks、PPI、CANOpen和TCP/IP協議, C8051F120作為主控制芯片,采用模塊化結構,提供實時監(jiān)測數據功能,具有成本低、實時性高、可移植能力強等特點,有較高的組態(tài)性和靈活性[1~2]。
1 系統總體設計與工作流程
1.1 系統的總體設計
系統結構框圖如圖1所示。C8051F120是整個系統的主控制芯片,負責對數據的處理和交換,包括通過RTL8019與以態(tài)網的通信,通過UART口與PPI總線通信,通過RS232口與LonWorks總線通信以及和CAN總線控制器SJA1000通信等。CAN模塊和LON模塊分別完成對CAN和LON數據的收發(fā)處理。一方面,系統分別作為LonWorks、PPI、CANOpen總線的一個節(jié)點,完成相應通信協議的通信及數據解析;另一方面,系統又要能夠完成各總線之間的數據轉發(fā)與共享。同時,為了支持遠程監(jiān)控能力,系統必須提供以太網接口以支持Internet功能。為了在現場提供監(jiān)測環(huán)境,系統設計了人機界面[3]。
1.2 各模塊工作流程
主控制芯片C8051F120與RTL8019之間的接口是通過并行方式擴展的,為避免RTL8019A在C8051F120上的映射地址空間與 C8051F120內部的8KB RAM地址空間 (0X0000~0X3FFF)重迭,擴展的外部設備被放到最高端(0X8000~0XFFFF),并采用非復用方式連接。模塊中還包括RS232與RS485之間的轉換。SN75LBC176是RS485差分總線收發(fā)器芯片。RS232數據由TX0通過光隔傳送到SN75LBC176的發(fā)送端 ,同時驅動發(fā)送控制端,數據就由SN75LBC176發(fā)送到RS485總線。當SN75LBC176接收數據時,數據傳送" title="數據傳送">數據傳送到RS232的RX0端。這樣就完成RS485到RS232的轉換。在系統中,為了提供人機交互的功能,設計了T6963C點陣式液晶圖形顯示控制器,在設計時,需要用一根地址線來實現液晶的數據通道和指令通道的區(qū)分。T6963C外接114×64的液晶顯示屏,可以提供監(jiān)測數據顯示的實例。
CAN總線模塊由SJA1000、82C250、6N137等芯片組成。SJA1000是并行接口的CAN控制器。82C250是CAN控制器接口芯片。當C8051F120要向某節(jié)點發(fā)送數據時,它向SJA1000的一些緩沖器寫數據和命令。數據通過SJA1000處理后,合成CAN幀格式,通過6N137至82C250,由82C250的差分端CANH和CANL傳送到物理總線。外部節(jié)點發(fā)送過來的數據通過82C250經光電隔離器6N137后被SJA1000接收,存放在SJA1000相應的寄存器中。C8051F120就可以讀取這些CAN幀格式數據。
LON模塊由MC143150、FTT-10A、MC145407以及外擴SRAM儲存器IS61C256AH-15N和外擴Flash存儲器AT29C512組成。MC143150是LonWorks控制芯片,含有Lontalk協議的固態(tài)軟件,主要用于LonWorks數據的處理。FTT-10A 是LonWorks收發(fā)器,它是一種變壓器耦合收發(fā)器,支持網絡的自由拓撲結構,作為LON網的網絡介質的接口。MC145407是電平轉換芯片,負責MC143150與RS232之間的電平轉換。當C8051F120要向MC143150發(fā)送數據時,C8051F120把數據發(fā)送到串口緩沖區(qū),通過MC145407將I/O引腳輸入的TTL 電平和輸出的CMOS 電平轉換為EIA232C電平。MC143150收到數據信息后,將數據讀入儲存于MC143150的緩沖區(qū)中,然后由MC143150 打包為LonWorks網絡變量,通過不同節(jié)點、相同類型的網絡變量的互聯, 即可實現LON 節(jié)點之間的數據傳送。另外,還外擴SRAM儲存器IS61C256AH-15N和Flash存儲器AT29C512,讓用戶能編制使用較大的程序。
2 軟件設計
2.1 系統的分層結構
整個系統采用分層方式完成各協議間的通信。系統分為硬件驅動層、協議層及其應用層,如圖2所示。
由于下層模塊只向上層提供一個軟件接口,屏蔽了下層的具體實現細節(jié)。上層軟件只有通過該接口才能與下層軟件發(fā)生聯系,這樣就保證了各層之間的獨立性。系統根據硬件接口、總線協議的不同,分為三個大的分層功能模塊,它們分別是LonWorks模塊、PPI模塊、 CANOPEN模塊。這些模塊又各自提供了硬件接收緩沖區(qū)、硬件發(fā)送緩沖區(qū)、協議接收緩沖區(qū)、協議發(fā)送緩沖區(qū)[4~5]。
2.2 軟件實現的框架
系統的軟件分為系統初始化模塊、系統配置模塊、協議通信總調度模塊、三個協議實現模塊及硬件驅動模塊" title="驅動模塊">驅動模塊。它們分別對應系統軟件的不同分層。其中,系統配置模塊、協議間通信總調度模塊為應用層程序。協議實現模塊(LonWorks協議模塊、PPI協議模塊、CANOpen協議模塊)為協議層程序。硬件驅動模塊為硬件驅動層程序。其流程圖如圖3所示。
系統配置模塊主要完成系統的配置。它包括總線各端口是配置為主模式還是從模式、各通信協議的波特率等。系統可以通過兩種方式配置:一種為硬件方式配置,另一種是通過互連網進行軟件配置。協議間通信總調度模塊主要是驅動不同協議之間進行相互通信。各總線協議的格式解析分別由相應的協議模塊完成。硬件驅動模塊主要完成把各硬件緩沖區(qū)中的數據發(fā)送到總線,同時把從總線接收來的數據存放到協議緩沖區(qū)中。
2.3 緩沖區(qū)結構
本系統的緩沖區(qū)采用改進的循環(huán)隊列結構,采用了三個指針Bp.In、Bp.Out、Bp.Try。其中,Bp.In是隊頭指針。當隊列接收一數據時,如果隊列緩沖區(qū)尚有空間,則數據入隊,同時Bp.In加1。Bp.Out是隊尾指針。當數據要出隊時, 如果隊列緩沖區(qū)非空,則Bp.Out加1。隊列緩沖區(qū)空或滿的判定方法可以用下面的偽C語言描述:
if(Bp.In++== Bp.Out)
{隊列緩沖區(qū)已滿};//如隊頭加1等于隊尾指針,則表示該隊列已滿
if(Bp.Out== Bp.In)
{隊列緩沖區(qū)已空};//如果隊尾指針趕上隊頭則表示該隊列已空
Bp.Try是為通信時重發(fā)而準備的。當要發(fā)送數據時,Bp.Try向前移動(Bp.Try++),但Bp.Out不動(數據不出隊)。當Bp.Try=Bp.In時,表示隊列緩沖區(qū)已沒有數據要發(fā)送。如果要求數據重發(fā),僅僅把Bp.Try重新指回Bp.Out(Bp.Try=Bp.Out)再次發(fā)送。只有當發(fā)送成功時,才允許數據出隊(Bp.Out= Bp.Try)。由于一次發(fā)送數據的多少由Bp.Try決定(一次不一定把隊列緩沖區(qū)數據都發(fā)送完),這樣給數據的發(fā)送提供了極大的方便。
2.4 硬件緩沖區(qū)
系統要發(fā)送數據時把發(fā)送協議緩沖區(qū)的數據拷貝到發(fā)送硬件緩沖區(qū),并驅動一次發(fā)送后退出。硬件發(fā)送緩沖區(qū)中的數據是由發(fā)送中斷自動完成的。硬件發(fā)送中斷驅動完一次數據發(fā)送就退出。當硬件發(fā)送完數據后就會產生中斷標志并重新進入中斷,重復上面的過程直到數據發(fā)送完。同樣,發(fā)送中斷只負責發(fā)送完硬件發(fā)送緩沖區(qū)中的數據而不關心這些數據代表的意義。中斷程序流程圖如圖4所示。
2.5 各總線協議間的通信方法
各總線協議間通信是采用周期輪詢方式下的實地址共享。其基本思想就是系統定時地由配置為主模式的端口向其對應總線的每個從機發(fā)送請求讀數命令包。從機接收到命令后就把它的數據傳送給主機(總線集成器)。主機把接收到的數據存放在對應的協議地址中。當配置為從機的端口所對應的總線上的主機向總線集成器請求數據時,總線集成器只是簡單地把前一個周期輪詢的數據應答過去。由于輪詢總線的周期比較短,因此應答的數據稍微滯后。但對總線采集的數據的真實性影響不大。
下面以圖5中 CANOpen總線的節(jié)點B向LonWorks節(jié)點A請求數據為例來說明這種方式的通信過程。首先,系統周期性地改變從機號、通信命令、通信狀態(tài),向LonWorks所有的從機請求數據,從機應答的數據存放在其協議地址中。然后CANOpen主節(jié)點B向總線集成器請求LonWorks總線A節(jié)點中的數據。最后,總線集成器收到該命令,把剛采集到的協議地址上的值傳送給節(jié)點B。這一次通信至此結束。
該多協議總線集成器目前提供了對LonWorks、PPI、CANOpen的支持,并且還對上面三種協議提供了利用TCP/IP遠程監(jiān)控和配置的接口,人機界面使系統有較好的監(jiān)測能力。由于該集成器采用了較高性能的處理器,使各個協議之間通訊實時性得到保證。為了有利于系統以后的擴展,整個總線集成器系統嚴格按照模塊化來進行硬件設計和軟件編程,使系統軟件的移植性大大提高。
參考文獻
1 孫 榮, 徐江華, 邵惠鶴.基于嵌入式模塊工業(yè)以太網的實現[M].計算機工程,2003;(2)
2苑明哲,柳長春,周 悅等.多總線集成方法研究[M].工業(yè)儀表與自動化裝置,2002;(1)
3鄒益仁,馬增良,蒲 維.現場總線控制系統的設計和開發(fā)[M].北京:國防工業(yè)出版社,2003
4 顧洪軍. 工業(yè)企業(yè)網與現場總線技術及應用[M]. 北京:人民郵電出版社,2002
5 Richard P.,Ken Y.,Richard M. The current fieldbus standards situation-a European view[J].Assembly Automation,1999;19(4)





