EasyControl 发表于 2018-10-29 13:46:27

EasyControl ethercat总线 精简主从站方案

EasyControl ETHERCAT总线 精简主从站方案

测试视频:http://v.youku.com/v_show/id_XMzgyMzQ0NDY1Ng==.html?spm=a2h3j.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-eclipse/org.eclipse.epp.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>

TigerFish 发表于 2018-10-30 17:06:46

啥玩意,伺服电机?
最近这技术贴回的人少了

落叶知秋 发表于 2018-10-30 17:53:29

用过SOEM主站移植到M4里面去,接4个伺服测试跑起来也没啥问题,控制周期也是1ms

数控铣 发表于 2018-10-30 18:17:03

这些东西很难推广, 楼主有能力还是搞个 简易开发板 ,跑 linuxcnc把一些常用的手动 通过按键 完成卖个几百块钱还能小赚点,给客户定制个界面啥的最好能跑个十轴8轴   

zhaogq 发表于 2018-10-30 18:25:38

有没有新出低成本从站方案?

marshallemon 发表于 2018-10-30 22:02:36

关注下{:lol:}{:lol:}{:lol:}

picobox 发表于 2018-10-30 22:16:28

Slave 协议直接用FPGA实现?

阿豪博士 发表于 2018-10-30 22:29:30

同问低成本的!!!!

yamqqqq 发表于 2018-10-30 22:57:51

从站很多是用ET1100实现的吧

EasyControl 发表于 2018-10-31 11:44:50

TigerFish 发表于 2018-10-30 17:06
啥玩意,伺服电机?
最近这技术贴回的人少了

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

EasyControl 发表于 2018-10-31 11:46:40

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

高手啊!
高高手啊!

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

EasyControl 发表于 2018-10-31 11:49:00

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

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

EasyControl 发表于 2018-10-31 11:49:52

zhaogq 发表于 2018-10-30 18:25
有没有新出低成本从站方案?

网上有很多从站方案的。

EasyControl 发表于 2018-10-31 11:54:33

picobox 发表于 2018-10-30 22:16
Slave 协议直接用FPGA实现?

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

EasyControl 发表于 2018-10-31 11:55:46

阿豪博士 发表于 2018-10-30 22:29
同问低成本的!!!!

can总线成本会好很多了。

EasyControl 发表于 2018-10-31 11:56:51

yamqqqq 发表于 2018-10-30 22:57
从站很多是用ET1100实现的吧

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

EasyControl 发表于 2018-10-31 12:02:04

论坛上ethercat的帖子不多,不过用的不少吧。

落叶知秋 发表于 2018-10-31 12:03:15

EasyControl 发表于 2018-10-31 11:46
高手啊!
高高手啊!



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

bsz84 发表于 2018-10-31 13:01:48

ethercat总线令人着迷,可无耐入门难啊,有对象字典等。

阿豪博士 发表于 2018-10-31 16:51:34

看到过很多 XML 文件 这些有专门的编辑器吗?

zhang0352505 发表于 2018-10-31 16:54:38

看楼主搞的火热,但是我们这些人相当于隔岸观火啊。。。感受不到。。

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

EasyControl 发表于 2018-11-1 11:51:53

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

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

EasyControl 发表于 2018-11-1 11:55:00

bsz84 发表于 2018-10-31 13:01
ethercat总线令人着迷,可无耐入门难啊,有对象字典等。

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

EasyControl 发表于 2018-11-1 11:55:28

阿豪博士 发表于 2018-10-31 16:51
看到过很多 XML 文件 这些有专门的编辑器吗?

有的,不过我没用。

EasyControl 发表于 2018-11-1 11:56:27

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

我向大家学习。

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

LCH201328 发表于 2018-11-9 19:36:36

落叶知秋 发表于 2018-11-1 17:13
canopen协议比较出名的又开源的,也就CanFestival了;
EtherCAT的COE(Canopen Over EtherCAT)应用协议使 ...

高手,数控领域的高手

hzy789 发表于 2018-12-19 13:23:53

关注中。。。

yamqqqq 发表于 2018-12-19 19:26:48

我也想来应用学习这个总线

asj1989 发表于 2019-1-19 15:40:06

请教一下lz,为什么我用soem控制汇川伺服,可以使能,电机却不能转是怎么回事?(可以发出去数据,但是收的数据都不对,位置也不能实时更新)

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

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

落叶知秋 发表于 2019-1-19 17:34:47

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

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

picobox 发表于 2019-1-19 18:17:47

继续关注,希望楼主多讲讲如何移植Ethercat主站到MCU上

TKZXJ 发表于 2019-1-19 20:09:59

关注中。。。

asj1989 发表于 2019-1-19 21:56:03

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

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

落叶知秋 发表于 2019-1-19 22:09:10

asj1989 发表于 2019-1-19 21:56
是的,倍福twincat可以转起来,抓包也抓到了,比较了一下sync和fmmu的配置,基本一样。一抓包就是几万行 ...

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

EasyControl 发表于 2019-1-20 11:04:52

要做主站,也要做从站吧。
找一从站的板子,看代码跑一跑了。

muok@sohu.com 发表于 2019-1-25 11:45:49

ethcat主站成本大约多少钱,从站呢?谢谢!!

nibia 发表于 2019-1-25 11:53:31

我安装twincat 兼容网卡的驱动后,win10就无法正常关机,如果禁用这个网卡,就没有问题,有人遇到过没

EasyControl 发表于 2019-1-25 13:18:17

muok@sohu.com 发表于 2019-1-25 11:45
ethcat主站成本大约多少钱,从站呢?谢谢!!

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

EasyControl 发表于 2019-1-25 13:19:20

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

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

wang1216 发表于 2019-3-13 12:46:30

这个总线有一个最大的特点,就是贵,其实他的物理层和以太网是一样的,但如果硬件干扰不处理好,挺难搞,从站芯片都是必须要买的

LCH201328 发表于 2019-11-15 07:54:56

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

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

asj1989 发表于 2019-11-15 10:56:36

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

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

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

不使用汇川了。

LCH201328 发表于 2019-11-15 21:55:07

asj1989 发表于 2019-11-15 10:56
解决了,汇川的伺服底层有问题。

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


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

asj1989 发表于 2019-11-15 22:48:31

LCH201328 发表于 2019-11-15 21:55
你是在裸机下测试的还是在liunx环境下测试的?我是在liunx环境下测试的,伺服电机是台达的。你们用这个so ...

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

whatcanitbe 发表于 2019-11-15 23:57:21

stm32 soem 裸奔系统?

LCH201328 发表于 2019-11-16 07:43:41

asj1989 发表于 2019-11-15 22:48
我在stm32下面测试的,还算稳定,目前没出现幺蛾子。

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

dragonbbc 发表于 2019-11-16 10:00:43

不明觉厉,先MARK再说

asj1989 发表于 2019-11-16 11:18:07

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

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

asj1989 发表于 2019-11-16 11:19:38

whatcanitbe 发表于 2019-11-15 23:57
stm32 soem 裸奔系统?

裸奔            

kaomantou 发表于 2020-3-3 00:13:31

ethercat还是高端货,这么多年没有下沉下来

cdust 发表于 2020-3-4 21:38:27

楼主能出个开发板吗?没有太看明白

EasyControl 发表于 2020-3-7 09:49:34

kaomantou 发表于 2020-3-3 00:13
ethercat还是高端货,这么多年没有下沉下来

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

EasyControl 发表于 2020-3-7 09:50:08

cdust 发表于 2020-3-4 21:38
楼主能出个开发板吗?没有太看明白

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

cdust 发表于 2020-3-7 10:50:47

EasyControl 发表于 2020-3-7 09:50
网上有很多ethercat的开发板了。

有推荐的吗?

EasyControl 发表于 2020-3-7 11:30:16

cdust 发表于 2020-3-7 10:50
有推荐的吗?

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

id20200627 发表于 2021-5-8 12:24:24

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

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

阿豪博士 发表于 2021-5-9 16:37:14

支持网络断线重连吗?

LCH201328 发表于 2021-11-28 08:00:00

asj1989 发表于 2019-11-16 11:18
带4个,插补1ms,爽的一比,台达我试了一下不行就不搞了,汇川浪费了我2个月的时间,我要是一开始就用松 ...

请问用这个主站控制伺服电机,电机速度大时会抖动吗?我现在控制电机,低速时感觉不到异常,高速时偶尔感觉电机会抖动。现在不知道是同步时钟的问题还是丢贞导致的。
页: [1]
查看完整版本: EasyControl ethercat总线 精简主从站方案