IgH EtherCAT Master  1.5.2
fsm_slave_scan.c File Reference

EtherCAT slave state machines. More...

Go to the source code of this file.

Macros

#define SCAN_RETRY_TIME   100
 Time to wait before slave scan retry [ms]. More...
 

Functions

void ec_fsm_slave_scan_state_start (ec_fsm_slave_scan_t *fsm, ec_datagram_t *datagram)
 Slave scan state: START. More...
 
void ec_fsm_slave_scan_state_address (ec_fsm_slave_scan_t *fsm, ec_datagram_t *datagram)
 Slave scan state: ADDRESS. More...
 
void ec_fsm_slave_scan_state_state (ec_fsm_slave_scan_t *fsm, ec_datagram_t *datagram)
 Slave scan state: STATE. More...
 
void ec_fsm_slave_scan_state_base (ec_fsm_slave_scan_t *fsm, ec_datagram_t *datagram)
 Slave scan state: BASE. More...
 
void ec_fsm_slave_scan_state_dc_cap (ec_fsm_slave_scan_t *fsm, ec_datagram_t *datagram)
 Slave scan state: DC CAPABILITIES. More...
 
void ec_fsm_slave_scan_state_dc_times (ec_fsm_slave_scan_t *fsm, ec_datagram_t *datagram)
 Slave scan state: DC TIMES. More...
 
void ec_fsm_slave_scan_state_datalink (ec_fsm_slave_scan_t *fsm, ec_datagram_t *datagram)
 Slave scan state: DATALINK. More...
 
void ec_fsm_slave_scan_state_assign_sii (ec_fsm_slave_scan_t *fsm, ec_datagram_t *datagram)
 Slave scan state: ASSIGN_SII. More...
 
void ec_fsm_slave_scan_state_sii_identity (ec_fsm_slave_scan_t *fsm, ec_datagram_t *datagram)
 Slave scan state: SII IDENTITY. More...
 
void ec_fsm_slave_scan_state_sii_size (ec_fsm_slave_scan_t *fsm, ec_datagram_t *datagram)
 Slave scan state: SII SIZE. More...
 
void ec_fsm_slave_scan_state_sii_data (ec_fsm_slave_scan_t *fsm, ec_datagram_t *datagram)
 Slave scan state: SII DATA. More...
 
void ec_fsm_slave_scan_state_sii_parse (ec_fsm_slave_scan_t *fsm, ec_datagram_t *datagram)
 Slave scan state: SII PARSE. More...
 
void ec_fsm_slave_scan_state_mailbox_cleared (ec_fsm_slave_scan_t *fsm, ec_datagram_t *datagram)
 Slave scan state: Mailbox cleared. More...
 
void ec_fsm_slave_scan_state_preop (ec_fsm_slave_scan_t *fsm, ec_datagram_t *datagram)
 Slave scan state: PREOP. More...
 
void ec_fsm_slave_scan_state_sync (ec_fsm_slave_scan_t *fsm, ec_datagram_t *datagram)
 Slave scan state: SYNC. More...
 
void ec_fsm_slave_scan_state_pdos (ec_fsm_slave_scan_t *fsm, ec_datagram_t *datagram)
 Slave scan state: PDOS. More...
 
void ec_fsm_slave_scan_state_end (ec_fsm_slave_scan_t *fsm, ec_datagram_t *datagram)
 State: END. More...
 
void ec_fsm_slave_scan_state_error (ec_fsm_slave_scan_t *fsm, ec_datagram_t *datagram)
 State: ERROR. More...
 
void ec_fsm_slave_scan_state_retry (ec_fsm_slave_scan_t *fsm, ec_datagram_t *datagram)
 Slave scan state: scan retry. More...
 
void ec_fsm_slave_scan_state_retry_wait (ec_fsm_slave_scan_t *fsm, ec_datagram_t *datagram)
 Slave scan state: scan retry wait. More...
 
void ec_fsm_slave_scan_enter_datalink (ec_fsm_slave_scan_t *fsm, ec_datagram_t *datagram)
 Slave scan entry function: DATALINK. More...
 
void ec_fsm_slave_scan_enter_sii_identity (ec_fsm_slave_scan_t *fsm, ec_datagram_t *datagram)
 Enter slave scan state SII_IDENTITY. More...
 
void ec_fsm_slave_scan_enter_attach_sii (ec_fsm_slave_scan_t *fsm, ec_datagram_t *datagram)
 Enter slave scan state ATTACH_SII. More...
 
void ec_fsm_slave_scan_enter_sii_size (ec_fsm_slave_scan_t *fsm, ec_datagram_t *datagram)
 Enter slave scan state SII_SIZE. More...
 
void ec_fsm_slave_scan_enter_preop (ec_fsm_slave_scan_t *fsm, ec_datagram_t *datagram)
 Enter slave scan state PREOP. More...
 
void ec_fsm_slave_scan_enter_clear_mailbox (ec_fsm_slave_scan_t *fsm, ec_datagram_t *datagram)
 Enter slave scan state: Clear Mailbox. More...
 
void ec_fsm_slave_scan_enter_pdos (ec_fsm_slave_scan_t *fsm, ec_datagram_t *datagram)
 Enter slave scan state PDOS. More...
 
void ec_fsm_slave_scan_init (ec_fsm_slave_scan_t *fsm, ec_slave_t *slave, ec_fsm_slave_config_t *fsm_slave_config, ec_fsm_pdo_t *fsm_pdo)
 Constructor. More...
 
void ec_fsm_slave_scan_clear (ec_fsm_slave_scan_t *fsm)
 Destructor. More...
 
void ec_fsm_slave_scan_start (ec_fsm_slave_scan_t *fsm)
 Start slave scan state machine. More...
 
int ec_fsm_slave_scan_running (const ec_fsm_slave_scan_t *fsm)
 
int ec_fsm_slave_scan_exec (ec_fsm_slave_scan_t *fsm, ec_datagram_t *datagram)
 Executes the current state of the state machine. More...
 
int ec_fsm_slave_scan_success (const ec_fsm_slave_scan_t *fsm)
 
void ec_fsm_slave_scan_enter_assign_sii (ec_fsm_slave_scan_t *fsm, ec_datagram_t *datagram)
 Enter slave scan state ASSIGN_SII. More...
 

Detailed Description

EtherCAT slave state machines.

Definition in file fsm_slave_scan.c.

Macro Definition Documentation

◆ SCAN_RETRY_TIME

#define SCAN_RETRY_TIME   100

Time to wait before slave scan retry [ms].

Used to calculate time based on the jiffies counter.

Attention
Must be more than 10 to avoid problems on kernels that run with a timer interupt frequency of 100 Hz.

Definition at line 52 of file fsm_slave_scan.c.

Function Documentation

◆ ec_fsm_slave_scan_state_start()

void ec_fsm_slave_scan_state_start ( ec_fsm_slave_scan_t fsm,
ec_datagram_t datagram 
)

Slave scan state: START.

First state of the slave state machine. Writes the station address to the slave, according to its ring position.

Parameters
fsmslave state machine
datagramDatagram to use.

Definition at line 211 of file fsm_slave_scan.c.

◆ ec_fsm_slave_scan_state_address()

void ec_fsm_slave_scan_state_address ( ec_fsm_slave_scan_t fsm,
ec_datagram_t datagram 
)

Slave scan state: ADDRESS.

Parameters
fsmslave state machine
datagramDatagram to use.

Definition at line 229 of file fsm_slave_scan.c.

◆ ec_fsm_slave_scan_state_state()

void ec_fsm_slave_scan_state_state ( ec_fsm_slave_scan_t fsm,
ec_datagram_t datagram 
)

Slave scan state: STATE.

Parameters
fsmslave state machine
datagramDatagram to use.

Definition at line 268 of file fsm_slave_scan.c.

◆ ec_fsm_slave_scan_state_base()

void ec_fsm_slave_scan_state_base ( ec_fsm_slave_scan_t fsm,
ec_datagram_t datagram 
)

Slave scan state: BASE.

Parameters
fsmslave state machine
datagramDatagram to use.

Definition at line 314 of file fsm_slave_scan.c.

◆ ec_fsm_slave_scan_state_dc_cap()

void ec_fsm_slave_scan_state_dc_cap ( ec_fsm_slave_scan_t fsm,
ec_datagram_t datagram 
)

Slave scan state: DC CAPABILITIES.

Parameters
fsmslave state machine
datagramDatagram to use.

Definition at line 390 of file fsm_slave_scan.c.

◆ ec_fsm_slave_scan_state_dc_times()

void ec_fsm_slave_scan_state_dc_times ( ec_fsm_slave_scan_t fsm,
ec_datagram_t datagram 
)

Slave scan state: DC TIMES.

Parameters
fsmslave state machine
datagramDatagram to use.

Definition at line 437 of file fsm_slave_scan.c.

◆ ec_fsm_slave_scan_state_datalink()

void ec_fsm_slave_scan_state_datalink ( ec_fsm_slave_scan_t fsm,
ec_datagram_t datagram 
)

Slave scan state: DATALINK.

Parameters
fsmslave state machine
datagramDatagram to use.

Definition at line 680 of file fsm_slave_scan.c.

◆ ec_fsm_slave_scan_state_assign_sii()

void ec_fsm_slave_scan_state_assign_sii ( ec_fsm_slave_scan_t fsm,
ec_datagram_t datagram 
)

Slave scan state: ASSIGN_SII.

Parameters
fsmslave state machine
datagramDatagram to use.

Definition at line 726 of file fsm_slave_scan.c.

◆ ec_fsm_slave_scan_state_sii_identity()

void ec_fsm_slave_scan_state_sii_identity ( ec_fsm_slave_scan_t fsm,
ec_datagram_t datagram 
)

Slave scan state: SII IDENTITY.

Parameters
fsmslave state machine
datagramDatagram to use.

Definition at line 768 of file fsm_slave_scan.c.

◆ ec_fsm_slave_scan_state_sii_size()

void ec_fsm_slave_scan_state_sii_size ( ec_fsm_slave_scan_t fsm,
ec_datagram_t datagram 
)

Slave scan state: SII SIZE.

Parameters
fsmslave state machine
datagramDatagram to use.

Definition at line 1042 of file fsm_slave_scan.c.

◆ ec_fsm_slave_scan_state_sii_data()

void ec_fsm_slave_scan_state_sii_data ( ec_fsm_slave_scan_t fsm,
ec_datagram_t datagram 
)

Slave scan state: SII DATA.

Parameters
fsmslave state machine
datagramDatagram to use.

Definition at line 1138 of file fsm_slave_scan.c.

◆ ec_fsm_slave_scan_state_sii_parse()

void ec_fsm_slave_scan_state_sii_parse ( ec_fsm_slave_scan_t fsm,
ec_datagram_t datagram 
)

Slave scan state: SII PARSE.

Parameters
fsmslave state machine
datagramDatagram to use.

Definition at line 1192 of file fsm_slave_scan.c.

◆ ec_fsm_slave_scan_state_mailbox_cleared()

void ec_fsm_slave_scan_state_mailbox_cleared ( ec_fsm_slave_scan_t fsm,
ec_datagram_t datagram 
)

Slave scan state: Mailbox cleared.

Parameters
fsmslave state machine
datagramDatagram to use.

Definition at line 1562 of file fsm_slave_scan.c.

◆ ec_fsm_slave_scan_state_preop()

void ec_fsm_slave_scan_state_preop ( ec_fsm_slave_scan_t fsm,
ec_datagram_t datagram 
)

Slave scan state: PREOP.

Parameters
fsmslave state machine
datagramDatagram to use.

Definition at line 1463 of file fsm_slave_scan.c.

◆ ec_fsm_slave_scan_state_sync()

void ec_fsm_slave_scan_state_sync ( ec_fsm_slave_scan_t fsm,
ec_datagram_t datagram 
)

Slave scan state: SYNC.

Parameters
fsmslave state machine
datagramDatagram to use.

Definition at line 1483 of file fsm_slave_scan.c.

◆ ec_fsm_slave_scan_state_pdos()

void ec_fsm_slave_scan_state_pdos ( ec_fsm_slave_scan_t fsm,
ec_datagram_t datagram 
)

Slave scan state: PDOS.

Parameters
fsmslave state machine
datagramDatagram to use.

Definition at line 1634 of file fsm_slave_scan.c.

◆ ec_fsm_slave_scan_state_end()

void ec_fsm_slave_scan_state_end ( ec_fsm_slave_scan_t fsm,
ec_datagram_t datagram 
)

State: END.

Parameters
fsmslave state machine
datagramDatagram to use.

Definition at line 1704 of file fsm_slave_scan.c.

◆ ec_fsm_slave_scan_state_error()

void ec_fsm_slave_scan_state_error ( ec_fsm_slave_scan_t fsm,
ec_datagram_t datagram 
)

State: ERROR.

Parameters
fsmslave state machine
datagramDatagram to use.

Definition at line 1693 of file fsm_slave_scan.c.

◆ ec_fsm_slave_scan_state_retry()

void ec_fsm_slave_scan_state_retry ( ec_fsm_slave_scan_t fsm,
ec_datagram_t datagram 
)

Slave scan state: scan retry.

Parameters
fsmslave state machine
datagramDatagram to use.

Definition at line 1656 of file fsm_slave_scan.c.

◆ ec_fsm_slave_scan_state_retry_wait()

void ec_fsm_slave_scan_state_retry_wait ( ec_fsm_slave_scan_t fsm,
ec_datagram_t datagram 
)

Slave scan state: scan retry wait.

Parameters
fsmslave state machine
datagramDatagram to use.

Definition at line 1673 of file fsm_slave_scan.c.

◆ ec_fsm_slave_scan_enter_datalink()

void ec_fsm_slave_scan_enter_datalink ( ec_fsm_slave_scan_t fsm,
ec_datagram_t datagram 
)

Slave scan entry function: DATALINK.

Parameters
fsmslave state machine
datagramDatagram to use.

Definition at line 486 of file fsm_slave_scan.c.

◆ ec_fsm_slave_scan_enter_sii_identity()

void ec_fsm_slave_scan_enter_sii_identity ( ec_fsm_slave_scan_t fsm,
ec_datagram_t datagram 
)

Enter slave scan state SII_IDENTITY.

Parameters
fsmslave state machine
datagramDatagram to use.

Definition at line 505 of file fsm_slave_scan.c.

◆ ec_fsm_slave_scan_enter_attach_sii()

void ec_fsm_slave_scan_enter_attach_sii ( ec_fsm_slave_scan_t fsm,
ec_datagram_t datagram 
)

Enter slave scan state ATTACH_SII.

Parameters
fsmslave state machine
datagramDatagram to use.

Definition at line 523 of file fsm_slave_scan.c.

◆ ec_fsm_slave_scan_enter_sii_size()

void ec_fsm_slave_scan_enter_sii_size ( ec_fsm_slave_scan_t fsm,
ec_datagram_t datagram 
)

Enter slave scan state SII_SIZE.

Parameters
fsmslave state machine
datagramDatagram to use.

Definition at line 617 of file fsm_slave_scan.c.

◆ ec_fsm_slave_scan_enter_preop()

void ec_fsm_slave_scan_enter_preop ( ec_fsm_slave_scan_t fsm,
ec_datagram_t datagram 
)

Enter slave scan state PREOP.

Parameters
fsmslave state machine
datagramDatagram to use.

Definition at line 1423 of file fsm_slave_scan.c.

◆ ec_fsm_slave_scan_enter_clear_mailbox()

void ec_fsm_slave_scan_enter_clear_mailbox ( ec_fsm_slave_scan_t fsm,
ec_datagram_t datagram 
)

Enter slave scan state: Clear Mailbox.

Parameters
fsmslave state machine
datagramDatagram to use.

Definition at line 1541 of file fsm_slave_scan.c.

◆ ec_fsm_slave_scan_enter_pdos()

void ec_fsm_slave_scan_enter_pdos ( ec_fsm_slave_scan_t fsm,
ec_datagram_t datagram 
)

Enter slave scan state PDOS.

Parameters
fsmslave state machine
datagramDatagram to use.

Definition at line 1617 of file fsm_slave_scan.c.

◆ ec_fsm_slave_scan_init()

void ec_fsm_slave_scan_init ( ec_fsm_slave_scan_t fsm,
ec_slave_t slave,
ec_fsm_slave_config_t fsm_slave_config,
ec_fsm_pdo_t fsm_pdo 
)

Constructor.

Parameters
fsmSlave scanning state machine.
slaveslave to configure
fsm_slave_configSlave configuration state machine to use.
fsm_pdoPDO configuration machine to use.

Definition at line 109 of file fsm_slave_scan.c.

◆ ec_fsm_slave_scan_clear()

void ec_fsm_slave_scan_clear ( ec_fsm_slave_scan_t fsm)

Destructor.

Parameters
fsmslave state machine

Definition at line 130 of file fsm_slave_scan.c.

◆ ec_fsm_slave_scan_start()

void ec_fsm_slave_scan_start ( ec_fsm_slave_scan_t fsm)

Start slave scan state machine.

Parameters
fsmslave state machine

Definition at line 142 of file fsm_slave_scan.c.

◆ ec_fsm_slave_scan_running()

int ec_fsm_slave_scan_running ( const ec_fsm_slave_scan_t fsm)
Returns
false, if state machine has terminated
Parameters
fsmslave state machine

Definition at line 156 of file fsm_slave_scan.c.

◆ ec_fsm_slave_scan_exec()

int ec_fsm_slave_scan_exec ( ec_fsm_slave_scan_t fsm,
ec_datagram_t datagram 
)

Executes the current state of the state machine.

If the state machine's datagram is not sent or received yet, the execution of the state machine is delayed to the next cycle.

Returns
false, if state machine has terminated
Parameters
fsmslave state machine
datagramDatagram to use.

Definition at line 171 of file fsm_slave_scan.c.

◆ ec_fsm_slave_scan_success()

int ec_fsm_slave_scan_success ( const ec_fsm_slave_scan_t fsm)
Returns
true, if the state machine terminated gracefully
Parameters
fsmslave state machine

Definition at line 196 of file fsm_slave_scan.c.

◆ ec_fsm_slave_scan_enter_assign_sii()

void ec_fsm_slave_scan_enter_assign_sii ( ec_fsm_slave_scan_t fsm,
ec_datagram_t datagram 
)

Enter slave scan state ASSIGN_SII.

Parameters
fsmslave state machine
datagramDatagram to use.

Definition at line 656 of file fsm_slave_scan.c.