搜索
bottom↓
回复: 60
打印 上一主题 下一主题

EasyControl ethercat总线 精简主从站方案

  [复制链接]

出0入0汤圆

跳转到指定楼层
1
发表于 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>

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入16汤圆

2
发表于 2018-10-30 17:06:46 | 只看该作者
啥玩意,伺服电机?
最近这技术贴回的人少了

出40入42汤圆

3
发表于 2018-10-30 17:53:29 | 只看该作者
用过SOEM主站移植到M4里面去,接4个伺服测试跑起来也没啥问题,控制周期也是1ms

出0入0汤圆

4
发表于 2018-10-30 18:17:03 | 只看该作者
这些东西  很难推广, 楼主有能力还是搞个 简易开发板 ,跑 linuxcnc  把一些常用的手动 通过按键 完成  卖个几百块钱  还能小赚点,给客户定制个界面啥的  最好能跑个十轴  8轴   

出0入0汤圆

5
发表于 2018-10-30 18:25:38 | 只看该作者
有没有新出低成本从站方案?

出0入85汤圆

6
发表于 2018-10-30 22:02:36 | 只看该作者
关注下

出0入0汤圆

7
发表于 2018-10-30 22:16:28 | 只看该作者
Slave 协议直接用FPGA实现?

出0入0汤圆

8
发表于 2018-10-30 22:29:30 来自手机 | 只看该作者
同问低成本的!!!!

出0入0汤圆

9
发表于 2018-10-30 22:57:51 | 只看该作者
从站很多是用ET1100实现的吧

出0入0汤圆

10
 楼主| 发表于 2018-10-31 11:44:50 | 只看该作者
TigerFish 发表于 2018-10-30 17:06
啥玩意,伺服电机?
最近这技术贴回的人少了

ethercat总线是当前最流行的基于以太网的实时工业总线。

出0入0汤圆

11
 楼主| 发表于 2018-10-31 11:46:40 | 只看该作者
落叶知秋 发表于 2018-10-30 17:53
用过SOEM主站移植到M4里面去,接4个伺服测试跑起来也没啥问题,控制周期也是1ms ...

高手啊!
高高手啊!

我是费了很大力气才会用ethercat的。请多指教!

出0入0汤圆

12
 楼主| 发表于 2018-10-31 11:49:00 | 只看该作者
数控铣 发表于 2018-10-30 18:17
这些东西  很难推广, 楼主有能力还是搞个 简易开发板 ,跑 linuxcnc  把一些常用的手动 通过按键 完成  卖 ...

好的。ethercat总线令人着迷。在总线的基础上有更多的发挥的。要找到一个点不容易的。

出0入0汤圆

13
 楼主| 发表于 2018-10-31 11:49:52 | 只看该作者
zhaogq 发表于 2018-10-30 18:25
有没有新出低成本从站方案?

网上有很多从站方案的。

出0入0汤圆

14
 楼主| 发表于 2018-10-31 11:54:33 | 只看该作者
picobox 发表于 2018-10-30 22:16
Slave 协议直接用FPGA实现?

fpga是大部分搞不定的。大多是chip带的。can大多也是mcu带的。IC上ethercat比can复杂10倍以上,mcu 带的总线接口好用。

出0入0汤圆

15
 楼主| 发表于 2018-10-31 11:55:46 | 只看该作者
阿豪博士 发表于 2018-10-30 22:29
同问低成本的!!!!

can总线成本会好很多了。

出0入0汤圆

16
 楼主| 发表于 2018-10-31 11:56:51 | 只看该作者
yamqqqq 发表于 2018-10-30 22:57
从站很多是用ET1100实现的吧

开始只有et1100,现在大都有集成到mcu中的。

出0入0汤圆

17
 楼主| 发表于 2018-10-31 12:02:04 | 只看该作者
论坛上ethercat的帖子不多,不过用的不少吧。

出40入42汤圆

18
发表于 2018-10-31 12:03:15 | 只看该作者
EasyControl 发表于 2018-10-31 11:46
高手啊!
高高手啊!

不敢当。SOEM比较适合裸机开发的,简单。
不过不支持XML文件解析,配置要在代码里面固定好,这点就不太友好

出0入0汤圆

19
发表于 2018-10-31 13:01:48 | 只看该作者
ethercat总线令人着迷,可无耐入门难啊,有对象字典等。

出0入0汤圆

20
发表于 2018-10-31 16:51:34 | 只看该作者
看到过很多 XML 文件 这些有专门的编辑器吗?

出0入0汤圆

21
发表于 2018-10-31 16:54:38 | 只看该作者
看楼主搞的火热,但是我们这些人相当于隔岸观火啊。。。感受不到。。

出0入0汤圆

22
发表于 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端移植简单吗?

出0入0汤圆

23
 楼主| 发表于 2018-11-1 11:51:53 | 只看该作者
落叶知秋 发表于 2018-10-31 12:03
不敢当。SOEM比较适合裸机开发的,简单。
不过不支持XML文件解析,配置要在代码里面固定好,这点就不太友 ...

是的,找canopen主站好用些的代码,都不好找。软件与canopen差不多。

出0入0汤圆

24
 楼主| 发表于 2018-11-1 11:55:00 | 只看该作者
bsz84 发表于 2018-10-31 13:01
ethercat总线令人着迷,可无耐入门难啊,有对象字典等。

做总线就是费力,费时间,上手了,就比较平坦些。学是要找资料,看资料,找板子练手。

出0入0汤圆

25
 楼主| 发表于 2018-11-1 11:55:28 | 只看该作者
阿豪博士 发表于 2018-10-31 16:51
看到过很多 XML 文件 这些有专门的编辑器吗?

有的,不过我没用。

出0入0汤圆

26
 楼主| 发表于 2018-11-1 11:56:27 | 只看该作者
zhang0352505 发表于 2018-10-31 16:54
看楼主搞的火热,但是我们这些人相当于隔岸观火啊。。。感受不到。。

我向大家学习。

出0入0汤圆

27
 楼主| 发表于 2018-11-1 12:00:59 | 只看该作者
picobox 发表于 2018-10-31 23:44
看到了,英飞凌那个MCU自带EtherCAT Slave

Master端移植简单吗?

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

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

有时间,ethercat总线是可以用心学学的了。

出40入42汤圆

28
发表于 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会上手更快些。

出0入0汤圆

29
发表于 2018-11-9 19:36:36 来自手机 | 只看该作者
落叶知秋 发表于 2018-11-1 17:13
canopen协议比较出名的又开源的,也就CanFestival了;
EtherCAT的COE(Canopen Over EtherCAT)应用协议使 ...

高手,数控领域的高手

出0入0汤圆

30
发表于 2018-12-19 13:23:53 | 只看该作者
关注中。。。

出0入0汤圆

31
发表于 2018-12-19 19:26:48 | 只看该作者
我也想来应用学习这个总线

出0入131汤圆

32
发表于 2019-1-19 15:40:06 | 只看该作者
请教一下lz,为什么我用soem控制汇川伺服,可以使能,电机却不能转是怎么回事?(可以发出去数据,但是收的数据都不对,位置也不能实时更新)

控制台达伺服,也是同样的问题,可以使能,但是不能转,(可以收发数据正常)

可能的问题是出在什么地方?

出40入42汤圆

33
发表于 2019-1-19 17:34:47 来自手机 | 只看该作者
asj1989 发表于 2019-1-19 15:40
请教一下lz,为什么我用soem控制汇川伺服,可以使能,电机却不能转是怎么回事?(可以发出去数据,但是收的 ...

倍福的那个软件可以直接操作汇川伺服动作的,可以抓下包对照一下,多半是一些初始化的流程漏了东西,或者周期收发里少了东西

出0入0汤圆

34
发表于 2019-1-19 18:17:47 | 只看该作者
继续关注,希望楼主多讲讲如何移植Ethercat主站到MCU上

出0入0汤圆

35
发表于 2019-1-19 20:09:59 | 只看该作者
关注中。。。

出0入131汤圆

36
发表于 2019-1-19 21:56:03 来自手机 | 只看该作者
落叶知秋 发表于 2019-1-19 17:34
倍福的那个软件可以直接操作汇川伺服动作的,可以抓下包对照一下,多半是一些初始化的流程漏了东西,或者 ...

是的,倍福twincat可以转起来,抓包也抓到了,比较了一下sync和fmmu的配置,基本一样。一抓包就是几万行数据,无从下手啊

出40入42汤圆

37
发表于 2019-1-19 22:09:10 来自手机 | 只看该作者
asj1989 发表于 2019-1-19 21:56
是的,倍福twincat可以转起来,抓包也抓到了,比较了一下sync和fmmu的配置,基本一样。一抓包就是几万行 ...

那看看DC同步的那部分吧,以前调的时候记得DC时钟也要同步的

出0入0汤圆

38
 楼主| 发表于 2019-1-20 11:04:52 | 只看该作者
要做主站,也要做从站吧。
找一从站的板子,看代码跑一跑了。

出0入0汤圆

39
发表于 2019-1-25 11:45:49 | 只看该作者
ethcat主站成本大约多少钱,从站呢?谢谢!!

出0入0汤圆

40
发表于 2019-1-25 11:53:31 | 只看该作者
我安装twincat 兼容网卡的驱动后,win10就无法正常关机,如果禁用这个网卡,就没有问题,有人遇到过没

出0入0汤圆

41
 楼主| 发表于 2019-1-25 13:18:17 | 只看该作者
muok@sohu.com 发表于 2019-1-25 11:45
ethcat主站成本大约多少钱,从站呢?谢谢!!

主站一般STM32H743可以用一用了。stm32f407可能也可以。
从站要加100多RMB的成本。

出0入0汤圆

42
 楼主| 发表于 2019-1-25 13:19:20 | 只看该作者
nibia 发表于 2019-1-25 11:53
我安装twincat 兼容网卡的驱动后,win10就无法正常关机,如果禁用这个网卡,就没有问题,有人遇到过没 ...

我现在不怎么用windows了,twincat用的很少吧。

出0入0汤圆

43
发表于 2019-3-13 12:46:30 | 只看该作者
这个总线有一个最大的特点,就是贵,其实他的物理层和以太网是一样的,但如果硬件干扰不处理好,挺难搞,从站芯片都是必须要买的

出0入0汤圆

44
发表于 2019-11-15 07:54:56 来自手机 | 只看该作者
asj1989 发表于 2019-1-19 15:40
请教一下lz,为什么我用soem控制汇川伺服,可以使能,电机却不能转是怎么回事?(可以发出去数据,但是收的 ...

后来问题有解决吗?我也遇到同样的问题:能使能但不能转。控制io模块是正常的

出0入131汤圆

45
发表于 2019-11-15 10:56:36 | 只看该作者
LCH201328 发表于 2019-11-15 07:54
后来问题有解决吗?我也遇到同样的问题:能使能但不能转。控制io模块是正常的 ...

解决了,汇川的伺服底层有问题。

后来我们换成松下伺服,一次性成功。

不使用汇川了。

出0入0汤圆

46
发表于 2019-11-15 21:55:07 来自手机 | 只看该作者
asj1989 发表于 2019-11-15 10:56
解决了,汇川的伺服底层有问题。

后来我们换成松下伺服,一次性成功。

你是在裸机下测试的还是在liunx环境下测试的?我是在liunx环境下测试的,伺服电机是台达的。你们用这个soem主站运行起来稳定吗?有用在实际的项目上吗?

出0入131汤圆

47
发表于 2019-11-15 22:48:31 | 只看该作者
LCH201328 发表于 2019-11-15 21:55
你是在裸机下测试的还是在liunx环境下测试的?我是在liunx环境下测试的,伺服电机是台达的。你们用这个so ...

我在stm32下面测试的,还算稳定,目前没出现幺蛾子。

出100入85汤圆

48
发表于 2019-11-15 23:57:21 来自手机 | 只看该作者
stm32 soem 裸奔系统?

出0入0汤圆

49
发表于 2019-11-16 07:43:41 来自手机 | 只看该作者
asj1989 发表于 2019-11-15 22:48
我在stm32下面测试的,还算稳定,目前没出现幺蛾子。

带几个伺服电机啊?插补周期几毫秒?台达的电机用同样的条件还是转不起来?

出0入0汤圆

50
发表于 2019-11-16 10:00:43 | 只看该作者
不明觉厉,先MARK再说

出0入131汤圆

51
发表于 2019-11-16 11:18:07 | 只看该作者
LCH201328 发表于 2019-11-16 07:43
带几个伺服电机啊?插补周期几毫秒?台达的电机用同样的条件还是转不起来? ...

带4个,插补1ms,爽的一比,台达我试了一下不行就不搞了,汇川浪费了我2个月的时间,我要是一开始就用松下的,早就成功了。我建议你买个松下的a6伺服测试。

出0入131汤圆

52
发表于 2019-11-16 11:19:38 | 只看该作者
whatcanitbe 发表于 2019-11-15 23:57
stm32 soem 裸奔系统?

裸奔            

出0入0汤圆

53
发表于 2020-3-3 00:13:31 | 只看该作者
ethercat还是高端货,这么多年没有下沉下来

出0入98汤圆

54
发表于 2020-3-4 21:38:27 | 只看该作者
楼主能出个开发板吗?没有太看明白

出0入0汤圆

55
 楼主| 发表于 2020-3-7 09:49:34 | 只看该作者
kaomantou 发表于 2020-3-3 00:13
ethercat还是高端货,这么多年没有下沉下来

有些好点的控制器厂新出的控制器只有带总线的,比如新代的。

出0入0汤圆

56
 楼主| 发表于 2020-3-7 09:50:08 | 只看该作者
cdust 发表于 2020-3-4 21:38
楼主能出个开发板吗?没有太看明白

网上有很多ethercat的开发板了。

出0入98汤圆

57
发表于 2020-3-7 10:50:47 | 只看该作者
EasyControl 发表于 2020-3-7 09:50
网上有很多ethercat的开发板了。

有推荐的吗?

出0入0汤圆

58
 楼主| 发表于 2020-3-7 11:30:16 | 只看该作者


上X宝上找下 ethercat 就不少了的。

出0入0汤圆

59
发表于 2021-5-8 12:24:24 | 只看该作者
wang1216 发表于 2019-3-13 12:46
这个总线有一个最大的特点,就是贵,其实他的物理层和以太网是一样的,但如果硬件干扰不处理好,挺难搞,从 ...

干扰是指哪些方面的?能详细谈谈吗?从站MCU?ESC从站芯片?还是ethercat总线?

出0入0汤圆

60
发表于 2021-5-9 16:37:14 | 只看该作者
支持网络断线重连吗?

出0入0汤圆

61
发表于 2021-11-28 08:00:00 来自手机 | 只看该作者
asj1989 发表于 2019-11-16 11:18
带4个,插补1ms,爽的一比,台达我试了一下不行就不搞了,汇川浪费了我2个月的时间,我要是一开始就用松 ...

请问用这个主站控制伺服电机,电机速度大时会抖动吗?我现在控制电机,低速时感觉不到异常,高速时偶尔感觉电机会抖动。现在不知道是同步时钟的问题还是丢贞导致的。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-23 20:12

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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