中文字幕 另类精品,亚洲欧美一区二区蜜桃,日本在线精品视频免费,孩交精品乱子片免费

<sup id="3hn2b"></sup>

    1. <sub id="3hn2b"><ol id="3hn2b"></ol></sub><legend id="3hn2b"></legend>

      1. <xmp id="3hn2b"></xmp>

      2. 新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 基于DeviceNet總線的從設備通迅適配器設計

        基于DeviceNet總線的從設備通迅適配器設計

        作者: 時間:2012-11-29 來源:網(wǎng)絡 收藏

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

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

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



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



        2 CAN芯片的初始化
          建立在CAN總線的通訊之前要預先有一些初始化過程。一般,獨立式CAN芯片SJA1000在上電后或者上電后軟件功能的重置時要初始化一下工作寄存器。當系統(tǒng)上電后,處理器首先運行自己的特殊初始化過程,然后再進入SJA1000的連接建立過程(SJA1000的17號管腳獲得一個Reset低電平脈沖,并進入Reset模式)。在初始化SJA1000的寄存器之前,主微處理器應該檢測Reset的mode/request標志,如果SJA1000已經(jīng)是Reset模式,因為所有的寄存器只能在Reset模式下進行寫操作,所有的寄存器都將獲得的相應的配置信息。
          當完成所有的初始化工作后,SJA1000就進入工作(Operation)模式,并且使CAN控制器的中斷功能有效。SJA1000的初始化流程如圖2所示。
          下面是一段用C51編寫的SJA1000初始化及一個模擬發(fā)送、接收過程的程序。
          程序說明:主程序首先對SJA1000進行初始化,config1(),把接收中斷打開;然后等待。
          當監(jiān)測到網(wǎng)絡上有數(shù)據(jù)進入SJA1000的buffer時,進入中斷服務程序service_int1()interrupt 2
          using 1,并把接收數(shù)據(jù)放入buffer數(shù)組中。
          首先判斷是否該數(shù)據(jù)是針對5號節(jié)點的,如果不是,則丟棄,否則接收。
          判斷收到的10個數(shù)據(jù)屬于哪一類,根據(jù)邏輯發(fā)送相應響應。
        發(fā)送程序send(UIN*value,int number)中,當發(fā)送緩沖區(qū)為空,則將需要發(fā)送的數(shù)據(jù)(在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進行初始化
        {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; //時鐘周期的設置
        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ā)送緩沖區(qū)為空,才能繼續(xù)發(fā)送
        for(i=0;iXBYTE[0x400A+i]=value[i]; //將發(fā)送的內容放入緩沖區(qū)
        XBYTE[0x4001]=0x01; //發(fā)送命令
        P1_0=!P1_0;
        P1_1=0;
        P1_3=!P1_3; //燈閃爍,以說明在發(fā)送中
        XBYTE[0x7fff]=P1;
        }
        void service_int1() interrupt 2 using 1 //接收中斷服務程序
        {
        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內容進行判斷,決定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;
        晶振相關文章:晶振原理
        上拉電阻相關文章:上拉電阻原理


        評論


        技術專區(qū)

        關閉