amoBBS 阿莫电子论坛

 找回密码
 注册
搜索
bottom↓
查看: 1011|回复: 30

EasyControl ethercat总线 精简主从站方案

[复制链接]
发表于 2018-10-29 13:46:27 | 显示全部楼层 |阅读模式
EasyControl ETHERCAT总线 精简主从站方案

测试视频:http://v.youku.com/v_show/id_XMz ... j.8428770.3416059.1
按下按钮,电机正转(脉冲输出让灯亮); 再按一下,电机停下; 再按一下,电机反转; 再按一下,电机停下。     
     
stm32h743做ethercat主站,有1个(xmc4300+ep4ce6e22)ethercat 402从站。

stm32h743是ST的cortex-m7的400M时钟,1M的RAM的32位MCU。
NUCLEO-H743ZI是ST官方的基于stm32h743的开发板。

处理周期1ms,ethercat总线用是的csp模式周期位置同步。

EtherCat主站代码是SOEM。
EtherCat主站主要参考https://github.com/sittner/linuxcnc-ethercat

stm32h743开发IDE:KEIL5.25。   
MCU的开发IDE:https://github.com/gnu-mcu-eclip ... p.packages/releases
FPGA的开发IDE:https://www.altera.com.cn/downloads/download-center.html

处理过程:
1)写一个主站配置的xml文件。
2)PC上的一个软件对xml文件处理自动生成ethercat_conf.c与ethercat_var.h文件。
3)ethercat_conf.c与ethercat_var.h文件放到stm32h743的项目中。

ethercat_var.h是通信变量定义。

主站main部分代码:
int main(void)
{
  /* USER CODE BEGIN 1 */
uint64_t cnt = 0;
int process_state = -10;
int key_cnt = 0;
double delta=0;
  /* USER CODE END 1 */

  /* MPU Configuration----------------------------------------------------------*/
  MPU_Config();

  /* Enable I-Cache-------------------------------------------------------------*/
  SCB_EnableICache();

  /* Enable D-Cache-------------------------------------------------------------*/
  SCB_EnableDCache();

  /* MCU Configuration----------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_USART3_UART_Init();

  MX_TIM2_Init();
  /* USER CODE BEGIN 2 */

  HAL_TIM_Base_Start(&htim2);

  HAL_GPIO_TogglePin(GPIOB, LD2_Pin);

  cnt = get_clock();
  while(get_clock()<cnt+5000000000);

  ethernet_init();

  memset(0x24000000, 0, 512 * 1024);

  HAL_GPIO_TogglePin(GPIOB, LD3_Pin);

  cnt = get_clock();
  while(get_clock()<cnt+1000000000);

  rtapi_app_main_ethercat();

  HAL_GPIO_WritePin(GPIOB,LD2_Pin,0);
  HAL_GPIO_WritePin(GPIOB,LD3_Pin,0);

  *ethercat_0_1_0_cmd_SwitchOn = 1;
  *ethercat_0_1_0_cmd_EnableVoltage = 1;
  *ethercat_0_1_0_cmd__QuickStop = 1;
  *ethercat_0_1_0_cmd_EnableOperation = 1;
  *ethercat_0_1_0_cmd_FaultReset = 0;
  *ethercat_0_1_STEP_LEN = 4;
  *ethercat_0_1_STEP_DIR = 10;
  *ethercat_0_1_IO_OUT_POLARITY = 0x14000;
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */

  while(1){
   rtapi_wait();

   lcec_write_all(0,1000000);
   lcec_read_all(0,1000000);

   if(process_state<0) process_state++;
   if(process_state==-1){
      *ethercat_0_1_0_target = *ethercat_0_1_0_position;
   }

   HAL_GPIO_WritePin(GPIOB,LD2_Pin,process_state&1);
   HAL_GPIO_WritePin(GPIOB,LD3_Pin,(process_state>>1)&1);

   if(HAL_GPIO_ReadPin(USER_Btn_GPIO_Port,USER_Btn_Pin)){
   if(key_cnt<=100)
   key_cnt++;
   if(key_cnt==100){
   process_state++;
   process_state = process_state&3;
   }
   }else
   key_cnt = 0;

   delta = 0;
   if(process_state==1) delta = 0.001;
   if(process_state==3) delta = -0.001;

   *ethercat_0_1_0_target += delta;

  }

  /* USER CODE END 3 */
}

ethercat_0_1_0_*变量在ethercat_var.h中自动定义。


XML文件:
<masters>
    <master idx="0" appTimePeriod="500000" refClockSyncCycles="5">
        <slave idx="1" type="generic" vid="00000002" pid="1a5f3052" configPdos="false">
            <sdoConfig idx="f030" subIdx="complete">
                <sdoDataRaw data="06 00 00 98 21 00 00 98 21 00 00 98 21 00 00 98 21 00 00 98 21 00 00 98 21 00"/>
            </sdoConfig>
            <sdoConfig idx="6060" subIdx="0">
                <sdoDataRaw data="08"/>
            </sdoConfig>
            <sdoConfig idx="6860" subIdx="0">
                <sdoDataRaw data="08"/>
            </sdoConfig>
            <sdoConfig idx="7060" subIdx="0">
                <sdoDataRaw data="08"/>
            </sdoConfig>
            <sdoConfig idx="7860" subIdx="0">
                <sdoDataRaw data="08"/>
            </sdoConfig>
            <sdoConfig idx="8060" subIdx="0">
                <sdoDataRaw data="08"/>
            </sdoConfig>
            <sdoConfig idx="8860" subIdx="0">
                <sdoDataRaw data="08"/>
            </sdoConfig>
            <sdoConfig idx="6040" subIdx="0">
                <sdoDataRaw data="80 00"/>
            </sdoConfig>
            <sdoConfig idx="6840" subIdx="0">
                <sdoDataRaw data="80 00"/>
            </sdoConfig>
            <sdoConfig idx="7040" subIdx="0">
                <sdoDataRaw data="80 00"/>
            </sdoConfig>
            <sdoConfig idx="7840" subIdx="0">
                <sdoDataRaw data="80 00"/>
            </sdoConfig>
            <sdoConfig idx="8040" subIdx="0">
                <sdoDataRaw data="80 00"/>
            </sdoConfig>
            <sdoConfig idx="8840" subIdx="0">
                <sdoDataRaw data="80 00"/>
            </sdoConfig>
            <sdoConfig idx="6510" subIdx="1">
                <sdoDataRaw data="00 00 00 00"/>
            </sdoConfig>
            <sdoConfig idx="6080" subIdx="0">
                <sdoDataRaw data="00 26 02 00"/>
            </sdoConfig>
            <sdoConfig idx="60c5" subIdx="0">
                <sdoDataRaw data="00 7c 15 00"/>
            </sdoConfig>
            <sdoConfig idx="6880" subIdx="0">
                <sdoDataRaw data="00 26 02 00"/>
            </sdoConfig>
            <sdoConfig idx="68c5" subIdx="0">
                <sdoDataRaw data="00 7c 15 00"/>
            </sdoConfig>
            <sdoConfig idx="7080" subIdx="0">
                <sdoDataRaw data="00 26 02 00"/>
            </sdoConfig>
            <sdoConfig idx="70c5" subIdx="0">
                <sdoDataRaw data="00 7c 15 00"/>
            </sdoConfig>
            <sdoConfig idx="7880" subIdx="0">
                <sdoDataRaw data="00 26 02 00"/>
            </sdoConfig>
            <sdoConfig idx="78c5" subIdx="0">
                <sdoDataRaw data="00 7c 15 00"/>
            </sdoConfig>
            <sdoConfig idx="8080" subIdx="0">
                <sdoDataRaw data="00 26 02 00"/>
            </sdoConfig>
            <sdoConfig idx="80c5" subIdx="0">
                <sdoDataRaw data="00 7c 15 00"/>
            </sdoConfig>
            <sdoConfig idx="8880" subIdx="0">
                <sdoDataRaw data="00 26 02 00"/>
            </sdoConfig>
            <sdoConfig idx="88c5" subIdx="0">
                <sdoDataRaw data="00 7c 15 00"/>
            </sdoConfig>     
                                                                                               
            <dcConf assignActivate="300" sync0Cycle="*1" sync0Shift="000"/>
            <syncManager idx="0" dir="out"/>
            <syncManager idx="1" dir="in"/>
            <syncManager idx="2" dir="out">
                <pdo idx="1601">
                    <pdoEntry idx="6040" subIdx="00" bitLen="16" halType="complex">
                        <complexEntry bitLen="1" halPin="0-cmd-SwitchOn" halType="bit"/>
                        <complexEntry bitLen="1" halPin="0-cmd-EnableVoltage" halType="bit"/>
                        <complexEntry bitLen="1" halPin="0-cmd-/QuickStop" halType="bit"/>
                        <complexEntry bitLen="1" halPin="0-cmd-EnableOperation" halType="bit"/>
                        <complexEntry bitLen="1" halPin="0-cmd-NewSetpoint" halType="bit"/>
                        <complexEntry bitLen="1" halPin="0-cmd-ChangeSetImmediatly" halType="bit"/>
                        <complexEntry bitLen="1" halPin="0-cmd-RelativPos" halType="bit"/>
                        <complexEntry bitLen="1" halPin="0-cmd-FaultReset" halType="bit"/>
                    </pdoEntry>
                    <pdoEntry idx="607a" subIdx="00" bitLen="32" halPin="0-target" halType="float" scale="2560.0" offset="0"/>
                    <pdoEntry idx="60FE" subIdx="01" bitLen="32" halType="complex">
                        <complexEntry bitLen="1" halPin="O00" halType="bit"/>
                        <complexEntry bitLen="1" halPin="O01" halType="bit"/>
                        <complexEntry bitLen="1" halPin="O02" halType="bit"/>
                        <complexEntry bitLen="1" halPin="O03" halType="bit"/>
                        <complexEntry bitLen="1" halPin="O04" halType="bit"/>
                        <complexEntry bitLen="1" halPin="O05" halType="bit"/>
                        <complexEntry bitLen="1" halPin="O06" halType="bit"/>
                        <complexEntry bitLen="1" halPin="O07" halType="bit"/>
                        <complexEntry bitLen="1" halPin="O08" halType="bit"/>
                        <complexEntry bitLen="1" halPin="O09" halType="bit"/>
                        <complexEntry bitLen="1" halPin="O10" halType="bit"/>
                        <complexEntry bitLen="1" halPin="O11" halType="bit"/>
                        <complexEntry bitLen="1" halPin="O12" halType="bit"/>
                        <complexEntry bitLen="1" halPin="O13" halType="bit"/>
                        <complexEntry bitLen="1" halPin="O14" halType="bit"/>
                        <complexEntry bitLen="1" halPin="O15" halType="bit"/>
                        <complexEntry bitLen="1" halPin="O16" halType="bit"/>
                        <complexEntry bitLen="1" halPin="O17" halType="bit"/>
                        <complexEntry bitLen="1" halPin="O18" halType="bit"/>
                        <complexEntry bitLen="1" halPin="O19" halType="bit"/>
                        <complexEntry bitLen="1" halPin="O20" halType="bit"/>
                        <complexEntry bitLen="1" halPin="O21" halType="bit"/>
                        <complexEntry bitLen="1" halPin="O22" halType="bit"/>
                        <complexEntry bitLen="1" halPin="O23" halType="bit"/>
                        <complexEntry bitLen="1" halPin="O24" halType="bit"/>
                    </pdoEntry>
                </pdo>
                <pdo idx="1611">
                    <pdoEntry idx="6840" subIdx="00" bitLen="16" halType="complex">
                        <complexEntry bitLen="1" halPin="1-cmd-SwitchOn" halType="bit"/>
                        <complexEntry bitLen="1" halPin="1-cmd-EnableVoltage" halType="bit"/>
                        <complexEntry bitLen="1" halPin="1-cmd-/QuickStop" halType="bit"/>
                        <complexEntry bitLen="1" halPin="1-cmd-EnableOperation" halType="bit"/>
                        <complexEntry bitLen="1" halPin="1-cmd-NewSetpoint" halType="bit"/>
                        <complexEntry bitLen="1" halPin="1-cmd-ChangeSetImmediatly" halType="bit"/>
                        <complexEntry bitLen="1" halPin="1-cmd-RelativPos" halType="bit"/>
                        <complexEntry bitLen="1" halPin="1-cmd-FaultReset" halType="bit"/>
                    </pdoEntry>
                    <pdoEntry idx="687a" subIdx="00" bitLen="32" halPin="1-target" halType="float" scale="2560.0" offset="0"/>
                    <pdoEntry idx="68FE" subIdx="01" bitLen="32" halPin="IO_OUT_POLARITY" halType="u32"/>
                </pdo>
                <pdo idx="1621">
                    <pdoEntry idx="7040" subIdx="00" bitLen="16" halType="complex">
                        <complexEntry bitLen="1" halPin="2-cmd-SwitchOn" halType="bit"/>
                        <complexEntry bitLen="1" halPin="2-cmd-EnableVoltage" halType="bit"/>
                        <complexEntry bitLen="1" halPin="2-cmd-/QuickStop" halType="bit"/>
                        <complexEntry bitLen="1" halPin="2-cmd-EnableOperation" halType="bit"/>
                        <complexEntry bitLen="1" halPin="2-cmd-NewSetpoint" halType="bit"/>
                        <complexEntry bitLen="1" halPin="2-cmd-ChangeSetImmediatly" halType="bit"/>
                        <complexEntry bitLen="1" halPin="2-cmd-RelativPos" halType="bit"/>
                        <complexEntry bitLen="1" halPin="2-cmd-FaultReset" halType="bit"/>
                    </pdoEntry>
                    <pdoEntry idx="707a" subIdx="00" bitLen="32" halPin="2-target" halType="float" scale="2560.0" offset="0"/>
                    <pdoEntry idx="70FE" subIdx="01" bitLen="32" halType="complex">
                        <complexEntry bitLen="16" halPin="PWM_CYCLE" halType="u32"/>
                        <complexEntry bitLen="16" halPin="PWM_DUTY" halType="u32"/>
                    </pdoEntry>
                </pdo>
                <pdo idx="1631">
                    <pdoEntry idx="7840" subIdx="00" bitLen="16" halType="complex">
                        <complexEntry bitLen="1" halPin="3-cmd-SwitchOn" halType="bit"/>
                        <complexEntry bitLen="1" halPin="3-cmd-EnableVoltage" halType="bit"/>
                        <complexEntry bitLen="1" halPin="3-cmd-/QuickStop" halType="bit"/>
                        <complexEntry bitLen="1" halPin="3-cmd-EnableOperation" halType="bit"/>
                        <complexEntry bitLen="1" halPin="3-cmd-NewSetpoint" halType="bit"/>
                        <complexEntry bitLen="1" halPin="3-cmd-ChangeSetImmediatly" halType="bit"/>
                        <complexEntry bitLen="1" halPin="3-cmd-RelativPos" halType="bit"/>
                        <complexEntry bitLen="1" halPin="3-cmd-FaultReset" halType="bit"/>
                    </pdoEntry>
                    <pdoEntry idx="787a" subIdx="00" bitLen="32" halPin="3-target" halType="float" scale="2560.0" offset="0"/>
                    <pdoEntry idx="78FE" subIdx="01" bitLen="32" halPin="IO_IN_POLARITY0" halType="u32"/>
                </pdo>
                <pdo idx="1641">
                    <pdoEntry idx="8040" subIdx="00" bitLen="16" halType="complex">
                        <complexEntry bitLen="1" halPin="4-cmd-SwitchOn" halType="bit"/>
                        <complexEntry bitLen="1" halPin="4-cmd-EnableVoltage" halType="bit"/>
                        <complexEntry bitLen="1" halPin="4-cmd-/QuickStop" halType="bit"/>
                        <complexEntry bitLen="1" halPin="4-cmd-EnableOperation" halType="bit"/>
                        <complexEntry bitLen="1" halPin="4-cmd-NewSetpoint" halType="bit"/>
                        <complexEntry bitLen="1" halPin="4-cmd-ChangeSetImmediatly" halType="bit"/>
                        <complexEntry bitLen="1" halPin="4-cmd-RelativPos" halType="bit"/>
                        <complexEntry bitLen="1" halPin="4-cmd-FaultReset" halType="bit"/>
                    </pdoEntry>
                    <pdoEntry idx="807a" subIdx="00" bitLen="32" halPin="4-target" halType="float" scale="2560.0" offset="0"/>
                    <pdoEntry idx="80FE" subIdx="01" bitLen="32" halPin="IO_IN_POLARITY1" halType="u32"/>
                </pdo>
                <pdo idx="1651">
                    <pdoEntry idx="8840" subIdx="00" bitLen="16" halType="complex">
                        <complexEntry bitLen="1" halPin="5-cmd-SwitchOn" halType="bit"/>
                        <complexEntry bitLen="1" halPin="5-cmd-EnableVoltage" halType="bit"/>
                        <complexEntry bitLen="1" halPin="5-cmd-/QuickStop" halType="bit"/>
                        <complexEntry bitLen="1" halPin="5-cmd-EnableOperation" halType="bit"/>
                        <complexEntry bitLen="1" halPin="5-cmd-NewSetpoint" halType="bit"/>
                        <complexEntry bitLen="1" halPin="5-cmd-ChangeSetImmediatly" halType="bit"/>
                        <complexEntry bitLen="1" halPin="5-cmd-RelativPos" halType="bit"/>
                        <complexEntry bitLen="1" halPin="5-cmd-FaultReset" halType="bit"/>
                    </pdoEntry>
                    <pdoEntry idx="887a" subIdx="00" bitLen="32" halPin="5-target" halType="float" scale="2560.0" offset="0"/>
                    <pdoEntry idx="88FE" subIdx="01" bitLen="32" halType="complex">
                        <complexEntry bitLen="16" halPin="STEP_LEN" halType="u32"/>
                        <complexEntry bitLen="16" halPin="STEP_DIR" halType="u32"/>
                    </pdoEntry>
                </pdo>
            </syncManager>
            <syncManager idx="3" dir="in">
                <pdo idx="1a01">
                    <pdoEntry idx="6041" subIdx="00" bitLen="16" halType="complex">
                        <complexEntry bitLen="1" halPin="0-stat-ReadyToSwitchOn" halType="bit"/>
                        <complexEntry bitLen="1" halPin="0-stat-SwitchOn" halType="bit"/>
                        <complexEntry bitLen="1" halPin="0-stat-OperationEnable" halType="bit"/>
                        <complexEntry bitLen="1" halPin="0-stat-Fault" halType="bit"/>
                        <complexEntry bitLen="1" halPin="0-stat-VoltageEnabled" halType="bit"/>
                        <complexEntry bitLen="1" halPin="0-stat-QuickStop" halType="bit"/>
                        <complexEntry bitLen="1" halPin="0-stat-SwitchOnDisable" halType="bit"/>
                        <complexEntry bitLen="1" halPin="0-stat-Warning" halType="bit"/>
                        <complexEntry bitLen="1" halPin="0-stat-HaltRequestActive" halType="bit"/>
                        <complexEntry bitLen="1" halPin="0-stat-Remote" halType="bit"/>
                        <complexEntry bitLen="1" halPin="0-stat-TargetIsReached" halType="bit"/>
                        <complexEntry bitLen="1" halPin="0-stat-bit11" halType="bit"/>
                        <complexEntry bitLen="1" halPin="0-stat-SetpointAck" halType="bit"/>
                        <complexEntry bitLen="1" halPin="0-stat-x_err" halType="bit"/>
                    </pdoEntry>
                    <pdoEntry idx="6064" subIdx="00" bitLen="32" halPin="0-position" halType="float" scale="0.000390625" offset="0"/>
                    <pdoEntry idx="60FD" subIdx="00" bitLen="32" halType="complex">
                        <complexEntry bitLen="1" halPin="I00" halType="bit"/>
                        <complexEntry bitLen="1" halPin="I01" halType="bit"/>
                        <complexEntry bitLen="1" halPin="I02" halType="bit"/>
                        <complexEntry bitLen="1" halPin="I03" halType="bit"/>
                        <complexEntry bitLen="1" halPin="I04" halType="bit"/>
                        <complexEntry bitLen="1" halPin="I05" halType="bit"/>
                        <complexEntry bitLen="1" halPin="I06" halType="bit"/>
                        <complexEntry bitLen="1" halPin="I07" halType="bit"/>
                        <complexEntry bitLen="1" halPin="I08" halType="bit"/>
                        <complexEntry bitLen="1" halPin="I09" halType="bit"/>
                        <complexEntry bitLen="1" halPin="I10" halType="bit"/>
                        <complexEntry bitLen="1" halPin="I11" halType="bit"/>
                        <complexEntry bitLen="1" halPin="I12" halType="bit"/>
                        <complexEntry bitLen="1" halPin="I13" halType="bit"/>
                        <complexEntry bitLen="1" halPin="I14" halType="bit"/>
                        <complexEntry bitLen="1" halPin="I15" halType="bit"/>
                        <complexEntry bitLen="1" halPin="I16" halType="bit"/>
                        <complexEntry bitLen="1" halPin="I17" halType="bit"/>
                        <complexEntry bitLen="1" halPin="I18" halType="bit"/>
                        <complexEntry bitLen="1" halPin="I19" halType="bit"/>
                        <complexEntry bitLen="1" halPin="I20" halType="bit"/>
                        <complexEntry bitLen="1" halPin="I21" halType="bit"/>
                        <complexEntry bitLen="1" halPin="I22" halType="bit"/>
                        <complexEntry bitLen="1" halPin="I23" halType="bit"/>
                        <complexEntry bitLen="1" halPin="I24" halType="bit"/>
                        <complexEntry bitLen="1" halPin="I25" halType="bit"/>
                        <complexEntry bitLen="1" halPin="I26" halType="bit"/>
                        <complexEntry bitLen="1" halPin="I27" halType="bit"/>
                        <complexEntry bitLen="1" halPin="I28" halType="bit"/>
                        <complexEntry bitLen="1" halPin="I29" halType="bit"/>
                        <complexEntry bitLen="1" halPin="I30" halType="bit"/>
                        <complexEntry bitLen="1" halPin="I31" halType="bit"/>
                    </pdoEntry>
                </pdo>
                <pdo idx="1a11">
                    <pdoEntry idx="6841" subIdx="00" bitLen="16" halType="complex">
                        <complexEntry bitLen="1" halPin="1-stat-ReadyToSwitchOn" halType="bit"/>
                        <complexEntry bitLen="1" halPin="1-stat-SwitchOn" halType="bit"/>
                        <complexEntry bitLen="1" halPin="1-stat-OperationEnable" halType="bit"/>
                        <complexEntry bitLen="1" halPin="1-stat-Fault" halType="bit"/>
                        <complexEntry bitLen="1" halPin="1-stat-VoltageEnabled" halType="bit"/>
                        <complexEntry bitLen="1" halPin="1-stat-QuickStop" halType="bit"/>
                        <complexEntry bitLen="1" halPin="1-stat-SwitchOnDisable" halType="bit"/>
                        <complexEntry bitLen="1" halPin="1-stat-Warning" halType="bit"/>
                        <complexEntry bitLen="1" halPin="1-stat-HaltRequestActive" halType="bit"/>
                        <complexEntry bitLen="1" halPin="1-stat-Remote" halType="bit"/>
                        <complexEntry bitLen="1" halPin="1-stat-TargetIsReached" halType="bit"/>
                        <complexEntry bitLen="1" halPin="1-stat-bit11" halType="bit"/>
                        <complexEntry bitLen="1" halPin="1-stat-SetpointAck" halType="bit"/>
                        <complexEntry bitLen="1" halPin="1-stat-x_err" halType="bit"/>
                    </pdoEntry>
                    <pdoEntry idx="6864" subIdx="00" bitLen="32" halPin="1-position" halType="float" scale="0.000390625" offset="0"/>
                    <pdoEntry idx="68FD" subIdx="00" bitLen="32" halType="complex">
                        <complexEntry bitLen="1" halPin="I32" halType="bit"/>
                        <complexEntry bitLen="1" halPin="I33" halType="bit"/>
                        <complexEntry bitLen="1" halPin="I34" halType="bit"/>
                        <complexEntry bitLen="1" halPin="I35" halType="bit"/>
                        <complexEntry bitLen="1" halPin="I36" halType="bit"/>
                        <complexEntry bitLen="1" halPin="I37" halType="bit"/>
                        <complexEntry bitLen="1" halPin="I38" halType="bit"/>
                    </pdoEntry>
                </pdo>
                <pdo idx="1a21">
                    <pdoEntry idx="7041" subIdx="00" bitLen="16" halType="complex">
                        <complexEntry bitLen="1" halPin="2-stat-ReadyToSwitchOn" halType="bit"/>
                        <complexEntry bitLen="1" halPin="2-stat-SwitchOn" halType="bit"/>
                        <complexEntry bitLen="1" halPin="2-stat-OperationEnable" halType="bit"/>
                        <complexEntry bitLen="1" halPin="2-stat-Fault" halType="bit"/>
                        <complexEntry bitLen="1" halPin="2-stat-VoltageEnabled" halType="bit"/>
                        <complexEntry bitLen="1" halPin="2-stat-QuickStop" halType="bit"/>
                        <complexEntry bitLen="1" halPin="2-stat-SwitchOnDisable" halType="bit"/>
                        <complexEntry bitLen="1" halPin="2-stat-Warning" halType="bit"/>
                        <complexEntry bitLen="1" halPin="2-stat-HaltRequestActive" halType="bit"/>
                        <complexEntry bitLen="1" halPin="2-stat-Remote" halType="bit"/>
                        <complexEntry bitLen="1" halPin="2-stat-TargetIsReached" halType="bit"/>
                        <complexEntry bitLen="1" halPin="2-stat-bit11" halType="bit"/>
                        <complexEntry bitLen="1" halPin="2-stat-SetpointAck" halType="bit"/>
                        <complexEntry bitLen="1" halPin="2-stat-x_err" halType="bit"/>
                    </pdoEntry>
                    <pdoEntry idx="7064" subIdx="00" bitLen="32" halPin="2-position" halType="float" scale="0.000390625" offset="0"/>
                    <pdoEntry idx="70FD" subIdx="00" bitLen="32" halPin="QUAD_CNT_A" halType="S32"/>
                </pdo>
                <pdo idx="1a31">
                    <pdoEntry idx="7841" subIdx="00" bitLen="16" halType="complex">
                        <complexEntry bitLen="1" halPin="3-stat-ReadyToSwitchOn" halType="bit"/>
                        <complexEntry bitLen="1" halPin="3-stat-SwitchOn" halType="bit"/>
                        <complexEntry bitLen="1" halPin="3-stat-OperationEnable" halType="bit"/>
                        <complexEntry bitLen="1" halPin="3-stat-Fault" halType="bit"/>
                        <complexEntry bitLen="1" halPin="3-stat-VoltageEnabled" halType="bit"/>
                        <complexEntry bitLen="1" halPin="3-stat-QuickStop" halType="bit"/>
                        <complexEntry bitLen="1" halPin="3-stat-SwitchOnDisable" halType="bit"/>
                        <complexEntry bitLen="1" halPin="3-stat-Warning" halType="bit"/>
                        <complexEntry bitLen="1" halPin="3-stat-HaltRequestActive" halType="bit"/>
                        <complexEntry bitLen="1" halPin="3-stat-Remote" halType="bit"/>
                        <complexEntry bitLen="1" halPin="3-stat-TargetIsReached" halType="bit"/>
                        <complexEntry bitLen="1" halPin="3-stat-bit11" halType="bit"/>
                        <complexEntry bitLen="1" halPin="3-stat-SetpointAck" halType="bit"/>
                        <complexEntry bitLen="1" halPin="3-stat-x_err" halType="bit"/>
                    </pdoEntry>
                    <pdoEntry idx="7864" subIdx="00" bitLen="32" halPin="3-position" halType="float" scale="0.000390625" offset="0"/>
                    <pdoEntry idx="78FD" subIdx="00" bitLen="32" halPin="QUAD_CNT_B" halType="S32"/>
                </pdo>
                <pdo idx="1a41">
                    <pdoEntry idx="8041" subIdx="00" bitLen="16" halType="complex">
                        <complexEntry bitLen="1" halPin="4-stat-ReadyToSwitchOn" halType="bit"/>
                        <complexEntry bitLen="1" halPin="4-stat-SwitchOn" halType="bit"/>
                        <complexEntry bitLen="1" halPin="4-stat-OperationEnable" halType="bit"/>
                        <complexEntry bitLen="1" halPin="4-stat-Fault" halType="bit"/>
                        <complexEntry bitLen="1" halPin="4-stat-VoltageEnabled" halType="bit"/>
                        <complexEntry bitLen="1" halPin="4-stat-QuickStop" halType="bit"/>
                        <complexEntry bitLen="1" halPin="4-stat-SwitchOnDisable" halType="bit"/>
                        <complexEntry bitLen="1" halPin="4-stat-Warning" halType="bit"/>
                        <complexEntry bitLen="1" halPin="4-stat-HaltRequestActive" halType="bit"/>
                        <complexEntry bitLen="1" halPin="4-stat-Remote" halType="bit"/>
                        <complexEntry bitLen="1" halPin="4-stat-TargetIsReached" halType="bit"/>
                        <complexEntry bitLen="1" halPin="4-stat-bit11" halType="bit"/>
                        <complexEntry bitLen="1" halPin="4-stat-SetpointAck" halType="bit"/>
                        <complexEntry bitLen="1" halPin="4-stat-x_err" halType="bit"/>
                    </pdoEntry>
                    <pdoEntry idx="8064" subIdx="00" bitLen="32" halPin="4-position" halType="float" scale="0.000390625" offset="0"/>
                    <pdoEntry idx="80FD" subIdx="00" bitLen="32" halPin="COMM_ERR_CNT" halType="u32"/>
                </pdo>
                <pdo idx="1a51">
                    <pdoEntry idx="8841" subIdx="00" bitLen="16" halType="complex">
                        <complexEntry bitLen="1" halPin="5-stat-ReadyToSwitchOn" halType="bit"/>
                        <complexEntry bitLen="1" halPin="5-stat-SwitchOn" halType="bit"/>
                        <complexEntry bitLen="1" halPin="5-stat-OperationEnable" halType="bit"/>
                        <complexEntry bitLen="1" halPin="5-stat-Fault" halType="bit"/>
                        <complexEntry bitLen="1" halPin="5-stat-VoltageEnabled" halType="bit"/>
                        <complexEntry bitLen="1" halPin="5-stat-QuickStop" halType="bit"/>
                        <complexEntry bitLen="1" halPin="5-stat-SwitchOnDisable" halType="bit"/>
                        <complexEntry bitLen="1" halPin="5-stat-Warning" halType="bit"/>
                        <complexEntry bitLen="1" halPin="5-stat-HaltRequestActive" halType="bit"/>
                        <complexEntry bitLen="1" halPin="5-stat-Remote" halType="bit"/>
                        <complexEntry bitLen="1" halPin="5-stat-TargetIsReached" halType="bit"/>
                        <complexEntry bitLen="1" halPin="5-stat-bit11" halType="bit"/>
                        <complexEntry bitLen="1" halPin="5-stat-SetpointAck" halType="bit"/>
                        <complexEntry bitLen="1" halPin="5-stat-x_err" halType="bit"/>
                    </pdoEntry>
                    <pdoEntry idx="8864" subIdx="00" bitLen="32" halPin="5-position" halType="float" scale="0.000390625" offset="0"/>
                </pdo>
            </syncManager>
            <watchdog divider="2498" intervals="2000"/>
        </slave>
    </master>
</masters>
发表于 2018-10-30 17:06:46 | 显示全部楼层
啥玩意,伺服电机?
最近这技术贴回的人少了
发表于 2018-10-30 17:53:29 | 显示全部楼层
用过SOEM主站移植到M4里面去,接4个伺服测试跑起来也没啥问题,控制周期也是1ms
发表于 2018-10-30 18:17:03 | 显示全部楼层
这些东西  很难推广, 楼主有能力还是搞个 简易开发板 ,跑 linuxcnc  把一些常用的手动 通过按键 完成  卖个几百块钱  还能小赚点,给客户定制个界面啥的  最好能跑个十轴  8轴   
发表于 2018-10-30 18:25:38 | 显示全部楼层
有没有新出低成本从站方案?
发表于 2018-10-30 22:02:36 | 显示全部楼层
关注下
发表于 2018-10-30 22:16:28 | 显示全部楼层
Slave 协议直接用FPGA实现?
发表于 2018-10-30 22:29:30 来自手机 | 显示全部楼层
同问低成本的!!!!
发表于 2018-10-30 22:57:51 | 显示全部楼层
从站很多是用ET1100实现的吧
 楼主| 发表于 2018-10-31 11:44:50 | 显示全部楼层
tigerlzf 发表于 2018-10-30 17:06
啥玩意,伺服电机?
最近这技术贴回的人少了

ethercat总线是当前最流行的基于以太网的实时工业总线。
 楼主| 发表于 2018-10-31 11:46:40 | 显示全部楼层
落叶知秋 发表于 2018-10-30 17:53
用过SOEM主站移植到M4里面去,接4个伺服测试跑起来也没啥问题,控制周期也是1ms ...

高手啊!
高高手啊!

我是费了很大力气才会用ethercat的。请多指教!
 楼主| 发表于 2018-10-31 11:49:00 | 显示全部楼层
数控铣 发表于 2018-10-30 18:17
这些东西  很难推广, 楼主有能力还是搞个 简易开发板 ,跑 linuxcnc  把一些常用的手动 通过按键 完成  卖 ...

好的。ethercat总线令人着迷。在总线的基础上有更多的发挥的。要找到一个点不容易的。
 楼主| 发表于 2018-10-31 11:49:52 | 显示全部楼层
zhaogq 发表于 2018-10-30 18:25
有没有新出低成本从站方案?

网上有很多从站方案的。
 楼主| 发表于 2018-10-31 11:54:33 | 显示全部楼层
picobox 发表于 2018-10-30 22:16
Slave 协议直接用FPGA实现?

fpga是大部分搞不定的。大多是chip带的。can大多也是mcu带的。IC上ethercat比can复杂10倍以上,mcu 带的总线接口好用。
 楼主| 发表于 2018-10-31 11:55:46 | 显示全部楼层
阿豪博士 发表于 2018-10-30 22:29
同问低成本的!!!!

can总线成本会好很多了。
 楼主| 发表于 2018-10-31 11:56:51 | 显示全部楼层
yamqqqq 发表于 2018-10-30 22:57
从站很多是用ET1100实现的吧

开始只有et1100,现在大都有集成到mcu中的。
 楼主| 发表于 2018-10-31 12:02:04 | 显示全部楼层
论坛上ethercat的帖子不多,不过用的不少吧。
发表于 2018-10-31 12:03:15 | 显示全部楼层
EasyControl 发表于 2018-10-31 11:46
高手啊!
高高手啊!

不敢当。SOEM比较适合裸机开发的,简单。
不过不支持XML文件解析,配置要在代码里面固定好,这点就不太友好
发表于 2018-10-31 13:01:48 | 显示全部楼层
ethercat总线令人着迷,可无耐入门难啊,有对象字典等。
发表于 2018-10-31 16:51:34 | 显示全部楼层
看到过很多 XML 文件 这些有专门的编辑器吗?
发表于 2018-10-31 16:54:38 | 显示全部楼层
看楼主搞的火热,但是我们这些人相当于隔岸观火啊。。。感受不到。。
发表于 2018-10-31 23:44:47 | 显示全部楼层
EasyControl 发表于 2018-10-31 11:54
fpga是大部分搞不定的。大多是chip带的。can大多也是mcu带的。IC上ethercat比can复杂10倍以上,mcu 带的 ...

看到了,英飞凌那个MCU自带EtherCAT Slave

Master端移植简单吗?
 楼主| 发表于 2018-11-1 11:51:53 | 显示全部楼层
落叶知秋 发表于 2018-10-31 12:03
不敢当。SOEM比较适合裸机开发的,简单。
不过不支持XML文件解析,配置要在代码里面固定好,这点就不太友 ...

是的,找canopen主站好用些的代码,都不好找。软件与canopen差不多。
 楼主| 发表于 2018-11-1 11:55:00 | 显示全部楼层
bsz84 发表于 2018-10-31 13:01
ethercat总线令人着迷,可无耐入门难啊,有对象字典等。

做总线就是费力,费时间,上手了,就比较平坦些。学是要找资料,看资料,找板子练手。
 楼主| 发表于 2018-11-1 11:55:28 | 显示全部楼层
阿豪博士 发表于 2018-10-31 16:51
看到过很多 XML 文件 这些有专门的编辑器吗?

有的,不过我没用。
 楼主| 发表于 2018-11-1 11:56:27 | 显示全部楼层
zhang0352505 发表于 2018-10-31 16:54
看楼主搞的火热,但是我们这些人相当于隔岸观火啊。。。感受不到。。

我向大家学习。
 楼主| 发表于 2018-11-1 12:00:59 | 显示全部楼层
picobox 发表于 2018-10-31 23:44
看到了,英飞凌那个MCU自带EtherCAT Slave

Master端移植简单吗?

主站从站都搞清楚了,再找一些代码参考下可以了。

就是要对很多资料要学,要做板子做练习,花时间就对了。

有时间,ethercat总线是可以用心学学的了。
发表于 2018-11-1 17:13:55 | 显示全部楼层
EasyControl 发表于 2018-11-1 11:51
是的,找canopen主站好用些的代码,都不好找。软件与canopen差不多。

canopen协议比较出名的又开源的,也就CanFestival了;
EtherCAT的COE(Canopen Over EtherCAT)应用协议使用的就是CanOpen里面设备行规(Device Profile),基本一样的概念,只不过传输方式变了;
使用EtherCAT协议来控制电机,一般都是用COE协议,从站的电机驱动器一般都是支持COE,支持SOE(Sercos over EtherCAT)的比较少,所以熟悉CanOpen会上手更快些。
发表于 2018-11-9 19:36:36 来自手机 | 显示全部楼层
落叶知秋 发表于 2018-11-1 17:13
canopen协议比较出名的又开源的,也就CanFestival了;
EtherCAT的COE(Canopen Over EtherCAT)应用协议使 ...

高手,数控领域的高手
发表于 2018-12-19 13:23:53 | 显示全部楼层
关注中。。。
发表于 2018-12-19 19:26:48 | 显示全部楼层
我也想来应用学习这个总线
友情提示:标题不合格、重复发帖,将会被封锁ID。详情请参考:论坛通告:封锁ID、获得注册邀请码、恢复被封ID、投诉必读
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|阿莫电子论坛(原ourAVR/ourDEV) ( 公安备案:44190002001997(交互式论坛) 工信部备案:粤ICP备09047143号 )

GMT+8, 2019-1-17 11:49

阿莫电子论坛, 原"中国电子开发网"

© 2004-2018 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表