ethercat從站mainloop函數

來源:互聯網
上載者:User

標籤:

void MainLoop(void){      //=======bEscIntEnabled :同步模式    bEcatFirstOutputsReceived:接收和發送資料完成    bDcSyncActive:分布時鐘同步====////=============初始值FAULSE=================初始值FAULSE========================初始值FAULSE=========//             /* 當運行在FreeRun-Mode:  bEscIntEnabled = FALSE, bDcSyncActive = FALSE //未使能中斷,自由運行模式           當運行在Synchron-Mode: bEscIntEnabled = TRUE, bDcSyncActive = FALSE //同步模式使能,同步模式使用中斷處理周期性資料           當運行在DC-Mode:       bEscIntEnabled = FALSE, bDcSyncActive = TRUE */  //分布時鐘模式使能*/if ( (!bEscIntEnabled ||!bEcatFirstOutputsReceived)&& !bDcSyncActive)/*  非分布時鐘同步模式,且非中斷同步模式或SM2、SM3事件未完成 */        { /* 如果應用程式是運行在ECAT同步模式當中,  函數ECAT_Application將會在ESC中斷裡面被調用(在mcihw.c和spihw.c)  在ECAT同步模式當中,它可以被另外得檢查,  如果SM事件被接受至少一次(bEcatFirstOutputReceived=1),  否則,沒有中斷會產生和函數ECAT_Application將會在這裡被調用  (中斷禁止,因為當執行ECAT_Application的時候,SM事件可以產生)*/                     if ( !bEscIntEnabled )                                  /*自由運行模式,中斷不使能,使用自有運行模式讀取資料*/            {             /* 應用程式正在運行在ECAT 自由運行模式,首先,我們需要檢查是否有輸出被接受 */   /*因為其他應用事件也可能發生中斷,所以先要判斷*/                UINT16 ALEvent = HW_GetALEventRegister();           /*讀取AL狀態,判斷是否有輸出資料,先讀低8位後高8位*/                ALEvent = SWAPWORD(ALEvent);                        /*將ALEvent高低8位互換位置,所以需要交換高低8位*/                if ( ALEvent & PROCESS_OUTPUT_EVENT )               /*判斷ESC是否有資料輸出0x0400   檢測0X0221地址內的SM2事件*/                {                          /*設定狀態機器的標誌,輸出或輸入成功*/                    bEcatFirstOutputsReceived = TRUE;                     if ( bEcatOutputUpdateRunning )                 /*檢測是否處於運行狀態,在startinputhangler中設定*/                    {                        PDO_OutputMapping();                        /*接收主站發送下來的數值    主要為LED燈狀態值*/                    }                }                else if ( nPdOutputSize == 0 )                      /*如果輸出長度為0,且輸入被讀取時看門狗必須複位*/                {                    if ( ALEvent & PROCESS_INPUT_EVENT )            /*判斷ESC是否有資料輸出0x0800   檢測0X0221地址內的SM3事件*/                    {                        bEcatFirstOutputsReceived = TRUE;           /*置輸出接收成功標誌位,備看門狗檢測複位用*/                    }                }            }            /* 無論自由運行模式還是同步運行模式,都要執行 ECAT_Application() */            DISABLE_ESC_INT();                     /*關閉中斷源INT1*/            ECAT_Application();                    /*應用外設控制和當Becatinputupdatarunning=1 時執行SM3事件操作*/            ENABLE_ESC_INT();                      /*使能中斷源INT1*/        }//下面因為報錯就屏蔽掉了//      /* 這裡沒有中斷服務程式來處理硬體定時器,所以,檢查定時器的寄存器看是否想要的周期已經過了*/  //        {//            UINT16 CurTimer = HW_GetTimer();       /*定時器7沒有配置中斷,通過檢測計數器值到達期望值後自動調用相關程式*///            if(CurTimer>= ECAT_TIMER_INC_P_MS)     /*配置的周期為0X0271        625ticks/ms   即每毫秒執行一次*///            {//                ECAT_CheckTimer();                 /*運行狀態燈和錯誤燈情況設定,*/////                HW_ClearTimer();                   /*定時器7寄存器的計數器值清零*///            }//        }        /* 調用EtherCAT函數實現非周期性的資料操作:狀態機器控制和郵箱資料操作*/        ECAT_Main();                                   /* 調用低優先順序的應用程式部分 */  //        COE_Main();        CheckIfEcatError();// 檢查通訊和同步,如果發生了一個錯誤則更新AL狀態/AL狀態代碼}

ethercat從站mainloop函數

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.