国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Ethercat學(xué)習(xí)-從站源碼移植

這篇具有很好參考價(jià)值的文章主要介紹了Ethercat學(xué)習(xí)-從站源碼移植。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

簡(jiǎn)介

移植平臺(tái)GD32F450,從站芯片AX58100,從站源碼版本V5.12

移植源碼
1.源碼結(jié)構(gòu)

源碼使用之前SSC生成的源碼,如下圖所示

ethercat協(xié)議移植,Ethercat,學(xué)習(xí),單片機(jī),嵌入式硬件

因?yàn)榕渲肧SC的時(shí)候只選擇了COE的功能,所以源碼比較少。移植過(guò)程中重點(diǎn)關(guān)注紅筆圈出的幾個(gè)文件。其中ecat_def.h就是SSC中的配置項(xiàng)。el9800.c和el9800.h文件是根據(jù)EL9800的硬件生成的硬件接口文檔,我們需要將它修改為GD32的接口。myapp.c、myapp.h、myappObjects.h是根據(jù)我之前定義的Excel文件生成的。

2.GD32硬件接口準(zhǔn)備
1.SPI接口

ESI文件的ConfigData中,PDI的配置選擇的SPI,另外SPI的極性也在PDI的配置中。下面是部分代碼

/* SPI3初始化 */
void bsp_spi3_init(void)
{
    spi_parameter_struct spi_init_struct;

    rcu_periph_clock_enable(SPI3_CS_GPIO_CLK);
    rcu_periph_clock_enable(SPI3_MISO_GPIO_CLK);
    rcu_periph_clock_enable(SPI3_MOSI_GPIO_CLK);
    rcu_periph_clock_enable(SPI3_SCK_GPIO_CLK);
    rcu_periph_clock_enable(RCU_SPI3);
    
    /* MISO 引腳配置*/
    gpio_mode_set(SPI3_MISO_GPIO_PORT, GPIO_MODE_AF, GPIO_PUPD_NONE, SPI3_MISO_GPIO);
    gpio_output_options_set(SPI3_MISO_GPIO_PORT, GPIO_OTYPE_PP, GPIO_OSPEED_25MHZ, SPI3_MISO_GPIO);
    gpio_af_set(SPI3_MISO_GPIO_PORT, GPIO_AF_5, SPI3_MISO_GPIO);
    
    /* MOSI 引腳配置 */
    gpio_mode_set(SPI3_MOSI_GPIO_PORT, GPIO_MODE_AF, GPIO_PUPD_NONE, SPI3_MOSI_GPIO);
    gpio_output_options_set(SPI3_MOSI_GPIO_PORT, GPIO_OTYPE_PP, GPIO_OSPEED_25MHZ, SPI3_MOSI_GPIO);
    gpio_af_set(SPI3_MOSI_GPIO_PORT, GPIO_AF_5, SPI3_MOSI_GPIO);
    /* SCK 引腳配置*/
    gpio_mode_set(SPI3_SCK_GPIO_PORT, GPIO_MODE_AF, GPIO_PUPD_NONE, SPI3_SCK_GPIO);
    gpio_output_options_set(SPI3_SCK_GPIO_PORT, GPIO_OTYPE_PP, GPIO_OSPEED_25MHZ, SPI3_SCK_GPIO);
    gpio_af_set(SPI3_SCK_GPIO_PORT, GPIO_AF_5, SPI3_SCK_GPIO);

    /* CS 引腳配置 */
    gpio_mode_set(SPI3_CS_GPIO_PORT, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, SPI3_CS_GPIO);
    gpio_output_options_set(SPI3_CS_GPIO_PORT, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, SPI3_CS_GPIO);
    gpio_output_options_set(SPI3_CS_GPIO_PORT, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, SPI3_CS_GPIO);
    gpio_bit_set(SPI3_CS_GPIO_PORT,SPI3_CS_GPIO);

    spi_init_struct.trans_mode           = SPI_TRANSMODE_FULLDUPLEX;       /* 全雙工*/
    spi_init_struct.device_mode          = SPI_MASTER;                     /* 主機(jī)模式*/
    spi_init_struct.frame_size           = SPI_FRAMESIZE_8BIT;             /* 8位幀格式*/
    spi_init_struct.clock_polarity_phase = SPI_CK_PL_LOW_PH_1EDGE;         /* 時(shí)鐘相位極性,空閑時(shí)位低電平,第一個(gè)時(shí)鐘邊沿進(jìn)行采樣 */
    spi_init_struct.nss                  = SPI_NSS_SOFT;                   /* 軟件NSS */ 
    spi_init_struct.prescale             = SPI_PSC_32;                     /* 時(shí)鐘32分頻 */
    spi_init_struct.endian               = SPI_ENDIAN_MSB;                 /* 高位在前 */
    spi_init(SPI3, &spi_init_struct);

    /* 使能SPI */
    spi_enable(SPI3);
}
/* SPI的單字節(jié)收發(fā) */
u8 spi_data_rw(u8 data)
{
    u16 tmp;
    /* 等待發(fā)送緩沖區(qū)清空 */
    while(RESET == spi_i2s_flag_get(Ethercat_SPI,SPI_FLAG_TBE));
    /* 發(fā)送要寫的寄存器地址 */
    spi_i2s_data_transmit(Ethercat_SPI,data);
    /* 等待接收完成 SPI收發(fā)一體的,必須等到接收完成才代表一次完整的發(fā)送完成*/
    while(RESET == spi_i2s_flag_get(Ethercat_SPI,SPI_FLAG_RBNE));
    /* 讀取緩存取得值,清空緩存區(qū),準(zhǔn)備發(fā)送 */
    tmp = spi_i2s_data_receive(Ethercat_SPI);   
    return (u8)tmp;
}
2.PDI中斷配置

PDI中斷是一個(gè)外部引腳中斷

void ethercat_pdi_init(void)
{
    rcu_periph_clock_enable(RCU_SYSCFG);
    rcu_periph_clock_enable(RCU_GPIOE);
    gpio_mode_set(GPIOE, GPIO_MODE_INPUT, GPIO_PUPD_NONE,GPIO_PIN_3);
    /* 外部中斷配置 */
    syscfg_exti_line_config(EXTI_SOURCE_GPIOE, EXTI_SOURCE_PIN3);
    exti_init(EXTI_3, EXTI_INTERRUPT, EXTI_TRIG_FALLING);
    exti_interrupt_flag_clear(EXTI_3); 
}
3.Sync0中斷配置

Sync0中斷是一個(gè)外部引腳中斷

void ethercat_sync0_init(void)
{
    rcu_periph_clock_enable(RCU_SYSCFG);
    rcu_periph_clock_enable(RCU_GPIOC);
    gpio_mode_set(GPIOC, GPIO_MODE_INPUT, GPIO_PUPD_NONE,GPIO_PIN_13);
    /* 外部中斷配置 */
    syscfg_exti_line_config(EXTI_SOURCE_GPIOC, EXTI_SOURCE_PIN13);
    exti_init(EXTI_13, EXTI_INTERRUPT, EXTI_TRIG_FALLING);
    exti_interrupt_flag_clear(EXTI_13); 
}
4.Sync1中斷配置

Sync1中斷是一個(gè)外部引腳中斷

void ethercat_sync1_init(void)
{
    rcu_periph_clock_enable(RCU_SYSCFG);
    rcu_periph_clock_enable(RCU_GPIOF);
    gpio_mode_set(GPIOF, GPIO_MODE_INPUT, GPIO_PUPD_NONE,GPIO_PIN_1);
    /* 外部中斷配置 */
    syscfg_exti_line_config(EXTI_SOURCE_GPIOF, EXTI_SOURCE_PIN1);
    exti_init(EXTI_1, EXTI_INTERRUPT, EXTI_TRIG_FALLING);
    exti_interrupt_flag_clear(EXTI_1); 
}
5.定時(shí)器中斷配置

因?yàn)槲覀冊(cè)谂渲肧SC的時(shí)候選擇了ECAT_TIMER_INT選項(xiàng),所以需要配置一個(gè)1ms的定時(shí)器中斷,用來(lái)喂看門狗

void bsp_time4_init(void)
{
    timer_parameter_struct timer_initpara;

    rcu_periph_clock_enable(RCU_TIMER4);
  
    rcu_timer_clock_prescaler_config(RCU_TIMER_PSC_MUL4); //四倍頻,定時(shí)器1的時(shí)鐘來(lái)自 APB1 = AHB/4 AHB=SYS,所以定時(shí)器的時(shí)鐘就是200M

    timer_deinit(TIMER4);

    /* TIMER1 配置 */
    timer_initpara.prescaler         = TIM4_PSC;             /* 預(yù)分頻值,計(jì)數(shù)時(shí)鐘=定時(shí)器時(shí)鐘/(PSC+1) */
    timer_initpara.alignedmode       = TIMER_COUNTER_EDGE;   /* 無(wú)對(duì)齊模式*/
    timer_initpara.counterdirection  = TIMER_COUNTER_UP;     /* 向上計(jì)數(shù) */
    timer_initpara.period            = TIM4_CAR;             /* 自動(dòng)重裝值 */
    timer_initpara.clockdivision     = TIMER_CKDIV_DIV1;     /* 時(shí)鐘分頻,規(guī)定定時(shí)器時(shí)鐘與死區(qū)時(shí)間和數(shù)字濾波采樣時(shí)鐘之間的系數(shù)*/
    timer_initpara.repetitioncounter = 0;                    /* 中斷的產(chǎn)生頻率,計(jì)數(shù)器溢出N+1次后產(chǎn)生中斷*/
    timer_init(TIMER4,&timer_initpara); 
    timer_interrupt_enable(TIMER4,TIMER_INT_UP);   

    timer_enable(TIMER4); 						 
}
3.移植準(zhǔn)備

在GD32的工程下面新建一個(gè)Ethercat文件夾,在Ethercat文件夾下面新建一個(gè)src文件夾和inc文件夾。將源碼中的頭文件(.h文件)都復(fù)制到inc文件夾下面,將源碼中的源文件(.c文件)都復(fù)制到src文件夾下面。

ethercat協(xié)議移植,Ethercat,學(xué)習(xí),單片機(jī),嵌入式硬件

ethercat協(xié)議移植,Ethercat,學(xué)習(xí),單片機(jī),嵌入式硬件

修改文件名字(個(gè)人喜好)將el9800hw.c和el9800.h改為ecatport.c和ecatport.h ,將源碼加入到Keil的工程中。

4.源碼移植
1.修改頭文件名

因?yàn)槲覍⒃创a的文件名字從el9800.h改為了ecatport.h,所以我需要將源碼中調(diào)用el9800.h都改為ecatport.h,好像就兩處。

2.ecatport.c文件修改
1.SPI部分修改

這里面的讀寫函數(shù)與SPI相關(guān)的有三個(gè),RxTxSpiData、SELECT_SPI、DESELECT_SPI。

RxTxSpiData是SPI單字節(jié)讀寫,原先的RxTxSpiData函數(shù)是基于PIC單片機(jī)硬件的,我們將原先的RxTxSpiData函數(shù)刪除掉,通過(guò)宏定義替換為我們自己定義的。

SELECT_SPI和DESELECT_SPI是對(duì)SPI CS引腳進(jìn)行控制,我們也通過(guò)宏定義實(shí)現(xiàn)。

/*-----------------------------------------------------------------------------------------
------
------    SPI defines/macros
------
-----------------------------------------------------------------------------------------*/
#define RxTxSpiData         spi_data_rw
#define SELECT_SPI          gpio_bit_reset(GPIOE, GPIO_PIN_4);  
#define DESELECT_SPI        gpio_bit_set(GPIOE, GPIO_PIN_4);
2.中斷部分

首先修改中斷函數(shù)的寫法,并增加一個(gè)定時(shí)器中斷函數(shù),修改如下

/* 修改前 __attribute__ ((__interrupt__, no_auto_psv))是PIC單片機(jī)的中斷的寫法,在GD32中不需要 */
void __attribute__ ((__interrupt__, no_auto_psv)) EscIsr(void)
{
     PDI_Isr();

    /* reset the interrupt flag */
    ACK_ESC_INT;

}

void __attribute__((__interrupt__, no_auto_psv)) Sync0Isr(void)
{
    Sync0_Isr();

    /* reset the interrupt flag */
    ACK_SYNC0_INT;
}

void __attribute__((__interrupt__, no_auto_psv)) Sync1Isr(void)
{
    Sync1_Isr();

    /* reset the interrupt flag */
    ACK_SYNC1_INT;
}

/*******************************修改后***********************************************/
void EscIsr(void)
{
     PDI_Isr();

    /* reset the interrupt flag */
    ACK_ESC_INT;

}

void Sync0Isr(void)
{
    Sync0_Isr();

    /* reset the interrupt flag */
    ACK_SYNC0_INT;
}

void Sync1Isr(void)
{
    Sync1_Isr();

    /* reset the interrupt flag */
    ACK_SYNC1_INT;
}

void ethercat_timer_isr(void)
{
    ECAT_CheckTimer();
    ACK_TIMER_INT;
}

將函數(shù)通過(guò)宏定義映射一下

/*PDI 映射 */
#define ACK_ESC_INT         exti_interrupt_flag_clear(EXTI_3);
#define EscIsr              EXTI3_IRQHandler
/*Sync0 映射 */
#define ACK_SYNC0_INT      exti_interrupt_flag_clear(EXTI_13)
#define Sync0Isr           EXTI10_15_IRQHandler
/*Sync1 映射 */
#define ACK_SYNC1_INT      exti_interrupt_flag_clear(EXTI_1)
#define Sync1Isr           EXTI1_IRQHandler
/*定時(shí)器 映射 */
#define ethercat_timer_isr TIMER4_IRQHandler
#define ACK_TIMER_INT      timer_interrupt_flag_clear(TIMER4, TIMER_INT_UP)

除了這幾個(gè)中斷,可以看到程序里還用到了全局中斷的使能與失能。也需要宏定義一下

#define DISABLE_GLOBAL_INT      __disable_irq()			
#define ENABLE_GLOBAL_INT       __enable_irq()
3.修改HW_Init()
UINT8 HW_Init(void)
{
    UINT32 intMask;
    sysTick_init();
    nvic_configuration();	
    ethercat_gpio_init();
    bsp_spi3_init();
    do
    {
        intMask = 0x93;
        HW_EscWriteDWord(intMask, ESC_AL_EVENTMASK_OFFSET);
        intMask = 0;
        HW_EscReadDWord(intMask, ESC_AL_EVENTMASK_OFFSET);
    } while (intMask != 0x93);
    intMask = 0x00;
    HW_EscWriteDWord(intMask, ESC_AL_EVENTMASK_OFFSET);
    INIT_ESC_INT;
    INIT_SYNC0_INT;
    INIT_SYNC1_INT;
    INIT_ECAT_TIMER;
    /* enable all interrupts */
    ENABLE_GLOBAL_INT;
    return 0;
}

HW_Init初始化中的有些宏定義我沒(méi)有去實(shí)現(xiàn),直接刪去了。因?yàn)橥庠O(shè)在初始化的時(shí)候已經(jīng)使能,不需要額外進(jìn)行使能了。我只是先了如下幾個(gè)宏定義

#define INIT_ESC_INT       ethercat_pdi_init()
#define INIT_SYNC0_INT     ethercat_sync0_init()
#define INIT_SYNC1_INT     ethercat_sync1_init()
#define INIT_ECAT_TIMER    ethercat_timer_init()

暫時(shí)不管應(yīng)用層邏輯,先編譯一下,看看硬件部分修改是否還有問(wèn)題。

4.報(bào)錯(cuò)修改

提示沒(méi)有 Nop ,我直接把Nop刪除掉了。

提示沒(méi)有定義DISABLE_ESC_INT和ENABLE_ESC_INT,因?yàn)檫@定義要在多個(gè)文件中引用,所以定義到ecatport.h文件中

#define DISABLE_ESC_INT()     exti_interrupt_disable(EXTI_3)
#define ENABLE_ESC_INT()      exti_interrupt_enable(EXTI_3)
3.myapp.c文件修改

這個(gè)文件主要實(shí)現(xiàn)我們的應(yīng)用邏輯。需要修改的函數(shù)有三個(gè)

void APPL_InputMapping(UINT16* pData);
void APPL_OutputMapping(UINT16* pData);
void APPL_Application(void);

函數(shù)APPL_InputMapping是將TPDO數(shù)據(jù)從單片機(jī)中拷貝到ESC中;函數(shù)APPL_OutputMapping是將ESC中的RPDO數(shù)據(jù)拷貝到單片機(jī)的內(nèi)存中。APPL_Application是本地應(yīng)用邏輯,處理APPL_OutputMapping中得到的數(shù)據(jù),打包APPL_InputMapping中需要的數(shù)據(jù)。

修改如下:

/************myapp.h ************/
typedef struct{
  unsigned int  data1;
  unsigned int  data2;
} __attribute__((__packed__)) _tpdo1A00_t;

typedef struct{
  unsigned int  data1;
  unsigned int  data2;
} __attribute__((__packed__)) _rpdo1600_t;

/***************myapp.c ***********/
static volatile _tpdo1A00_t tpdodata;
static volatile _rpdo1600_t rpdodata;

在myapp.h定義了兩個(gè)結(jié)構(gòu)體用來(lái)存放TPDO和RPDO的數(shù)據(jù)。結(jié)構(gòu)體的定義需要和PDO的映射對(duì)應(yīng)。之前配置的時(shí)候我們的TPDO映射了兩個(gè)32位的數(shù),所以這里結(jié)構(gòu)體里也是定義了兩個(gè)32位的元素,另外需要取消字節(jié)對(duì)齊。

void APPL_InputMapping(UINT16* pData)
{
    UINT16 j = 0;
    UINT16 *pTmpData = (UINT16 *)pData;
   for (j = 0; j < sTxPDOassign.u16SubIndex0; j++)
   {
      switch (sTxPDOassign.aEntries[j])
      {
      /* TxPDO 1 */
      case 0x1A00:
         memcpy(pTmpData,(void *)&tpdodata,sizeof(_tpdo1A00_t));
         pTmpData+=sizeof(_tpdo1A00_t);
         break;
      case 0x1A01:
         break;
      default:
        break;
      }
   }
}

APPL_InputMapping參數(shù)中pData就是傳入進(jìn)來(lái)的單片機(jī)本地的內(nèi)存地址,在PDO_InputMappings函數(shù)中會(huì)將該內(nèi)存地址的數(shù)據(jù)拷貝到ESC中,拷貝長(zhǎng)度為總的映射長(zhǎng)度。

TxPDOassign的aEntries中記錄了0x1C13中所包含的對(duì)象字典。因?yàn)槟壳拔覀冎涤成淞?x1A00,所以相當(dāng)于只執(zhí)行了memcpy這句話,將tpdodata的數(shù)據(jù)拷貝到pData的地址中。

如果0x1C13映射了0x1A00、0x1A01,那么在執(zhí)行了memcpy這句話,可以將地址指針移位sizeof(_tpdo1A00_t)個(gè)長(zhǎng)度,在繼續(xù)拷貝0x1A01所對(duì)應(yīng)的TPDO數(shù)據(jù)。

void APPL_OutputMapping(UINT16* pData)
{
    UINT16 j = 0;
    UINT16 *pTmpData = (UINT16 *)pData;
    for (j = 0; j < sRxPDOassign.u16SubIndex0; j++)
    {
        switch (sRxPDOassign.aEntries[j])
        {
        /* RxPDO 1 */
        case 0x1600:
            memcpy(&rpdodata,pTmpData,sizeof(_rpdo1600_t));
            pTmpData = pTmpData+sizeof(_rpdo1600_t);
            break;
        default:
            break;
        }
    }
}

APPL_OutputMapping的修改與APPL_InputMapping的思路差不多,不同的是memcpy的方向,是將傳入地址的數(shù)據(jù)拷貝到rpdodata中。

void APPL_Application(void)
{

}

APPL_Application暫時(shí)沒(méi)有修改,因?yàn)槭呛?jiǎn)單的測(cè)試程序,我只通過(guò)debug觀察rpdodata和tpdodata這兩個(gè)變量就可以知道通信是否正常, 沒(méi)有別的應(yīng)用邏輯。

移植主要需要修改的源碼有兩個(gè)文件一個(gè)是myapp.c這個(gè)是SSC根據(jù)excel表格自動(dòng)生成的文件,每個(gè)人的excel表格的名字不一樣,所以文件名也不一樣。另一個(gè)文件就是ecatport.c。其中myapp.c是我們實(shí)現(xiàn)應(yīng)用邏輯的文件,而ecatport.c是實(shí)現(xiàn)我們硬件接口的地方。

修改 static UINT8 RxTxSpiData(UINT8 MosiByte) 這個(gè)是EL9800的SPI收發(fā)接口,將它改為我們自己的

5.其他

32位的單片機(jī)還需要修改ecat_def.h中的兩個(gè)宏定義,改為如下:

/** 
OBJ_DWORD_ALIGN: Shall be set if the object structures are not Byte aligned and 32bit entries are implicitly padded to even 32bit memory addresses. */
#ifndef OBJ_DWORD_ALIGN
#define OBJ_DWORD_ALIGN                           1
#endif

/** 
OBJ_WORD_ALIGN: Shall be set if the object structures are not Byte aligned and 16bit entries are implicitly padded to even 16bit memory addresses. */
#ifndef OBJ_WORD_ALIGN
#define OBJ_WORD_ALIGN                            0
#endif

如果不修改,在初始化狀態(tài)跳轉(zhuǎn)的時(shí)候可能會(huì)報(bào)0x001E或0x001D的錯(cuò)誤。該錯(cuò)誤是因?yàn)镃heckSmSettings函數(shù)在檢查郵箱配置的時(shí)候發(fā)現(xiàn)ESC中配置的SM2或者SM3的長(zhǎng)度與從站代碼中的nPdInputSize變量或nPdOutputSize變量的值不相同所返回的。理論上主站在配置ESC的SM2和SM3長(zhǎng)度的時(shí)候是先讀取從站代碼中的TPDO和RPDO的映射內(nèi)容,然后根據(jù)映射內(nèi)容來(lái)計(jì)算映射的數(shù)據(jù)長(zhǎng)度,再將所計(jì)算的長(zhǎng)度填寫到ESC中。而從站代碼的nPdInputSize和nPdOutputSize這兩個(gè)變量的值也是根據(jù)TPDO和RPDO的映射內(nèi)容計(jì)算得到的,所以ESC所配置的值應(yīng)該和代碼中的值一樣才對(duì)。而在調(diào)用APPL_GenerateMapping獲取nPdInputSize和nPdOutputSize的值的時(shí)候會(huì)調(diào)用OBJ_GetEntryOffset 來(lái)計(jì)算結(jié)構(gòu)體中元素的地址的偏移量,如果OBJ_DWORD_ALIGN = 0 ,OBJ_WORD_ALIGN =1就會(huì)按照16位對(duì)齊來(lái)計(jì)算,而GD32是32位對(duì)齊的,所以計(jì)算后得到的地址是錯(cuò)誤的,所得出的長(zhǎng)度也是錯(cuò)誤的。因此要設(shè)置OBJ_DWORD_ALIGN = 1 ,OBJ_WORD_ALIGN =0。

UINT16 APPL_GenerateMapping(UINT16 *pInputSize,UINT16 *pOutputSize)
{
    .....
      pPDOEntry = (UINT32 *)((UINT16 *)pPDO->pVarPtr + (OBJ_GetEntryOffset((PDOEntryCnt+1),pPDO)>>3)/2);    
    .....
}

需要注意的是OBJ_GetEntryOffset得到的值單位是bit,右移3位相當(dāng)于除以8,轉(zhuǎn)換位字節(jié);后面又除了2是因?yàn)榍懊娴膒PDO->pVarPtr被強(qiáng)制轉(zhuǎn)換位了(UINT16 *)類型,那么pPDO->pVarPtr+1 就相當(dāng)于跨了兩個(gè)字節(jié)。

移植工程鏈接:https://github.com/IJustLoveMyself/csdn-example文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-520250.html

到了這里,關(guān)于Ethercat學(xué)習(xí)-從站源碼移植的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • EtherCAT主站源碼 基于STM32F407和STM32H743兩款芯片 通過(guò)移植開源SOME主站代碼,使兩款芯片具有EtherCAT主站功能,支持DC同步功能

    EtherCAT主站源碼 基于STM32F407和STM32H743兩款芯片 通過(guò)移植開源SOME主站代碼,使兩款芯片具有EtherCAT主站功能,支持DC同步功能

    EtherCAT主站源碼基于STM32F407和STM32H743兩款芯片,通過(guò)移植開源SOME主站代碼,使兩款芯片具有EtherCAT主站功能,支持DC同步功能??芍С謪R川IS620N、松下A5B/A6B、歐姆龍G5系列、埃斯頓ProNet、邁信EP3E、臺(tái)達(dá)A2-E,偉創(chuàng)SD700這幾款EtherCAT總線伺服。支持的這些驅(qū)動(dòng)器可以混用,主站自動(dòng)

    2024年02月04日
    瀏覽(22)
  • DEVICENET轉(zhuǎn)ETHERCAT網(wǎng)關(guān)連接ethercat通訊協(xié)議詳細(xì)解析

    DEVICENET轉(zhuǎn)ETHERCAT網(wǎng)關(guān)連接ethercat通訊協(xié)議詳細(xì)解析

    你有沒(méi)有遇到過(guò)生產(chǎn)管理系統(tǒng)中,設(shè)備之間的通訊問(wèn)題??jī)蓚€(gè)不同協(xié)議的設(shè)備進(jìn)行通訊,是不是很麻煩?今天,我們?yōu)榇蠹医榻B一款神奇的產(chǎn)品,能夠?qū)⒉煌瑓f(xié)議的設(shè)備進(jìn)行連接,讓現(xiàn)場(chǎng)的數(shù)據(jù)交換不再困擾! 遠(yuǎn)創(chuàng)智控YC-ECT-DNT是一款DEVICENET從站功能的通訊網(wǎng)關(guān),可以將DEVI

    2024年02月13日
    瀏覽(17)
  • PROFINET轉(zhuǎn)ETHERCAT協(xié)議網(wǎng)關(guān)三菱plc支持ethercat嗎

    PROFINET轉(zhuǎn)ETHERCAT協(xié)議網(wǎng)關(guān)三菱plc支持ethercat嗎

    捷米特JM–ECAT-PN是自主研發(fā)的一款 PROFINET 從站功能的通訊網(wǎng)關(guān)。該產(chǎn)品主要功能是將 PROFINET 網(wǎng)絡(luò)和 ETHERCAT 網(wǎng)絡(luò)連接起來(lái)。 捷米特JM-ECAT-PN連接到 PROFINET 總線中做為從站使用,連接到 ETHERCAT 總線中做為從站使用。 3.技術(shù)參數(shù) PROFINET 技術(shù)參數(shù) 網(wǎng)關(guān)做為 PROFINET 網(wǎng)絡(luò)的 Device 設(shè)備

    2024年02月14日
    瀏覽(24)
  • EtherCAT 開源主站 IGH 在 linux 開發(fā)板的移植和伺服通信測(cè)試

    EtherCAT 開源主站 IGH 在 linux 開發(fā)板的移植和伺服通信測(cè)試

    手邊有一套正點(diǎn)原子linux開發(fā)板imax6ul,一直在吃灰,周末業(yè)余時(shí)間無(wú)聊,把EtherCAT的開源IGH主站移植到開發(fā)板上玩玩兒,搞點(diǎn)事情做。順便學(xué)習(xí)研究下EtherCAT總線協(xié)議及其對(duì)伺服驅(qū)動(dòng)器的運(yùn)動(dòng)控制過(guò)程。實(shí)驗(yàn)很有意思,這里總結(jié)下實(shí)驗(yàn)過(guò)程,分享給有需要的小伙伴。 igh EtherC

    2024年04月29日
    瀏覽(322)
  • IGH(EtherCAT開源主站)移植到beaglebone black(AM3358)開發(fā)板上

    IGH(EtherCAT開源主站)移植到beaglebone black(AM3358)開發(fā)板上

    本文是在已經(jīng)打上xenomai補(bǔ)丁的linux-3.8.13-bone86內(nèi)核源碼上進(jìn)行的,參看使用xenomai與linux內(nèi)核源碼交叉編譯,移植到beaglebone black(AM3358)開發(fā)板上 igh軟件下載地址: IgH EtherCAT Master for Linux (etherlab.org) 將打入xenomai補(bǔ)丁,寫入sd卡的系統(tǒng)的sd卡掛載(插入電腦,自動(dòng)掛載)到ubuntu系統(tǒng)

    2024年02月11日
    瀏覽(23)
  • Modbus tcp轉(zhuǎn)ETHERCAT網(wǎng)關(guān)modbus tcp/ip協(xié)議

    Modbus tcp轉(zhuǎn)ETHERCAT網(wǎng)關(guān)modbus tcp/ip協(xié)議

    捷米JM-ECT-TCP網(wǎng)關(guān)能夠連接到Modbus tcp總線和ETHERCAT總線中,實(shí)現(xiàn)兩種不同協(xié)議設(shè)備之間的通訊。這個(gè)網(wǎng)關(guān)能夠大大提高工業(yè)生產(chǎn)的效率和生產(chǎn)效益,讓生產(chǎn)變得更加智能化。捷米JM-ECT-TCP 是自主研發(fā)的一款 ETHERCAT?從站功能的通訊網(wǎng)關(guān)。該產(chǎn)品主要功能是將 ETHERCAT?網(wǎng)絡(luò)和 MODB

    2024年02月15日
    瀏覽(102)
  • ?EtherNet/IP 庫(kù)卡機(jī)器人和EtherCAT倍福PLC總線協(xié)議連接案例?

    ?EtherNet/IP 庫(kù)卡機(jī)器人和EtherCAT倍福PLC總線協(xié)議連接案例?

    EtherNet/IP 是一種適合于工業(yè)環(huán)境和對(duì)時(shí)間要求比較苛刻的應(yīng)用的網(wǎng)絡(luò)。而遠(yuǎn)創(chuàng)智控YC-EIPM-ECT通訊網(wǎng)關(guān),是一款自主研發(fā)的EtherNet/IP 從站功能的通訊網(wǎng)關(guān)。它不僅可以實(shí)現(xiàn)EtherNet/IP 和EtherCAT的無(wú)縫連接,還可以將EtherNet/IP 作為從站連接到EtherCAT總線中。此外,它還具有高度集成、

    2024年02月06日
    瀏覽(26)
  • Ethercat學(xué)習(xí)-GD32以太網(wǎng)學(xué)習(xí)

    Ethercat學(xué)習(xí)-GD32以太網(wǎng)學(xué)習(xí)

    1、GD32F4以太網(wǎng)簡(jiǎn)介 GD32F4系列以太網(wǎng)模塊包含10/100Mbps以太網(wǎng)MAC,數(shù)據(jù)的收發(fā)都通過(guò)DMA進(jìn)行操作,支持MII(媒體獨(dú)立接口)與RMII(簡(jiǎn)化的媒體獨(dú)立接口)兩種與物理層(PHY)通訊的標(biāo)準(zhǔn)接口。 2、以太網(wǎng)??驁D簡(jiǎn)介 ? 以太網(wǎng)需要外接一個(gè)PHY(以太網(wǎng)芯片)才可以進(jìn)行通信。與PH

    2024年02月06日
    瀏覽(16)
  • ETHERCAT轉(zhuǎn)ETHERCAT網(wǎng)關(guān)西門子為什么不支持ethercat兩個(gè)ETHERCAT設(shè)備互聯(lián)

    ETHERCAT轉(zhuǎn)ETHERCAT網(wǎng)關(guān)西門子為什么不支持ethercat兩個(gè)ETHERCAT設(shè)備互聯(lián)

    1.1 產(chǎn)品功能 遠(yuǎn)創(chuàng)智控YC-ECT-ECT是自主研發(fā)的一款ETHERCAT從站功能的通訊網(wǎng)關(guān)。該產(chǎn)品主要功能是將2個(gè)ETHERCAT網(wǎng)絡(luò)連接起來(lái)。 本網(wǎng)關(guān)連接到ETHERCAT總線中做為從站使用。 1.2 技術(shù)參數(shù) 1.2.1 遠(yuǎn)創(chuàng)智控YC-ECT-ECT技術(shù)參數(shù) ● 網(wǎng)關(guān)做為ETHERCAT網(wǎng)絡(luò)的從站,可以連接倍福、歐姆龍、基恩士等

    2024年02月16日
    瀏覽(17)
  • EtherCAT轉(zhuǎn)TCP/IP網(wǎng)關(guān)ethercat最大通訊距離

    EtherCAT轉(zhuǎn)TCP/IP網(wǎng)關(guān)ethercat最大通訊距離

    天??!你們聽說(shuō)了嗎?數(shù)據(jù)互聯(lián)互通問(wèn)題終于迎來(lái)了突破性進(jìn)展!作為生產(chǎn)管理系統(tǒng)的關(guān)鍵部分,數(shù)據(jù)互聯(lián)互通一直是個(gè)大問(wèn)題。然而,ETHERCAT和TCP/IP是兩個(gè)不同的協(xié)議,它們之間的通訊一直是個(gè)大 問(wèn)題。但是,現(xiàn)在有一款神奇的產(chǎn)品出現(xiàn)了,它叫做遠(yuǎn)創(chuàng)智控YC-ECT-TCPIP,它可

    2024年02月13日
    瀏覽(19)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包