From d514439e6e7ae72c99d04ed67ac3abcb8f30bea0 Mon Sep 17 00:00:00 2001 From: Florian Pose <fp@igh-essen.com> Date: Fri, 1 Aug 2008 08:58:35 +0000 Subject: [PATCH] Configure Pdos before configuring the Pdo sync managers, to earlier detect problems with non-existing SM information. --- TODO | 1 - documentation/graphs/fsm_slave_conf.dot | 59 +++++++++--------------- master/fsm_pdo.c | 2 +- master/fsm_slave_config.c | 60 +++++++++++++++---------- 4 files changed, 58 insertions(+), 64 deletions(-) diff --git a/TODO b/TODO index 86bb85ed..61ac08bc 100644 --- a/TODO +++ b/TODO @@ -14,7 +14,6 @@ Version 1.4.0: * Remove ec_sync_t::assign_source? * Repair rcethercat status. * Debug output for all configuration functions of the application interface. -* Output warning, if there is no sync manager for a configuration. * Abort code messages in userspace. Future issues: diff --git a/documentation/graphs/fsm_slave_conf.dot b/documentation/graphs/fsm_slave_conf.dot index f7e18d42..c53ca70d 100644 --- a/documentation/graphs/fsm_slave_conf.dot +++ b/documentation/graphs/fsm_slave_conf.dot @@ -10,78 +10,61 @@ digraph slaveconf { start -> init [weight=10] init [fontname="Helvetica"] - //init -> init - //init -> error - init -> enter_mbox_sync [fontname="Helvetica",label ="No FMMUs"] + init -> enter_mbox_sync [fontname="Helvetica", label="No FMMUs"] init -> clear_fmmus [weight=10] clear_fmmus [fontname="Helvetica"] - //clear_fmmus -> clear_fmmus - //clear_fmmus -> error clear_fmmus -> enter_mbox_sync [weight=10] - enter_mbox_sync [shape=point,label=""] - enter_mbox_sync -> end [fontname="Helvetica",label="INIT\nrequested"] - enter_mbox_sync -> preop [fontname="Helvetica",label="No mailboxes"] + enter_mbox_sync [shape=point, label=""] + enter_mbox_sync -> end [fontname="Helvetica", label="INIT\nrequested"] + enter_mbox_sync -> preop [fontname="Helvetica", label="No mailboxes"] enter_mbox_sync -> mbox_sync [weight=10] mbox_sync [fontname="Helvetica"] - //mbox_sync -> mbox_sync - //mbox_sync -> error mbox_sync -> preop [weight=10] preop [fontname="Helvetica"] - //preop -> preop - //preop -> error - preop -> end [fontname="Helvetica",label="PREOP\nrequested"] - preop -> enter_safeop [fontname="Helvetica",label="No slave\nconfig attached"] + preop -> end [fontname="Helvetica", label="PREOP\nrequested"] + preop -> enter_safeop [fontname="Helvetica", label="No slave\nconfig attached"] preop -> enter_sdo_conf [weight=10] - enter_sdo_conf [shape=point,label=""] - enter_sdo_conf -> enter_pdo_sync [fontname="Helvetica",label="No Sdo\nconfigurations"] + enter_sdo_conf [shape=point, label=""] + enter_sdo_conf -> enter_pdo_conf [fontname="Helvetica", label="No Sdos\nconfigured"] enter_sdo_conf -> sdo_conf [weight=10] sdo_conf [fontname="Helvetica"] - //sdo_conf -> sdo_conf - //sdo_conf -> error - sdo_conf -> enter_pdo_sync [weight=10] + sdo_conf -> enter_pdo_conf [weight=10] - enter_pdo_sync [shape=point,label=""] - enter_pdo_sync -> enter_safeop [fontname="Helvetica",label="No Pdos"] + enter_pdo_conf [shape=point, label=""] + enter_pdo_conf -> pdo_conf [weight=10] + + pdo_conf [fontname="Helvetica"] + pdo_conf -> enter_pdo_sync [weight=10] + + enter_pdo_sync [shape=point, label=""] + enter_pdo_sync -> enter_fmmu [fontname="Helvetica", label="No Pdo SMs"] enter_pdo_sync -> pdo_sync [weight=10] pdo_sync [fontname="Helvetica"] - //pdo_sync -> pdo_sync - //pdo_sync -> error - pdo_sync -> pdo_conf [weight=10] - - pdo_conf [fontname="Helvetica"] - //pdo_conf -> pdo_conf - //pdo_conf -> error - pdo_conf -> enter_fmmu [weight=10] + pdo_sync -> enter_fmmu [weight=10] enter_fmmu [shape=point,label=""] - enter_fmmu -> enter_safeop [fontname="Helvetica",label="No FMMUs\nto configure"] + enter_fmmu -> enter_safeop [fontname="Helvetica", label="No FMMUs\nconfigured"] enter_fmmu -> fmmu [weight=10] fmmu [fontname="Helvetica"] - //fmmu -> fmmu - //fmmu -> error fmmu -> enter_safeop [weight=10] enter_safeop [shape=point,label=""] enter_safeop -> safeop [weight=10] safeop [fontname="Helvetica"] - //safeop -> safeop - //safeop -> error - safeop -> end [fontname="Helvetica",label="SAFEOP\nrequested"] + safeop -> end [fontname="Helvetica", label="SAFEOP\nrequested"] safeop -> op [weight=10] op [fontname="Helvetica"] - //op -> op - //op -> error - op -> end [weight=10] + op -> end// [weight=10] end [fontname="Helvetica"] } diff --git a/master/fsm_pdo.c b/master/fsm_pdo.c index bf1ccaa4..dc812940 100644 --- a/master/fsm_pdo.c +++ b/master/fsm_pdo.c @@ -413,7 +413,7 @@ void ec_fsm_pdo_conf_action_next_sync( if (!(fsm->sync = ec_slave_get_sync(fsm->slave, fsm->sync_index))) { if (!list_empty(&fsm->pdos.list)) EC_WARN("Pdos configured for SM%u, but slave %u does not " - "provide a sync manager configuration!\n", + "provide the sync manager information!\n", fsm->sync_index, fsm->slave->ring_position); continue; } diff --git a/master/fsm_slave_config.c b/master/fsm_slave_config.c index f52c44e2..e2dc0ce0 100644 --- a/master/fsm_slave_config.c +++ b/master/fsm_slave_config.c @@ -61,6 +61,7 @@ void ec_fsm_slave_config_state_op(ec_fsm_slave_config_t *); void ec_fsm_slave_config_enter_mbox_sync(ec_fsm_slave_config_t *); void ec_fsm_slave_config_enter_preop(ec_fsm_slave_config_t *); void ec_fsm_slave_config_enter_sdo_conf(ec_fsm_slave_config_t *); +void ec_fsm_slave_config_enter_pdo_conf(ec_fsm_slave_config_t *); void ec_fsm_slave_config_enter_pdo_sync(ec_fsm_slave_config_t *); void ec_fsm_slave_config_enter_fmmu(ec_fsm_slave_config_t *); void ec_fsm_slave_config_enter_safeop(ec_fsm_slave_config_t *); @@ -440,7 +441,7 @@ void ec_fsm_slave_config_enter_sdo_conf( // No CoE configuration to be applied? if (list_empty(&slave->config->sdo_configs)) { // skip Sdo configuration - ec_fsm_slave_config_enter_pdo_sync(fsm); + ec_fsm_slave_config_enter_pdo_conf(fsm); return; } @@ -482,6 +483,39 @@ void ec_fsm_slave_config_state_sdo_conf( } // All Sdos are now configured. + ec_fsm_slave_config_enter_pdo_conf(fsm); +} + +/*****************************************************************************/ + +/** PDO_CONF entry function. + */ +void ec_fsm_slave_config_enter_pdo_conf( + ec_fsm_slave_config_t *fsm /**< slave state machine */ + ) +{ + // Start configuring Pdos + ec_fsm_pdo_start_configuration(fsm->fsm_pdo, fsm->slave); + fsm->state = ec_fsm_slave_config_state_pdo_conf; + fsm->state(fsm); // execute immediately +} + +/*****************************************************************************/ + +/** Slave configuration state: PDO_CONF. + */ +void ec_fsm_slave_config_state_pdo_conf( + ec_fsm_slave_config_t *fsm /**< slave state machine */ + ) +{ + if (ec_fsm_pdo_exec(fsm->fsm_pdo)) + return; + + if (!ec_fsm_pdo_success(fsm->fsm_pdo)) { + EC_WARN("Pdo configuration failed on slave %u.\n", + fsm->slave->ring_position); + } + ec_fsm_slave_config_enter_pdo_sync(fsm); } @@ -509,7 +543,7 @@ void ec_fsm_slave_config_enter_pdo_sync( if (slave->sii.sync_count <= offset) { // no Pdo sync managers to configure - ec_fsm_slave_config_enter_safeop(fsm); + ec_fsm_slave_config_enter_fmmu(fsm); return; } @@ -565,28 +599,6 @@ void ec_fsm_slave_config_state_pdo_sync( return; } - // Start configuring Pdos - ec_fsm_pdo_start_configuration(fsm->fsm_pdo, fsm->slave); - fsm->state = ec_fsm_slave_config_state_pdo_conf; - fsm->state(fsm); // execute immediately -} - -/*****************************************************************************/ - -/** Slave configuration state: PDO_CONF. - */ -void ec_fsm_slave_config_state_pdo_conf( - ec_fsm_slave_config_t *fsm /**< slave state machine */ - ) -{ - if (ec_fsm_pdo_exec(fsm->fsm_pdo)) - return; - - if (!ec_fsm_pdo_success(fsm->fsm_pdo)) { - EC_WARN("Pdo configuration failed on slave %u.\n", - fsm->slave->ring_position); - } - ec_fsm_slave_config_enter_fmmu(fsm); } -- GitLab