由于工業(yè)現(xiàn)場總線在工業(yè)控制、智能儀器儀表、數(shù)據(jù)采集等方面得到了廣泛的應(yīng)用,因此對于總線集成的需求也應(yīng)運(yùn)而生。不同種類的現(xiàn)場總線協(xié)議側(cè)重于各自的應(yīng)用領(lǐng)域,導(dǎo)致基于各種現(xiàn)場總線的產(chǎn)品由于協(xié)議的不同而無法相互通信。而一些傳統(tǒng)的總線集成方法采用總線橋級連的方式來完成協(xié)議之間的通信,存在通信延時(shí)大、穩(wěn)定性差、節(jié)點(diǎn)通信困難等缺點(diǎn)。針對以上問題,本文提出一套總線集成器的設(shè)計(jì)方案。該系統(tǒng)同時(shí)支持LonWorks、PPI、CANOpen和TCP/IP協(xié)議,C8051F120作為主控制芯片,采用模塊化結(jié)構(gòu),提供實(shí)時(shí)監(jiān)測數(shù)據(jù)功能,具有成本低、實(shí)時(shí)性高、可移植能力強(qiáng)等特點(diǎn),有較高的組態(tài)性和靈活性。
1、 系統(tǒng)總體設(shè)計(jì)與工作流程
1.1 系統(tǒng)的總體設(shè)計(jì)
系統(tǒng)結(jié)構(gòu)框圖如圖1所示。C8051F120是整個(gè)系統(tǒng)的主控制芯片,負(fù)責(zé)對數(shù)據(jù)的處理和交換,包括通過RTL8019與以態(tài)網(wǎng)的通信,通過UART口與PPI總線通信,通過RS232口與LonWorks總線通信以及和CAN總線控制器SJA1000通信等。CAN模塊和LON模塊分別完成對CAN和LON數(shù)據(jù)的收發(fā)處理。一方面,系統(tǒng)分別作為LonWorks、PPI、CANOpen總線的一個(gè)節(jié)點(diǎn),完成相應(yīng)通信協(xié)議的通信及數(shù)據(jù)解析;另一方面,系統(tǒng)又要能夠完成各總線之間的數(shù)據(jù)轉(zhuǎn)發(fā)與共享。同時(shí),為了支持遠(yuǎn)程監(jiān)控能力,系統(tǒng)必須提供以太網(wǎng)接口以支持Internet功能。為了在現(xiàn)場提供監(jiān)測環(huán)境,系統(tǒng)設(shè)計(jì)了人機(jī)界面。
1.2 各模塊工作流程
主控制芯片C8051F120與RTL8019之間的接口是通過并行方式擴(kuò)展的,為避免RTL8019A在C8051F120上的映射地址空間與C8051F120內(nèi)部的8KB RAM地址空間(0X0000~0X3FFF)重迭,擴(kuò)展的外部設(shè)備被放到最高端(0X8000~0XFFFF),并采用非復(fù)用方式連接。模塊中還包括RS232與RS485之間的轉(zhuǎn)換。SN75LBC176是RS485差分總線收發(fā)器芯片。RS232數(shù)據(jù)由TX0通過光隔傳送到SN75LBC176的發(fā)送端,同時(shí)驅(qū)動(dòng)發(fā)送控制端,數(shù)據(jù)就由SN75LBC176發(fā)送到RS485總線。當(dāng)SN75LBC176接收數(shù)據(jù)時(shí),數(shù)據(jù)傳送到RS232的RX0端。這樣就完成RS485到RS232的轉(zhuǎn)換。在系統(tǒng)中,為了提供人機(jī)交互的功能,設(shè)計(jì)了T6963C點(diǎn)陣式液晶圖形顯示控制器,在設(shè)計(jì)時(shí),需要用一根地址線來實(shí)現(xiàn)液晶的數(shù)據(jù)通道和指令通道的區(qū)分。T6963C外接114x64的液晶顯示屏,可以提供監(jiān)測數(shù)據(jù)顯示的實(shí)例。
CAN總線模塊由SJA1000、82C250、6N137等芯片組成。SJA1000是并行接口的CAN控制器。82C250是CAN控制器接口芯片。當(dāng)C8051F120要向某節(jié)點(diǎn)發(fā)送數(shù)據(jù)時(shí),它向SJA1000的一些緩沖器寫數(shù)據(jù)和命令。數(shù)據(jù)通過SJA1000處理后,合成CAN幀格式,通過6N137至82C250,由82C250的差分端CANH和CANL傳送到物理總線。外部節(jié)點(diǎn)發(fā)送過來的數(shù)據(jù)通過82C250經(jīng)光電隔離器6N137后被SJA1000接收,存放在SJA1000相應(yīng)的寄存器中。C8051F120就可以讀取這些CAN幀格式數(shù)據(jù)。
LON模塊由MCl43150、FTF-10A、MC145407以及外擴(kuò)SRAM儲(chǔ)存器IS61C256AH-15N和外擴(kuò)Flash存儲(chǔ)器AT29C512組成。MC143150是LonWorks控制芯片,含有Lontalk協(xié)議的固態(tài)軟件,主要用于Lonworks數(shù)據(jù)的處理。FTT-10A是LonWorks收發(fā)器,它是一種變壓器耦合收發(fā)器,支持網(wǎng)絡(luò)的自由拓?fù)浣Y(jié)構(gòu),作為LON網(wǎng)的網(wǎng)絡(luò)介質(zhì)的接口。MC145407是電平轉(zhuǎn)換芯片,負(fù)責(zé)MC143150與RS232之間的電平轉(zhuǎn)換。當(dāng)C8051F120要向MC143150發(fā)送數(shù)據(jù)時(shí),C8051F120把數(shù)據(jù)發(fā)送到串口緩沖區(qū),通過MC145407將I/O引腳輸入的TTL電平和輸出的CMOS電平轉(zhuǎn)換為EIA232C電平。MC143150收到數(shù)據(jù)信息后,將數(shù)據(jù)讀入儲(chǔ)存于MC143150的緩沖區(qū)中,然后由MC143150打包為LonWorks網(wǎng)絡(luò)變量,通過不同節(jié)點(diǎn)、相同類型的網(wǎng)絡(luò)變量的互聯(lián),即可實(shí)現(xiàn)LON節(jié)點(diǎn)之間的數(shù)據(jù)傳送。另外,還外擴(kuò)SRAM儲(chǔ)存器IS61C256AH-15N和Flash存儲(chǔ)器At29C512,讓用戶能編制使用較大的程序。
2 、軟件設(shè)計(jì)
2.1 系統(tǒng)的分層結(jié)構(gòu)
整個(gè)系統(tǒng)采用分層方式完成各協(xié)議間的通信。系統(tǒng)分為硬件驅(qū)動(dòng)層、協(xié)議層及其應(yīng)用層,如圖2所示。
由于下層模塊只向上層提供一個(gè)軟件接口,屏蔽了下層的具體實(shí)現(xiàn)細(xì)節(jié)。上層軟件只有通過該接口才能與下層軟件發(fā)生聯(lián)系,這樣就保證了各層之間的獨(dú)立性。系統(tǒng)根據(jù)硬件接口、總線協(xié)議的不同,分為三個(gè)大的分層功能模塊,它們分別是LonWorks模塊、PPI模塊、CANOPEN模塊。這些模塊又各自提供了硬件接收緩沖區(qū)、硬件發(fā)送緩沖區(qū)、協(xié)議接收緩沖區(qū)、協(xié)議發(fā)送緩沖區(qū)。
2.2 軟件實(shí)現(xiàn)的框架
系統(tǒng)的軟件分為系統(tǒng)初始化模塊、系統(tǒng)配置模塊、協(xié)議通信總調(diào)度模塊、三個(gè)協(xié)議實(shí)現(xiàn)模塊及硬件驅(qū)動(dòng)模塊。它們分別對應(yīng)系統(tǒng)軟件的不同分層。其中,系統(tǒng)配置模塊、協(xié)議間通信總調(diào)度模塊為應(yīng)用層程序。協(xié)議實(shí)現(xiàn)模塊(LonWorks協(xié)議模塊、PPI協(xié)議模塊、CANOpen協(xié)議模塊)為協(xié)議層程序。硬件驅(qū)動(dòng)模塊為硬件驅(qū)動(dòng)層程序。其流程圖如圖3所示。
系統(tǒng)配置模塊主要完成系統(tǒng)的配置。它包括總線各端口是配置為主模式還是從模式、各通信協(xié)議的波特率等。系統(tǒng)可以通過兩種方式配置:一種為硬件方式配置,另一種是通過互連網(wǎng)進(jìn)行軟件配置。協(xié)議間通信總調(diào)度模塊主要是驅(qū)動(dòng)不同協(xié)議之間進(jìn)行相互通信。各總線協(xié)議的格式解析分別由相應(yīng)的協(xié)議模塊完成。硬件驅(qū)動(dòng)模塊主要完成把各硬件緩沖區(qū)中的數(shù)據(jù)發(fā)送到總線,同時(shí)把從總線接收來的數(shù)據(jù)存放到協(xié)議緩沖區(qū)中。
2.3 緩沖區(qū)結(jié)構(gòu)
本系統(tǒng)的緩沖區(qū)采用改進(jìn)的循環(huán)隊(duì)列結(jié)構(gòu),采用了三個(gè)指針Bp.In、Bp.Out、Bp.Try。其中,Bp.In是隊(duì)頭指針。當(dāng)隊(duì)列接收一數(shù)據(jù)時(shí),如果隊(duì)列緩沖區(qū)尚有空間,則數(shù)據(jù)入隊(duì),同時(shí)Bp.In加1。Bp.0ut是隊(duì)尾指針。當(dāng)數(shù)據(jù)要出隊(duì)時(shí),如果隊(duì)列緩沖區(qū)非空,則Bp.Out加1。隊(duì)列緩沖區(qū)空或滿的判定方法可以用下面的偽C語言描述:
if(Bp.In++==Bp.Out)
{隊(duì)列緩沖區(qū)已滿};//如隊(duì)頭加1等于隊(duì)尾指針,則//表示該隊(duì)列已滿
if(Bp.0ut==Bp.In)
{隊(duì)列緩沖區(qū)已空};//如果隊(duì)尾指針趕上隊(duì)頭則表示//該隊(duì)列已空
Bp.Try是為通信時(shí)重發(fā)而準(zhǔn)備的。當(dāng)要發(fā)送數(shù)據(jù)時(shí),Bp.Try向前移動(dòng)(Bp.Try++),但Bp.Out不動(dòng)(數(shù)據(jù)不出隊(duì))。當(dāng)Bp.Try=Bp.In時(shí),表示隊(duì)列緩沖區(qū)已沒有數(shù)據(jù)要發(fā)送。如果要求數(shù)據(jù)重發(fā),僅僅把Bp.Try重新指回Bp.Out(Bp.Try=Bp.Out)再次發(fā)送。只有當(dāng)發(fā)送成功時(shí),才允許數(shù)據(jù)出隊(duì)(Bp.Out=Bp.Try)。由于一次發(fā)送數(shù)據(jù)的多少由Bp.Try決定(一次不一定把隊(duì)列緩沖區(qū)數(shù)據(jù)都發(fā)送完),這樣給數(shù)據(jù)的發(fā)送提供了極大的方便。
2.4 硬件緩沖區(qū)
系統(tǒng)要發(fā)送數(shù)據(jù)時(shí)把發(fā)送協(xié)議緩沖區(qū)的數(shù)據(jù)拷貝到發(fā)送硬件緩沖區(qū),并驅(qū)動(dòng)一次發(fā)送后退出。硬件發(fā)送緩沖區(qū)中的數(shù)據(jù)是由發(fā)送中斷自動(dòng)完成的。硬件發(fā)送中斷驅(qū)動(dòng)完一次數(shù)據(jù)發(fā)送就退出。當(dāng)硬件發(fā)送完數(shù)據(jù)后就會(huì)產(chǎn)生中斷標(biāo)志并重新進(jìn)入中斷,重復(fù)上面的過程直到數(shù)據(jù)發(fā)送完。同樣,發(fā)送中斷只負(fù)責(zé)發(fā)送完硬件發(fā)送緩沖區(qū)中的數(shù)據(jù)而不關(guān)心這些數(shù)據(jù)代表的意義。中斷程序流程圖如圖4所示。
2.5 各總線協(xié)議間的通信方法
各總線協(xié)議間通信是采用周期輪詢方式下的實(shí)地址共享。其基本思想就是系統(tǒng)定時(shí)地由配置為主模式的端口向其對應(yīng)總線的每個(gè)從機(jī)發(fā)送請求讀數(shù)命令包。從機(jī)接收到命令后就把它的數(shù)據(jù)傳送給主機(jī)(總線集成器)。主機(jī)把接收到的數(shù)據(jù)存放在對應(yīng)的協(xié)議地址中。當(dāng)配置為從機(jī)的端口所對應(yīng)的總線上的主機(jī)向總線集成器請求數(shù)據(jù)時(shí),總線集成器只是簡單地把前一個(gè)周期輪詢的數(shù)據(jù)應(yīng)答過去。由于輪詢總線的周期比較短,因此應(yīng)答的數(shù)據(jù)稍微滯后。但對總線采集的數(shù)據(jù)的真實(shí)性影響不大。
下面以圖5中CANOpen總線的節(jié)點(diǎn)B向LonWorks節(jié)點(diǎn)A請求數(shù)據(jù)為例來說明這種方式的通信過程。首先,系統(tǒng)周期性地改變從機(jī)號、通信命令、通信狀態(tài),向LonWorks所有的從機(jī)請求數(shù)據(jù),從機(jī)應(yīng)答的數(shù)據(jù)存放在其協(xié)議地址中。然后CANOpen主節(jié)點(diǎn)B向總線集成器請求LonWorks總線A節(jié)點(diǎn)中的數(shù)據(jù)。最后,總線集成器收到該命令,把剛采集到的協(xié)議地址上的值傳送給節(jié)點(diǎn)B。這一次通信至此結(jié)束。
該多協(xié)議總線集成器目前提供了對LonWorks、PPI、CANOpen的支持,并且還對上面三種協(xié)議提供了利用TCP/IP遠(yuǎn)程監(jiān)控和配置的接口,人機(jī)界面使系統(tǒng)有較好的監(jiān)測能力。由于該集成器采用了較高性能的處理器,使各個(gè)協(xié)議之間通訊實(shí)時(shí)性得到保證。為了有利于系統(tǒng)以后的擴(kuò)展,整個(gè)總線集成器系統(tǒng)嚴(yán)格按照模塊化來進(jìn)行硬件設(shè)計(jì)和軟件編程,使系統(tǒng)軟件的移植性大大提高。
責(zé)任編輯:gt
評論
查看更多