IgH EtherCAT Master  1.5.2
fsm_master.c File Reference

EtherCAT master state machine. More...

Go to the source code of this file.

Macros

#define EC_SYSTEM_TIME_TOLERANCE_NS   1000
 Time difference [ns] to tolerate without setting a new system time offset.
 

Functions

void ec_fsm_master_state_start (ec_fsm_master_t *fsm)
 Master state: START. More...
 
void ec_fsm_master_state_broadcast (ec_fsm_master_t *fsm)
 Master state: BROADCAST. More...
 
void ec_fsm_master_state_read_al_status (ec_fsm_master_t *fsm)
 Master state: READ AL STATUS. More...
 
void ec_fsm_master_state_dc_read_old_times (ec_fsm_master_t *fsm)
 Master state: DC READ OLD TIMES. More...
 
void ec_fsm_master_state_clear_addresses (ec_fsm_master_t *fsm)
 Master state: CLEAR ADDRESSES. More...
 
void ec_fsm_master_state_dc_measure_delays (ec_fsm_master_t *fsm)
 Master state: DC MEASURE DELAYS. More...
 
void ec_fsm_master_state_scan_slave (ec_fsm_master_t *fsm)
 Master state: SCAN SLAVE. More...
 
void ec_fsm_master_state_dc_read_offset (ec_fsm_master_t *fsm)
 Master state: DC READ OFFSET. More...
 
void ec_fsm_master_state_dc_write_offset (ec_fsm_master_t *fsm)
 Master state: DC WRITE OFFSET. More...
 
void ec_fsm_master_state_dc_reset_filter (ec_fsm_master_t *fsm)
 Master state: DC RESET FILTER. More...
 
void ec_fsm_master_state_write_sii (ec_fsm_master_t *fsm)
 Master state: WRITE SII. More...
 
void ec_fsm_master_state_reboot_slave (ec_fsm_master_t *fsm)
 Master state: REBOOT SLAVE. More...
 
void ec_fsm_master_enter_dc_read_old_times (ec_fsm_master_t *fsm)
 Start reading old timestamps from slaves. More...
 
void ec_fsm_master_enter_clear_addresses (ec_fsm_master_t *fsm)
 Start clearing slave addresses. More...
 
void ec_fsm_master_enter_write_system_times (ec_fsm_master_t *fsm)
 Start writing DC system times. More...
 
void ec_fsm_master_init (ec_fsm_master_t *fsm, ec_master_t *master, ec_datagram_t *datagram)
 Constructor. More...
 
void ec_fsm_master_clear (ec_fsm_master_t *fsm)
 Destructor. More...
 
void ec_fsm_master_reset (ec_fsm_master_t *fsm)
 Reset state machine. More...
 
int ec_fsm_master_exec (ec_fsm_master_t *fsm)
 Executes the current state of the state machine. More...
 
int ec_fsm_master_idle (const ec_fsm_master_t *fsm)
 
void ec_fsm_master_restart (ec_fsm_master_t *fsm)
 Restarts the master state machine. More...
 
int ec_fsm_master_action_process_sii (ec_fsm_master_t *fsm)
 Check for pending SII write requests and process one. More...
 
void ec_fsm_master_action_idle (ec_fsm_master_t *fsm)
 Master action: IDLE. More...
 
void ec_fsm_master_action_next_slave_state (ec_fsm_master_t *fsm)
 Master action: Get state of next slave. More...
 
void ec_fsm_master_action_configure (ec_fsm_master_t *fsm)
 Master action: Configure. More...
 
void ec_fsm_master_enter_dc_measure_delays (ec_fsm_master_t *fsm)
 Start measuring DC delays. More...
 
u64 ec_fsm_master_dc_offset32 (ec_fsm_master_t *fsm, u64 system_time, u64 old_offset, u64 app_time_sent)
 Configure 32 bit time offset. More...
 
u64 ec_fsm_master_dc_offset64 (ec_fsm_master_t *fsm, u64 system_time, u64 old_offset, u64 app_time_sent)
 Configure 64 bit time offset. More...
 

Detailed Description

EtherCAT master state machine.

Definition in file fsm_master.c.

Function Documentation

◆ ec_fsm_master_state_start()

void ec_fsm_master_state_start ( ec_fsm_master_t fsm)

Master state: START.

Starts with getting slave count and slave states.

Parameters
fsmMaster state machine.

Definition at line 192 of file fsm_master.c.

◆ ec_fsm_master_state_broadcast()

void ec_fsm_master_state_broadcast ( ec_fsm_master_t fsm)

Master state: BROADCAST.

Processes the broadcast read slave count and slaves states.

Parameters
fsmMaster state machine.

Definition at line 263 of file fsm_master.c.

◆ ec_fsm_master_state_read_al_status()

void ec_fsm_master_state_read_al_status ( ec_fsm_master_t fsm)

Master state: READ AL STATUS.

Fetches the AL state of a slave.

Parameters
fsmMaster state machine.

Definition at line 713 of file fsm_master.c.

◆ ec_fsm_master_state_dc_read_old_times()

void ec_fsm_master_state_dc_read_old_times ( ec_fsm_master_t fsm)

Master state: DC READ OLD TIMES.

Parameters
fsmMaster state machine.

Definition at line 819 of file fsm_master.c.

◆ ec_fsm_master_state_clear_addresses()

void ec_fsm_master_state_clear_addresses ( ec_fsm_master_t fsm)

Master state: CLEAR ADDRESSES.

Parameters
fsmMaster state machine.

Definition at line 953 of file fsm_master.c.

◆ ec_fsm_master_state_dc_measure_delays()

void ec_fsm_master_state_dc_measure_delays ( ec_fsm_master_t fsm)

Master state: DC MEASURE DELAYS.

Parameters
fsmMaster state machine.

Definition at line 993 of file fsm_master.c.

◆ ec_fsm_master_state_scan_slave()

void ec_fsm_master_state_scan_slave ( ec_fsm_master_t fsm)

Master state: SCAN SLAVE.

Waits until slave scanning is completed.

Parameters
fsmMaster state machine.

Definition at line 1048 of file fsm_master.c.

◆ ec_fsm_master_state_dc_read_offset()

void ec_fsm_master_state_dc_read_offset ( ec_fsm_master_t fsm)

Master state: DC READ OFFSET.

Parameters
fsmMaster state machine.

Definition at line 1214 of file fsm_master.c.

◆ ec_fsm_master_state_dc_write_offset()

void ec_fsm_master_state_dc_write_offset ( ec_fsm_master_t fsm)

Master state: DC WRITE OFFSET.

Parameters
fsmMaster state machine.

Definition at line 1294 of file fsm_master.c.

◆ ec_fsm_master_state_dc_reset_filter()

void ec_fsm_master_state_dc_reset_filter ( ec_fsm_master_t fsm)

Master state: DC RESET FILTER.

Parameters
fsmMaster state machine.

Definition at line 1339 of file fsm_master.c.

◆ ec_fsm_master_state_write_sii()

void ec_fsm_master_state_write_sii ( ec_fsm_master_t fsm)

Master state: WRITE SII.

Parameters
fsmMaster state machine.

Definition at line 1374 of file fsm_master.c.

◆ ec_fsm_master_state_reboot_slave()

void ec_fsm_master_state_reboot_slave ( ec_fsm_master_t fsm)

Master state: REBOOT SLAVE.

Parameters
fsmMaster state machine.

Definition at line 774 of file fsm_master.c.

◆ ec_fsm_master_enter_dc_read_old_times()

void ec_fsm_master_enter_dc_read_old_times ( ec_fsm_master_t fsm)

Start reading old timestamps from slaves.

Parameters
fsmMaster state machine.

Definition at line 799 of file fsm_master.c.

◆ ec_fsm_master_enter_clear_addresses()

void ec_fsm_master_enter_clear_addresses ( ec_fsm_master_t fsm)

Start clearing slave addresses.

Parameters
fsmMaster state machine.

Definition at line 870 of file fsm_master.c.

◆ ec_fsm_master_enter_write_system_times()

void ec_fsm_master_enter_write_system_times ( ec_fsm_master_t fsm)

Start writing DC system times.

Parameters
fsmMaster state machine.

Definition at line 1098 of file fsm_master.c.

◆ ec_fsm_master_init()

void ec_fsm_master_init ( ec_fsm_master_t fsm,
ec_master_t master,
ec_datagram_t datagram 
)

Constructor.

Parameters
fsmMaster state machine.
masterEtherCAT master.
datagramDatagram object to use.

Definition at line 83 of file fsm_master.c.

◆ ec_fsm_master_clear()

void ec_fsm_master_clear ( ec_fsm_master_t fsm)

Destructor.

Parameters
fsmMaster state machine.

Definition at line 103 of file fsm_master.c.

◆ ec_fsm_master_reset()

void ec_fsm_master_reset ( ec_fsm_master_t fsm)

Reset state machine.

Parameters
fsmMaster state machine.

Definition at line 116 of file fsm_master.c.

◆ ec_fsm_master_exec()

int ec_fsm_master_exec ( ec_fsm_master_t fsm)

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
true, if the state machine was executed
Parameters
fsmMaster state machine.

Definition at line 145 of file fsm_master.c.

◆ ec_fsm_master_idle()

int ec_fsm_master_idle ( const ec_fsm_master_t fsm)
Returns
true, if the state machine is in an idle phase
Parameters
fsmMaster state machine.

Definition at line 164 of file fsm_master.c.

◆ ec_fsm_master_restart()

void ec_fsm_master_restart ( ec_fsm_master_t fsm)

Restarts the master state machine.

Parameters
fsmMaster state machine.

Definition at line 175 of file fsm_master.c.

◆ ec_fsm_master_action_process_sii()

int ec_fsm_master_action_process_sii ( ec_fsm_master_t fsm)

Check for pending SII write requests and process one.

Returns
non-zero, if an SII write request is processed.
Parameters
fsmMaster state machine.

Definition at line 447 of file fsm_master.c.

◆ ec_fsm_master_action_idle()

void ec_fsm_master_action_idle ( ec_fsm_master_t fsm)

Master action: IDLE.

Does secondary work.

Parameters
fsmMaster state machine.

Definition at line 485 of file fsm_master.c.

◆ ec_fsm_master_action_next_slave_state()

void ec_fsm_master_action_next_slave_state ( ec_fsm_master_t fsm)

Master action: Get state of next slave.

Parameters
fsmMaster state machine.

Definition at line 501 of file fsm_master.c.

◆ ec_fsm_master_action_configure()

void ec_fsm_master_action_configure ( ec_fsm_master_t fsm)

Master action: Configure.

Parameters
fsmMaster state machine.

Definition at line 674 of file fsm_master.c.

◆ ec_fsm_master_enter_dc_measure_delays()

void ec_fsm_master_enter_dc_measure_delays ( ec_fsm_master_t fsm)

Start measuring DC delays.

Parameters
fsmMaster state machine.

Definition at line 886 of file fsm_master.c.

◆ ec_fsm_master_dc_offset32()

u64 ec_fsm_master_dc_offset32 ( ec_fsm_master_t fsm,
u64  system_time,
u64  old_offset,
u64  app_time_sent 
)

Configure 32 bit time offset.

Returns
New offset.
Parameters
fsmMaster state machine.
system_timeSystem time register.
old_offsetTime offset register.
app_time_sentMaster app time by reading.

Definition at line 1144 of file fsm_master.c.

◆ ec_fsm_master_dc_offset64()

u64 ec_fsm_master_dc_offset64 ( ec_fsm_master_t fsm,
u64  system_time,
u64  old_offset,
u64  app_time_sent 
)

Configure 64 bit time offset.

Returns
New offset.
Parameters
fsmMaster state machine.
system_timeSystem time register.
old_offsetTime offset register.
app_time_sentMaster app time by reading.

Definition at line 1181 of file fsm_master.c.