一種多協(xié)議的嵌入式總線集成器的設(shè)計(jì)與研究
系統(tǒng)的軟件分為系統(tǒng)初始化模塊、系統(tǒng)配置模塊、協(xié)議通信總調(diào)度模塊、三個(gè)協(xié)議實(shí)現(xiàn)模塊及硬件驅(qū)動模塊。它們分別對應(yīng)系統(tǒng)軟件的不同分層。其中,系統(tǒng)配置模塊、協(xié)議間通信總調(diào)度模塊為應(yīng)用層程序。協(xié)議實(shí)現(xiàn)模塊(LonWorks協(xié)議模塊、PPI協(xié)議模塊、CANOpen協(xié)議模塊)為協(xié)議層程序。硬件驅(qū)動模塊為硬件驅(qū)動層程序。其流程圖如圖3所示。本文引用地址:http://butianyuan.cn/article/152308.htm
系統(tǒng)配置模塊主要完成系統(tǒng)的配置。它包括總線各端口是配置為主模式還是從模式、各通信協(xié)議的波特率等。系統(tǒng)可以通過兩種方式配置:一種為硬件方式配置,另一種是通過互連網(wǎng)進(jìn)行軟件配置。協(xié)議間通信總調(diào)度模塊主要是驅(qū)動不同協(xié)議之間進(jìn)行相互通信。各總線協(xié)議的格式解析分別由相應(yīng)的協(xié)議模塊完成。硬件驅(qū)動模塊主要完成把各硬件緩沖區(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.Out是隊(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.Out== Bp.In)
{隊(duì)列緩沖區(qū)已空};//如果隊(duì)尾指針趕上隊(duì)頭則表示該隊(duì)列已空
Bp.Try是為通信時(shí)重發(fā)而準(zhǔn)備的。當(dāng)要發(fā)送數(shù)據(jù)時(shí),Bp.Try向前移動(Bp.Try++),但Bp.Out不動(數(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ū)動一次發(fā)送后退出。硬件發(fā)送緩沖區(qū)中的數(shù)據(jù)是由發(fā)送中斷自動完成的。硬件發(fā)送中斷驅(qū)動完一次數(shù)據(jù)發(fā)送就退出。當(dāng)硬件發(fā)送完數(shù)據(jù)后就會產(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)軟件的移植性大大提高。
評論