<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ò ) 收藏

  參數對象 在帶有可配置參數的設備中都用到了可選的參數對象。將為每個(gè)可配置的參數引入一個(gè)實(shí)例。參數對象帶有設備配置參數,提供訪(fǎng)問(wèn)所有參數的標準組態(tài)工具。參數對象的配置選項屬性可以包括數值,量程,文本和限制等。
  應用對象 配備了匯編對象或參數對象的設備通常至少應包含一個(gè)應用對象, 卷II的第六章DeviceNet對象庫中有大量的標準應用對象。
  設備描述(Device Profiles) DeviceNet規范不僅僅是一個(gè)物理連接協(xié)議規范。它通過(guò)定義標準的設備模型促進(jìn)不同廠(chǎng)商設備之間的互操作性。屬于同一設備模型的所有設備都必須支持共同的標識和通訊狀態(tài)數據。設備描述是針對各種設備而定義的。設備描述中包括設備各種特定的數據。符合設備類(lèi)型描述的多個(gè)供貨商提供的簡(jiǎn)單設備(例:按鈕,馬達啟動(dòng)器,光電池,氣動(dòng)閥執行器)在邏輯上是可互換的。

設備描述包括下列各項:
l 設備對象模型定義-定義設備對象模型如上圖所示。通常用表格列出設備中存在的所有對象類(lèi),各類(lèi)中的實(shí)例數,各個(gè)對象如何影響行為,以及每個(gè)對象的公共接口。
l 設備I/O數據格式定義-通常包含用于簡(jiǎn)化和加快數據傳輸的匯編對象的定義,匯編對象包含所需要的數據組件的地址(類(lèi),實(shí)例和屬性)。
l 設備可配置參數的定義和訪(fǎng)問(wèn)這些參數的公共接口。該信息包含在電子數據文文件(EDS)中,EDS包含在設備的用戶(hù)文件中。
DeviceNet規范定義了一個(gè)電子數據文文件(EDS),EDS是一個(gè)簡(jiǎn)單文件格式,供貨商可以將產(chǎn)品的特殊信息提供給其它供貨商。這樣可以具有友好的用戶(hù)配置工具,可以很容易的更新,無(wú)需經(jīng)常修正配置軟件工具。
  上面只講述了DeviceNet協(xié)議規范的概貌,DeviceNet協(xié)議規范還是相當復雜的,整個(gè)協(xié)議規范有1000多頁(yè),有興趣的讀者可到ODVA官方網(wǎng)站下載。只有對協(xié)議規范有一定深度的理解后,才可以著(zhù)手思考如何開(kāi)發(fā)基于DeviceNet協(xié)議適配器的軟件系統。

三、 軟件系統設計
  下面主要介紹通訊協(xié)議的設計,軟件的實(shí)現是以DeviceNet協(xié)議規范的2.0版本為指導的。不同的應用有不同的具體實(shí)現,本文只給出設計的原理和指道思想及原則。
1 DeviceNet通訊設備的上電狀態(tài)流圖
每個(gè)設備上電以前都有一個(gè)例行的狀態(tài)流轉過(guò)程,該過(guò)程描述了設備能夠在DeviceNet上通訊之前必須完成的以下工作,例如重復MAC ID檢測等;以及對設備通訊產(chǎn)生影響的網(wǎng)絡(luò )事件。



DeviceNet狀態(tài)流圖
  上圖是DeviceNet設備上電后的狀態(tài)流轉圖,其中一共有4個(gè)狀態(tài):發(fā)送重復MAC ID檢測報文狀態(tài),等待重復MAC ID檢測報文狀態(tài),在線(xiàn)狀態(tài),通訊出錯狀態(tài)。設備在各個(gè)狀態(tài)之間的流轉是根據網(wǎng)絡(luò )的事件情況,如下所示:
網(wǎng)絡(luò )事件/狀態(tài)轉換關(guān)系



2 CAN芯片的初始化
  建立在CAN總線(xiàn)的通訊之前要預先有一些初始化過(guò)程。一般,獨立式CAN芯片SJA1000在上電后或者上電后軟件功能的重置時(shí)要初始化一下工作寄存器。當系統上電后,處理器首先運行自己的特殊初始化過(guò)程,然后再進(jìn)入SJA1000的連接建立過(guò)程(SJA1000的17號管腳獲得一個(gè)Reset低電平脈沖,并進(jìn)入Reset模式)。在初始化SJA1000的寄存器之前,主微處理器應該檢測Reset的mode/request標志,如果SJA1000已經(jīng)是Reset模式,因為所有的寄存器只能在Reset模式下進(jìn)行寫(xiě)操作,所有的寄存器都將獲得的相應的配置信息。
  當完成所有的初始化工作后,SJA1000就進(jìn)入工作(Operation)模式,并且使CAN控制器的中斷功能有效。SJA1000的初始化流程如圖2所示。
  下面是一段用C51編寫(xiě)的SJA1000初始化及一個(gè)模擬發(fā)送、接收過(guò)程的程序。
  程序說(shuō)明:主程序首先對SJA1000進(jìn)行初始化,config1(),把接收中斷打開(kāi);然后等待。
  當監測到網(wǎng)絡(luò )上有數據進(jìn)入SJA1000的buffer時(shí),進(jìn)入中斷服務(wù)程序service_int1()interrupt 2
  using 1,并把接收數據放入buffer數組中。
  首先判斷是否該數據是針對5號節點(diǎn)的,如果不是,則丟棄,否則接收。
  判斷收到的10個(gè)數據屬于哪一類(lèi),根據邏輯發(fā)送相應響應。
發(fā)送程序send(UIN*value,int number)中,當發(fā)送緩沖區為空,則將需要發(fā)送的數據(在Sbuffer中)發(fā)給Master設備。
include
include
define UINT unsigned int
UINT a;
UINT buffer[10];
UINT Sbuffer[6];
UINT b=0;
int i;
sbit P1_0=P1^0;
sbit P1_1=P1^1;
sbit P1_3=P1^3;
void config1() //對SJA1000進(jìn)行初始化
{a=0;
XBYTE[0x4000]=0x01; //復位模式
XBYTE[0x4004]=0x11; //接收中斷使能,wake_up中斷使能
XBYTE[0x4005]=0xFF; //Accept Mask Register設置
XBYTE[0x4006]=0x00; //Bus Timing 0
XBYTE[0x4007]=0x1C; //時(shí)鐘周期的設置
XBYTE[0x4008]=0xFA; //輸出控制寄存器
XBYTE[0x401F]=0x48; //clock divider
EA=1;
EX1=1;
}
void send(UINT*value,int number)
{int i;
do
{
}while(XBYTE[0x4002]4= =0); //發(fā)送緩沖區為空,才能繼續發(fā)送
for(i=0;iXBYTE[0x400A+i]=value[i]; //將發(fā)送的內容放入緩沖區
XBYTE[0x4001]=0x01; //發(fā)送命令
P1_0=!P1_0;
P1_1=0;
P1_3=!P1_3; //燈閃爍,以說(shuō)明在發(fā)送中
XBYTE[0x7fff]=P1;
}
void service_int1() interrupt 2 using 1 //接收中斷服務(wù)程序
{
UINT count;
UINT Status;
int c;
Status=XBYTE[0x4003]; //讀一次則清中斷
if (b700)
{for (c=0;c10;c++)
{buffer[c]=XBYTE[0x4014+c]; //接收信息放入buffer中
XBYTE[0x0000+10*b+c]=buffer[c];
}
b++;
}
XBYTE[0x4001]=0x04;
if (buffer[0]= =0x85)
switch (buffer[1]) //對buffer內容進(jìn)行判斷,決定response內容
{
case 0xc6;
Sbuffer[0]=0x85;
Sbuffer[1]=0x63;
Sbuffer[2]=0x00;
Sbuffer[3]=0xcb;
Sbuffer[4]=0x00;
send (Sbuffer,5);
break;
case 0x86;
{if (buffer[7]= =0x00)
Sbuffer[0]=0x85;
Sbuffer[1]=0x63;
Sbuffer[2]=0x00;
Sbuffer[3]=0xcb;
Sbuffer[4]=0x00;
send (Sbuffer,5);
}
else
{Sbuffer[0]=0x85;
Sbuffer[1]=0x64;
Sbuffer[2]=0x00;
Sbuffer[3]=0x94;
Sbuffer[4]=0x0e;
Sbuffer[5]=0xff;
晶振相關(guā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>