Example #1
0
static void* run_master(void * arg) {
	
	ni = init_ec((char*)arg);
	init_slave_db();
	if(ni != 0) {
		printf("Attach netif \n\n");
		EtherCAT_DataLinkLayer::instance()->attach(ni);
		printf("Master initializing \n\n");
		EtherCAT_Master * EM = EtherCAT_Master::instance();
		printf("Getting slave handler\n");
		EtherCAT_SlaveHandler * sh_ek1100 = EM->get_slave_handler(0x03e9);
		//sleep(1);
		printf("Setting EK1100 to OP STATE\n");
		if(sh_ek1100->to_state(EC_OP_STATE))
			printf("EK1100 succesfully set in OP STATE\n");
		else
			printf("\nfailed to set EK1100 in OP STATE\n");
		printf("Getting slave handler\n");
		EtherCAT_SlaveHandler * sh_el4102 = EM->get_slave_handler(0x03ea);
		printf("Setting EL4102 to OP STATE\n");
		if(sh_el4102->to_state(EC_OP_STATE))
			printf("EL4102 succesfully set in OP STATE\n");
		else
			printf("\nfailed to set EL4102 in OP STATE!!\n");
		
		printf("AL initializing \n\n");
		EtherCAT_AL * AL = EtherCAT_AL::instance();
		
		///Set Channel 1 to 5V
		unsigned char msg[2] = {0xff, 0x3f};
		if(AL->isReady()) {
			printf("Test: Set Channel 1 to 5V: \n\n");
			int count = 0;
			while(count<100000) {
				EM->txandrx_PD(sizeof(msg),msg);
				count++;
			}
			printf("Test done.\n");
		}
		
		close_socket(ni);
		
	}
}
Example #2
0
void init(char *interface)
{
  struct netif *ni;

  // Initialize network interface
  if ((ni = init_ec(interface)) == NULL)
  {
    fprintf(stderr, "Unable to initialize interface: %s", interface);
    exit(-1);
  }

  // Initialize Application Layer (AL)
  EtherCAT_DataLinkLayer::instance()->attach(ni);
  EtherCAT_AL *al;
  if ((al = EtherCAT_AL::instance()) == NULL)
  {
    fprintf(stderr, "Unable to initialize Application Layer (AL): %08x", (int)al);
    exit(-1);
  }

  uint32_t num_slaves = al->get_num_slaves();
  if (num_slaves == 0)
  {
    fprintf(stderr, "Unable to locate any slaves");
    exit(-1);
  }

  // Initialize Master
  EtherCAT_Master *em;
  if ((em = EtherCAT_Master::instance()) == NULL)
  {
    fprintf(stderr, "Unable to initialize EtherCAT_Master: %08x", int(em));
    exit(-1);
  }

  static int startAddress = 0x00010000;

  for (unsigned int slave = 0; slave < num_slaves; ++slave)
  {
    EC_FixedStationAddress fsa(slave + 1);
    EtherCAT_SlaveHandler *sh = em->get_slave_handler(fsa);
    if (sh == NULL)
    {
      fprintf(stderr, "Unable to get slave handler #%d", slave);
      exit(-1);
    }

    if (sh->get_product_code() == WG05::PRODUCT_CODE)
    {
      printf("found a WG05 at #%d\n", slave);
      WG05 *dev = new WG05();
      dev->configure(startAddress, sh);
      devices.push_back(dev);
    }
    else if (sh->get_product_code() == WG06::PRODUCT_CODE)
    {
      printf("found a WG06 at #%d\n", slave);
      WG06 *dev = new WG06();
      dev->configure(startAddress, sh);
      devices.push_back(dev);
    }
    else
    {
      printf("found a %08x at #%d\n", sh->get_product_code(), slave);
      devices.push_back(NULL);
    }
  }

  BOOST_FOREACH(WG0X *device, devices)
  {
    Actuator a;
    if (!device) continue;
    if (!device->sh_->to_state(EC_OP_STATE))
    {
      fprintf(stderr, "Unable set device %d into OP_STATE", device->sh_->get_ring_position());
    }
    device->initialize(&a, true);
  }