25 #define pPORTFIO_SET ((vuint16_t *)PORTFIO_SET) 26 #define pPORTFIO_CLEAR ((vuint16_t *)PORTFIO_CLEAR) 27 #define pPORTFIO_DIR ((vuint16_t *)PORTFIO_DIR) 38 #define NUMBER_OF_SLAVES 9 113 data_ptr += module_index * 4;
117 return_value = *data_ptr++;
118 return_value += (*data_ptr++ << 8);
119 return_value += (*data_ptr++ << 16);
120 return_value += (*data_ptr++ << 24);
131 data_ptr += module_index * 4;
135 *data_ptr++ = (value >> 0) & 0xFF;
136 *data_ptr++ = (value >> 8) & 0xFF;
137 *data_ptr++ = (value >> 16) & 0xFF;
138 *data_ptr++ = (value >> 24) & 0xFF;
146 if (*
ec_slave[slave_no].inputs & BIT (module_index - 1 + startbit))
160 data_ptr += module_index * 2;
164 return_value = *data_ptr++;
165 return_value += (*data_ptr++ << 8);
176 data_ptr += module_index * 2;
180 *data_ptr++ = (value >> 0) & 0xFF;
181 *data_ptr++ = (value >> 8) & 0xFF;
189 if (*
ec_slave[slave_no].outputs & BIT (module_index - 1 + startbit))
226 rprintp (
"Processor load was %d:%d:%d (1s:5s:10s) with TT errors: %d\n",
258 rprintp(
"Starting simple test\n");
263 rprintp(
"ec_init succeeded.\n");
276 rprintp(
"Slaves mapped, state to SAFE_OP.\n");
283 rprintp(
"\nSlave:%d\n Name:%s\n Output size: %dbits\n Input size: %dbits\n State: %d\n Delay: %d[ns]\n Has DC: %d\n",
286 rprintp(
" Configured address: %x\n",
ec_slave[cnt].configadr);
287 rprintp(
" Outputs address: %x\n",
ec_slave[cnt].outputs);
288 rprintp(
" Inputs address: %x\n",
ec_slave[cnt].inputs);
292 rprintp(
" FMMU%1d Ls:%x Ll:%4d Lsb:%d Leb:%d Ps:%x Psb:%d Ty:%x Act:%x\n", j,
297 rprintp(
" FMMUfunc 0:%d 1:%d 2:%d 3:%d\n",
302 rprintp(
"Request operational state for all slaves\n");
313 rprintp(
"Operational state reached for all slaves.\n");
317 rprintp(
"Not all slaves reached operational state.\n");
323 rprintp(
"Slave %d State=0x%04x StatusCode=0x%04x\n",
351 if (slave_EL1008_1.
in1 || slave_EL1008_1.
in2 || slave_EL1008_1.
in3)
367 if (slave_EL1008_1.
in3)
368 task_delay(tick_from_ms(20));
370 task_delay(tick_from_ms(5));
372 digout = (
uint8) (digout | BIT((
dorun / 16) & 0xFF));
386 task_delay(tick_from_ms(2));
392 rprintp(
"Mismatch of network units!\n");
397 rprintp(
"No slaves found!\n");
399 rprintp(
"End simple test, close socket\n");
405 rprintp(
"ec_init failed");
407 rprintp(
"End program\n");
414 ASSERT (timeout_us > 4000);
432 #define USECS_PER_SEC 1000000 433 #define USECS_PER_TICK (USECS_PER_SEC / CFG_TICKS_PER_SECOND) 435 #define ABS(x) ((x) < 0 ? -(x) : (x)) 442 ASSERT (stop.
sec >= start.
sec);
443 if (stop.
sec == start.
sec)
451 ASSERT (difference_us >= 0);
452 return difference_us;
463 int32 measurement_us;
466 boolean is_deviation_within_tolerance;
473 deviation_us =
ABS (measurement_us - sleep_time_us);
474 is_deviation_within_tolerance = deviation_us <= usleep_accuracy_us;
475 ASSERT (is_deviation_within_tolerance);
490 #include <lwip/inet.h> 499 ASSERT (network == htons (host));
509 ASSERT (host == ntohs (network));
519 rprintp(
"SOEM (Simple Open EtherCAT Master)\nSimple test\n");
521 task_spawn (
"simpletest",
simpletest, 9, 8192, NULL);
static void test_osal_timer_timeout_us(const uint32 timeout_us)
static void test_osal_timer(void)
static void test_osal_current_time_for_delay_us(const int32 sleep_time_us)
void osal_timer_start(osal_timert *self, uint32 timeout_usec)
int ec_send_processdata(void)
uint16 oshw_ntohs(uint16 network)
PACKED_END ec_slavet ec_slave[EC_MAXSLAVE]
static void test_oshw_htons(void)
int32 get_input_int32(uint16 slave_no, uint8 module_index)
static int32 time_difference_us(const ec_timet stop, const ec_timet start)
int ec_receive_processdata(int timeout)
uint8 get_output_bit(uint16 slave_no, uint8 module_index)
void set_output_bit(uint16 slave_no, uint8 module_index, uint8 value)
static void test_oshw_ntohs(void)
void tt_error(uint32_t task_ix)
General typedefs and defines for EtherCAT.
ec_timet osal_current_time(void)
Headerfile for ethercatcoe.c.
int ec_config_map(void *pIOmap)
out_EL2622_t slave_EL2622_1
in_EL3061_t slave_EL3061_1
int ec_init(char *ifname)
in_EL1008_t slave_EL1008_2
Headerfile for ethercatfoe.c.
uint32 network_configuration(void)
in_EL1008_t slave_EL1008_1
static void my_cyclic_callback(void *arg)
out_EL4001_t slave_EL4001_1
uint16 oshw_htons(uint16 host)
int ec_writestate(uint16 slave)
void set_input_int32(uint16 slave_no, uint8 module_index, int32 value)
int16 get_output_int16(uint16 slave_no, uint8 module_index)
Headerfile for ethercatbase.c.
out_EL2622_t slave_EL2622_3
static void test_osal_current_time(void)
Headerfile for ethercatmain.c.
void simpletest(void *arg)
int osal_usleep(uint32 usec)
boolean osal_timer_is_expired(const osal_timert *self)
void set_output_int16(uint16 slave_no, uint8 module_index, int16 value)
uint16 ec_statecheck(uint16 slave, uint16 reqstate, int timeout)
out_EL2622_t slave_EL2622_2
Headerfile for ethercatconfig.c.
uint8 get_input_bit(uint16 slave_no, uint8 module_index)
int ec_config_init(uint8 usetable)
Headerfile for ethercatprint.c.