Hello Mark,

I don't have an EP2318-0001 to test this, but running our catalog extraction tool for the ep2318 produces:

static ec_pdo_entry_info_t pdo_entries[] = {
  {0x0000, 0x0000,  4},  //
  {0x7040, 0x0001,  1},  // Output (bool)
  {0x7050, 0x0001,  1},  // Output (bool)
  {0x7060, 0x0001,  1},  // Output (bool)
  {0x7070, 0x0001,  1},  // Output (bool)
  {0x6000, 0x0001,  1},  // Input (bool)
  {0x6010, 0x0001,  1},  // Input (bool)
  {0x6020, 0x0001,  1},  // Input (bool)
  {0x6030, 0x0001,  1},  // Input (bool)
  {0x0000, 0x0000,  4},  //
};

static ec_pdo_info_t pdos[] = {
  {0x1604,  2, pdo_entries +  0},  // Channel 5
  {0x1605,  1, pdo_entries +  2},  // Channel 6
  {0x1606,  1, pdo_entries +  3},  // Channel 7
  {0x1607,  1, pdo_entries +  4},  // Channel 8
  {0x1a00,  1, pdo_entries +  5},  // Channel 1
  {0x1a01,  1, pdo_entries +  6},  // Channel 2
  {0x1a02,  1, pdo_entries +  7},  // Channel 3
  {0x1a03,  2, pdo_entries +  8},  // Channel 4
};

static ec_sync_info_t syncs[] = {
  {0, EC_DIR_OUTPUT,  4, pdos +  0 },
  {1, EC_DIR_INPUT ,  4, pdos +  4 },
  {2, EC_DIR_INPUT ,  0, NULL },
  {3, EC_DIR_INPUT ,  0, NULL },
  {0xff}
};

that should look reasonably close to what ethercat cstruct gives you, at least with version stable-1.5

the code snippet you sent has both EP2318 and EL2004, maybe that's the issue. adapt to your setup, something along:

const static ec_pdo_entry_reg_t domain1_regs[] = {
 {EP2318Pos,  Beckhoff_EP2318, 0x6000, 0x0001, &off_di0, &bit_di0},
 {EP2318Pos,  Beckhoff_EP2318, 0x7040, 0x0001, &off_do0, &bit_do0},
 {}
}

Regards,
Matthieu



On 01/30/12 09:13, Mark Olson wrote:
To List,


Last week I posted a short notice indicating I was having difficulty
getting bi-directional modules to work, for example the EP2318-0001
(four digital inputs, four digital outputs). If I get it to work in both
input and output directions I'm certain I can get that module integrated
into our industrial application.



Below is the block from rtai_sample.c modiificed for the EP2318. One
concern is (and admittedly has been) the discrepancy between the
published values of the offset parameter (0x6000, 0x7000 vs 0x3001)
which has to be changed from what is described in the output by running
"ethercat pdos" and that described listed in the xml published by
Beckhoff (and where the 0x3001 comes from as used in the distributed
rtai_sample.c). For single directions in that parameter in the
ec_pdo_entry_reg_t I had been using output from "ethercat pdos" to
locate the value to use for the offset. Is that wrong? What method
should be used?



#define FPBlockSlavePos  0, 4
#define DigOutSlavePos 0, 2
#define DigOutSlavePos1 0, 3

#define Beckhoff_EL2004 0x00000002, 0x07D43052
#define Beckhoff_EL3162 0x00000002, 0x0C5A3052
#define Beckhoff_EP2318 0x00000002, 0x090e4052

static unsigned int off_dig_bi; // offsets for PDO entries
static unsigned int off_dig_out;

static unsigned int bit_offset1 ;
static unsigned int bit_offset2 ;

const static ec_pdo_entry_reg_t domain1_regs[] = {
    {FPBlockSlavePos,  Beckhoff_EP2318, 0x6000, 1,
&off_dig_bi,&bit_offset2},
//    {DigOutSlavePos, Beckhoff_EL2004, 0x3001, 1,
&off_dig_out,&bit_offset1},
     {DigOutSlavePos1, Beckhoff_EL2004, 0x7000, 1,
&off_dig_bi,&bit_offset2},
     {}
};


Last week it was suggested I use the output of "ethercat cstruct" to get
the bi-directional comms working. Yet, the output of cstruct only gives
SDO structure data, which is listed as "optional" in the rtai_sample.c
When compiled in it makes no difference in the produced data, although
it produces no errors.

Question? Has anyone out there gotten bi directional communications
working with Etherlab/Ethercat with RTAI for modules which have both
inputs and outputs? Do you have to do more setup work to the domain
besides using ecrt_domain_red_pdo_entry_list()? (as below)

   printk(KERN_INFO PFX "Registering PDO entries...\n");
     if (ecrt_domain_reg_pdo_entry_list(domain1, domain1_regs)) {
         printk(KERN_ERR PFX "PDO entry registration failed!\n");
         goto out_release_master;
     }

     printk(KERN_INFO PFX " offset %d:%d and %d:%d\n",
            off_dig_out,bit_offset1,
            off_dig_bi,bit_offset2) ;

     printk(KERN_INFO PFX "Activating master...\n");
     if (ecrt_master_activate(master)) {
         printk(KERN_ERR PFX "Failed to activate master!\n");
         goto out_release_master;
     }

     // Get internal process data for domain
     domain1_pd = ecrt_domain_data(domain1);


Suggestions?


Thanks in advance,

Mark Olson




_______________________________________________
etherlab-users mailing list
etherlab-users@etherlab.org
http://lists.etherlab.org/mailman/listinfo/etherlab-users


--
Matthieu Bec                GMTO Corp.
cell:  +1 626 354 9367      P.O. Box 90933
phone: +1 626 204 0527      Pasadena, CA 91109-0933

_______________________________________________
etherlab-users mailing list
etherlab-users@etherlab.org
http://lists.etherlab.org/mailman/listinfo/etherlab-users

Reply via email to