<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 基于DeviceNet總線(xiàn)的從設備通迅適配器設計

基于DeviceNet總線(xiàn)的從設備通迅適配器設計

作者: 時(shí)間:2012-11-29 來(lái)源:網(wǎng)絡(luò ) 收藏


send (Sbuffer,6);
}
}
break;
case 0x85;
{if (buffer[6]= =0x02)
Sbuffer[0]=0x85;
Sbuffer[1]=0x64;
Sbuffer[2]=0x8e;
Sbuffer[3]=0x00;
Sbuffer[4]=0x00;
send (Sbuffer,6);
}
else
{Sbuffer[0]=0x85;
Sbuffer[1]=0x64;
Sbuffer[2]=0x00;
Sbuffer[3]=0x8e;
Sbuffer[4]=0x01;
Sbuffer[5]=0x00;
send (Sbuffer,6);
}
}
break;
case 0x87;
Sbuffer[0]=0x85;
Sbuffer[1]=0x64;
Sbuffer[2]=0x00;
Sbuffer[3]=0x90;
Sbuffer[4]=0x50;
Sbuffer[5]=0x00;
send (Sbuffer,6);
break;
case 0xA0;
Sbuffer[0]=0x78;
Sbuffer[1]=0xA1;
Sbuffer[2]=0x07;
send (Sbuffer,3);
break;
case 0xA1;
Sbuffer[0]=0x78;
Sbuffer[1]=0xA1;
Sbuffer[2]=0x07;
send (Sbuffer,3);
break;
}
}
void main ()
{
config1 ();
XBYTE[0x4000]=0x22; //operation mode
While (1)
{;}
}

3 DeviceNet通訊適配器的收發(fā)中斷和時(shí)鐘中斷的設計
  CAN控制器和微處理器的數據交換可以使用中斷方式和周期輪詢(xún)的方式。從響應速度和執行的效率來(lái)講,我們的應用環(huán)境使用中斷的方式。因此我們必須編寫(xiě)自己的收發(fā)中斷處理函數,其功能是將CAN控制器緩沖區中的報文拷貝到一個(gè)臨時(shí)的全局緩沖區,并將該緩沖區作為高層協(xié)議處理和底層收發(fā)處理的一個(gè)接口,這樣的設計具有良好的可擴展性。如果將來(lái)使用其它廠(chǎng)家的CAN控制器,所做的修改也僅僅是改動(dòng)一些與具體硬件相應的幾個(gè)底層函數。我們只要定義好互相通訊的接口,就可以將軟件和硬件進(jìn)行分離,在團隊開(kāi)發(fā)的環(huán)境中可以加快工作的進(jìn)度和效率。
  另外,通訊協(xié)議中經(jīng)常要用到一些定時(shí)的功能,因而我們也需要在底層編寫(xiě)一個(gè)定時(shí)中斷處理程序,該函數使用一個(gè)硬件定時(shí)器,以一個(gè)最小的計時(shí)單位周期性的為上層應用提供計時(shí)狀態(tài)。


圖2 SJA1000的初始化流程

4 DeviceNet通訊適配器的報文收發(fā)程序和分段服務(wù)
  這里所講的報文收發(fā)協(xié)議對不同的通訊協(xié)議有不同的定義。另外,CAN的數據長(cháng)度不能超過(guò)8個(gè)字節,如何支持大于8個(gè)字節的報文要涉及到分段服務(wù)。分段協(xié)議信息由一個(gè)字節組成,其中高2位表示分段的類(lèi)型,低6位作為分段的計數器,用來(lái)標識每個(gè)數據包,其計算方式是:fragmentCount=(fragmentcount+1) mod 64。下面是具體的分段的類(lèi)型:


  因此,在程序的設計中應當加入對分段服務(wù)協(xié)議的支持。
  對于發(fā)送報文的處理與接收的過(guò)程是一個(gè)逆向過(guò)程。需要注意的是編寫(xiě)程序的時(shí)候要嚴格按照DeviceNet協(xié)議規范的定義,否則將產(chǎn)生不可預測的錯誤,為將來(lái)的協(xié)議一致性測試和底層調試都帶來(lái)許多麻煩。

5 DeviceNet通訊適配器的主程序的設計
  軟件由頭文件、初始化程序、功能子程序和主程序組成。
軟件的組成結構提供了硬件和軟件升級的方便。軟件中將與主處理器、CAN控制器等硬件接口的部分比較獨立地設計,而主程序和功能子程序主要集中于協(xié)議的完成。對將來(lái)的硬件改型和可能的協(xié)議修改都提供了較大的方便。
  軟件以Franklin C51語(yǔ)言編寫(xiě),通過(guò)偉福E51L單片機開(kāi)發(fā)裝置進(jìn)行調試。
軟件結構圖如下:



5.1 軟件功能分解
  軟件由頭文件、初始化程序、功能子程序和主程序組成。其功能分解如下:
  頭文件:定義所有的參數、類(lèi)結構和函數,定義要使用的硬件資源(如定時(shí)器和寄存器等)變量名稱(chēng);
初始化程序:完成對主處理器的內存及硬件(如堆棧、定時(shí)器等)初試化,完成CAN控制器的初始化。
功能子程序:詳見(jiàn)各模塊介紹。
主程序組成:主控制流程。

5.2 軟件各模塊功能詳述
  模塊按以下四個(gè)部分來(lái)介紹:頭文件,初始化程序,功能子程序,主程序
  說(shuō)明:泵和閥的實(shí)現程序非常類(lèi)似,兩者只相差一些參數,故此處以泵的源程序作為例子進(jìn)行各個(gè)程序段的分析和說(shuō)明。(詳見(jiàn)源程序)

5.2.1 頭文件
其主要操作為:
包含(include)要使用的其它頭文件: reg51.h 51系列寄存器頭文件
absacc.h 51系列硬件資源頭文件
string.h C語(yǔ)言的字符操作頭文件
定義(define)要使用的用戶(hù)自定義數據類(lèi)型;定義類(lèi)(class)ID;定義連接的類(lèi)型;
定義各實(shí)例(instacne)ID和定時(shí)器數量;定義全局狀態(tài)(status)字對應位的內容;
定義全局事件(event)字對應位的內容;定義DeviceNet錯誤代碼和附加錯誤代碼;
定義DeviceNet服務(wù)代碼;定義分段(fragment)值;定義連接狀態(tài);其它附加的定義;
  類(lèi)結構定義: Identity,DeviceNet,Connection,Message Router,Assembly,Discrete Output,
Analog Input,Analog Output

5.2.2 初始化程序
  其主要操作為:SJA1000初始化;定時(shí)器初始化;各結構對象初試化;

5.2.3 功能子程序
  其主要操作為:具體定義在主程序中調用的各子程序;雙口RAM中斷子程序;定時(shí)器中斷子程序;

5.2.4 主程序
  當實(shí)現所有的功能模塊以后,最重要的是如果構造一個(gè)有機的主程序模塊,將這些零散的模塊組織起來(lái),進(jìn)行系統的初始化工作。另外還要設計一個(gè)優(yōu)化的循環(huán)體周期性的執行以對DeviceNet網(wǎng)絡(luò )上的報文產(chǎn)生動(dòng)作。
  因為我們實(shí)現的是一個(gè)從站適配器,一般在輪詢(xún)的情況下只對主設備的請求報文產(chǎn)生相應的應答,而不會(huì )主動(dòng)發(fā)送報文,除了上電時(shí)的重復MAC ID例行檢測。如何構造循環(huán)體是關(guān)鍵,我們這里采用了事件的方式,主循環(huán)體周期對網(wǎng)絡(luò )事件的不同可能的狀態(tài)產(chǎn)生動(dòng)作。程序中定義不同的網(wǎng)絡(luò )事件,主程序循環(huán)體對代表這些事件的標志位不停的輪詢(xún),當某個(gè)標志位因網(wǎng)絡(luò )事件的觸發(fā)而被置1的時(shí)候,主程序就進(jìn)入相應的子程序進(jìn)行對應事件的操作。操作完畢之后清楚標志位,退回到主程序循環(huán)中繼續輪詢(xún)所有的事件標志位。
其主要操作為:設置數據緩沖區;定義全局變量;開(kāi)時(shí)鐘;開(kāi)中斷;進(jìn)行主循環(huán);

結束語(yǔ)
  由本通訊適配器已于2002年3月13日在日本京都ASTEM RI通過(guò)ODVA一致性測試,其FCS已經(jīng)成功的應用于2001年第2屆北京中國國際現場(chǎng)總線(xiàn)技術(shù)交流會(huì )暨展覽會(huì ),第3屆上海國際工業(yè)博覽會(huì ),吳忠儀表智能調節閥,東莞垃圾焚燒發(fā)電廠(chǎng)中的給水控制系統中。由于采用現場(chǎng)總線(xiàn)技術(shù),取得了顯著(zhù)的經(jīng)濟效益。
晶振相關(guān)文章:晶振原理
上拉電阻相關(guān)文章:上拉電阻原理

上一頁(yè) 1 2 3 4 下一頁(yè)

關(guān)鍵詞: DeviceNet總線(xiàn) 從設備 通迅適配器

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>