Re: [etherlab-users] Beginner: Modifying the example code "user"

2017-04-05 Thread Justin Hunt
Hi Gavin,

I'm finally getting it. What you said makes perfect sense. The code is
working beautifully now. Thank you for your help! I hope this thread helps
other new user get their projects up and running.

On Apr 5, 2017 12:00 AM, "Gavin Lambert" <gav...@compacsort.com> wrote:

Unless your slave device is a Beckhoff EL3102, that name is going to
confuse you later.  You should use a more accurate name, or just specify
the values directly instead of using a #define.



Similarly, you haven’t changed AnaInSlavePos from its previous value of 0,2
which specifies that the slave is the third device in the network, which is
probably not correct for your network.



You should probably spend some time reading the documentation for the
library and understand what all of these tables and values actually mean,
based on the documentation for the APIs they are passed to and EtherCAT
networks in general.



(Also note that while it’s ok to call printf from your real-time loop while
you’re experimenting, you’ll have to remove it for a real application.
printf is blocking and too slow to maintain a stable real-time loop; you
have to be very careful what code you put in there.)



*From:* Justin Hunt [mailto:jphu...@asu.edu]
*Sent:* Wednesday, 5 April 2017 13:32
*To:* Gavin Lambert <gavin.lamb...@compacsort.com>
*Cc:* etherlab-users@etherlab.org
*Subject:* Re: [etherlab-users] Beginner: Modifying the example code "user"



Hi Gavin,

Thank you for the reply, I really appreciate your time. I worked today to
implement your instructions. Here is what I did:

1) I changed the original definition "#define Beckhoff_EL3102 0x0002,
0x0c1e3052" to include the vendor ID and product code of my sensor, which I
got from using Konsole command "ethercat slaves -v." So now it reads
"#define Beckhoff_EL3102 0x0732, 0x26483052"

2) I updated the domain1_regs to include only analog input from the index
and sub index of the sensor force value I wish to read, like so:

const static ec_pdo_entry_reg_t domain1_regs[] = {
{AnaInSlavePos,  Beckhoff_EL3102, 0x6000, 2, _ana_in_value},
{}

I am not sure if these two changes address your instructions correctly. I
can however compile and run the code now. I tried to add the following line
under cyclic_task() to see if I could stream the data to the Konsole, but
it does not see to work:

printf("AnaIn: value %u\n", EC_READ_U32(domain1_pd + off_ana_in_value));



included below is the complete code in case it is needed.

 ***
*/

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

/***
*/

#include "ecrt.h"

/***
*/

// Application parameters
#define FREQUENCY 100
#define PRIORITY 1

// Optional features
#define CONFIGURE_PDOS  1
#define SDO_ACCESS  0

/***
*/

// EtherCAT
static ec_master_t *master = NULL;
static ec_master_state_t master_state = {};

static ec_domain_t *domain1 = NULL;
static ec_domain_state_t domain1_state = {};

static ec_slave_config_t *sc_ana_in = NULL;
static ec_slave_config_state_t sc_ana_in_state = {};

// Timer
static unsigned int sig_alarms = 0;
static unsigned int user_alarms = 0;

/***
*/

// process data
static uint8_t *domain1_pd = NULL;

#define BusCouplerPos  0, 0 //#define assigns 0, 0 to the name BusCouplerPos
#define DigOutSlavePos 0, 2
#define AnaInSlavePos  0, 3
#define AnaOutSlavePos 0, 4

#define Beckhoff_EK1100 0x0002, 0x044c2c52
//#define Beckhoff_EL2004 0x0002, 0x07d43052
#define Beckhoff_EL2032 0x0002, 0x07f03052
#define Beckhoff_EL3152 0x0002, 0x0c503052
//#define Beckhoff_EL3102 0x0002, 0x0c1e3052
#define Beckhoff_EL3102 0x0732, 0x26483052
#define Beckhoff_EL4102 0x0002, 0x10063052
//test
// offsets for PDO entries
static unsigned int off_ana_in_status;
static unsigned int off_ana_in_value;
//static unsigned int off_ana_out;
//static unsigned int off_dig_out;

const static ec_pdo_entry_reg_t domain1_regs[] = {
{AnaInSlavePos,  Beckhoff_EL3102, 0x6000, 2, _ana_in_value},
{}
};

static unsigned int counter = 0;
static unsigned int blink = 0;

/***
**/

#if CONFIGURE_PDOS


static ec_pdo_entry_info_t el3102_pdo_entries[] = {
{0x7010, 1, 32}, /* Control 1 */
{0x7010, 2, 32}, /* Control 2 */
{0x6000, 1, 32}, /* Fx/Gage0 */
{0x6000, 2, 32}, /* Fy/Gage1 */
{0x6000, 3, 32}, /* Fz/Gage2 */
{0x6000, 4, 32}, /* Tx/Gage3 */
{0x6000, 5, 32}, /* Ty/Gage3 */
{0x6000, 6, 32}, /* Tz/Gage3 */
{0x6010, 0, 32}, /* SubIndex 000 */
{0x6020, 0,

Re: [etherlab-users] Beginner: Modifying the example code "user"

2017-04-04 Thread Justin Hunt
 el2004_syncs)) {
// fprintf(stderr, "Failed to configure PDOs.\n");
// return -1;
// }
#endif

// Create configuration for bus coupler
sc = ecrt_master_slave_config(master, BusCouplerPos, Beckhoff_EL3102);
if (!sc)
return -1;

if (ecrt_domain_reg_pdo_entry_list(domain1, domain1_regs)) {
fprintf(stderr, "PDO entry registration failed!\n");
return -1;
}

printf("Activating master...\n");
if (ecrt_master_activate(master))
return -1;

if (!(domain1_pd = ecrt_domain_data(domain1))) {
return -1;
}

#if PRIORITY
pid_t pid = getpid();
if (setpriority(PRIO_PROCESS, pid, -19))
fprintf(stderr, "Warning: Failed to set priority: %s\n",
strerror(errno));
#endif

sa.sa_handler = signal_handler;
sigemptyset(_mask);
sa.sa_flags = 0;
if (sigaction(SIGALRM, , 0)) {
fprintf(stderr, "Failed to install signal handler!\n");
return -1;
}

printf("Starting timer...\n");
tv.it_interval.tv_sec = 0;
tv.it_interval.tv_usec = 10 / FREQUENCY;
tv.it_value.tv_sec = 0;
tv.it_value.tv_usec = 1000;
if (setitimer(ITIMER_REAL, , NULL)) {
fprintf(stderr, "Failed to start timer: %s\n", strerror(errno));
return 1;
}

printf("Started.\n");
while (1) {
  //printf("test");
pause();

#if 0
struct timeval t;
gettimeofday(, NULL);
printf("%u.%06u\n", t.tv_sec, t.tv_usec);
#endif

while (sig_alarms != user_alarms) {
cyclic_task();
//fprintf("t");
    user_alarms++;
}
}

return 0;
}

/***
*/




On Mon, Apr 3, 2017 at 7:10 PM, Gavin Lambert <gav...@compacsort.com> wrote:

> You’re halfway there.  You also need to update the domain1_regs to
> reflect the layout of your network (type and position of all slave devices)
> and to define variables to receive the offsets into domain memory to use
> for transferring the corresponding PDOs.
>
>
>
> *From:* Justin Hunt
> *Sent:* Tuesday, 4 April 2017 13:50
> *To:* etherlab-users@etherlab.org
> *Subject:* [etherlab-users] Beginner: Modifying the example code "user"
>
>
>
> Hello all,
>
>
>
> I have an force sensor with ethercat communication. I got EtherCAT Master
> installed on my system (thanks to this form's help) and have been using the
> terminal commands included in the PDF manual to collect data, which has
> been working great.
>
>
>
> I would now like to try to implement the equivalent commands in C++ so
> that I can stream the data and sample at a higher rate. However I am
> struggling to do so. I have tried to modify the example code "user" with
> the pdo entry info I get from the "ethercat cstruct" Konsole command, which
> outputs:
>
> ec_pdo_entry_info_t slave_0_pdo_entries[] = {
> {0x7010, 0x01, 32}, /* Control 1 */
> {0x7010, 0x02, 32}, /* Control 2 */
> {0x6000, 0x01, 32}, /* Fx/Gage0 */
> {0x6000, 0x02, 32}, /* Fy/Gage1 */
> {0x6000, 0x03, 32}, /* Fz/Gage2 */
> {0x6000, 0x04, 32}, /* Tx/Gage3 */
> {0x6000, 0x05, 32}, /* Ty/Gage3 */
> {0x6000, 0x06, 32}, /* Tz/Gage3 */
> {0x6010, 0x00, 32}, /* SubIndex 000 */
> {0x6020, 0x00, 32}, /* SubIndex 000 */
> };
>
> ec_pdo_info_t slave_0_pdos[] = {
> {0x1601, 2, slave_0_pdo_entries + 0}, /* DO RxPDO-Map */
> {0x1a00, 8, slave_0_pdo_entries + 2}, /* DI TxPDO-Map */
> };
>
> ec_sync_info_t slave_0_syncs[] = {
> {0, EC_DIR_OUTPUT, 0, NULL, EC_WD_DISABLE},
> {1, EC_DIR_INPUT, 0, NULL, EC_WD_DISABLE},
> {2, EC_DIR_OUTPUT, 1, slave_0_pdos + 0, EC_WD_ENABLE},
> {3, EC_DIR_INPUT, 1, slave_0_pdos + 1, EC_WD_DISABLE},
> {0xff}
> };
>
> Since I am working with an analog force sensor, I replaced the analog
> input of the example code "user" with the above info and compiled the code.
> It compiles fine but when I try to run it I get the following error:
>
> Configuring PDOs...
> Failed to register PDO entry: No such file or directory
> PDO entry registration failed!
>
> Any ideas why it can't register the PDO entry? I included my complete code
> below in case having a look helps. Thank you for your time all.
>
>
> /***
> **
>  *
>  *  $Id: main.c,v 6a6dec6fc806 2012/09/19 17:46:58 fp $
>  *
>  *  Copyright (C) 2007-2009  Florian Pose, Ingenieurgemeinschaft IgH
>  *
>  *  This file is part of the IgH EtherCAT Master.
>  *
>  *  The IgH EtherCAT Master is free software; you 

[etherlab-users] Beginner: Modifying the example code "user"

2017-04-03 Thread Justin Hunt
Hello all,

I have an force sensor with ethercat communication. I got EtherCAT Master
installed on my system (thanks to this form's help) and have been using the
terminal commands included in the PDF manual to collect data, which has
been working great.

I would now like to try to implement the equivalent commands in C++ so that
I can stream the data and sample at a higher rate. However I am struggling
to do so. I have tried to modify the example code "user" with the pdo entry
info I get from the "ethercat cstruct" Konsole command, which outputs:

ec_pdo_entry_info_t slave_0_pdo_entries[] = {
{0x7010, 0x01, 32}, /* Control 1 */
{0x7010, 0x02, 32}, /* Control 2 */
{0x6000, 0x01, 32}, /* Fx/Gage0 */
{0x6000, 0x02, 32}, /* Fy/Gage1 */
{0x6000, 0x03, 32}, /* Fz/Gage2 */
{0x6000, 0x04, 32}, /* Tx/Gage3 */
{0x6000, 0x05, 32}, /* Ty/Gage3 */
{0x6000, 0x06, 32}, /* Tz/Gage3 */
{0x6010, 0x00, 32}, /* SubIndex 000 */
{0x6020, 0x00, 32}, /* SubIndex 000 */
};

ec_pdo_info_t slave_0_pdos[] = {
{0x1601, 2, slave_0_pdo_entries + 0}, /* DO RxPDO-Map */
{0x1a00, 8, slave_0_pdo_entries + 2}, /* DI TxPDO-Map */
};

ec_sync_info_t slave_0_syncs[] = {
{0, EC_DIR_OUTPUT, 0, NULL, EC_WD_DISABLE},
{1, EC_DIR_INPUT, 0, NULL, EC_WD_DISABLE},
{2, EC_DIR_OUTPUT, 1, slave_0_pdos + 0, EC_WD_ENABLE},
{3, EC_DIR_INPUT, 1, slave_0_pdos + 1, EC_WD_DISABLE},
{0xff}
};


Since I am working with an analog force sensor, I replaced the analog input
of the example code "user" with the above info and compiled the code. It
compiles fine but when I try to run it I get the following error:

Configuring PDOs...
Failed to register PDO entry: No such file or directory
PDO entry registration failed!

Any ideas why it can't register the PDO entry? I included my complete code
below in case having a look helps. Thank you for your time all.


/*
 *
 *  $Id: main.c,v 6a6dec6fc806 2012/09/19 17:46:58 fp $
 *
 *  Copyright (C) 2007-2009  Florian Pose, Ingenieurgemeinschaft IgH
 *
 *  This file is part of the IgH EtherCAT Master.
 *
 *  The IgH EtherCAT Master is free software; you can redistribute it and/or
 *  modify it under the terms of the GNU General Public License version 2,
as
 *  published by the Free Software Foundation.
 *
 *  The IgH EtherCAT Master is distributed in the hope that it will be
useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
General
 *  Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License along
 *  with the IgH EtherCAT Master; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301
USA
 *
 *  ---
 *
 *  The license mentioned above concerns the source code only. Using the
 *  EtherCAT technology and brand is only permitted in compliance with the
 *  industrial property and similar rights of Beckhoff Automation GmbH.
 *
 /

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

//

#include "ecrt.h"

//

// Application parameters
#define FREQUENCY 100
#define PRIORITY 1

// Optional features
#define CONFIGURE_PDOS  1
#define SDO_ACCESS  0

//

// EtherCAT
static ec_master_t *master = NULL;
static ec_master_state_t master_state = {};

static ec_domain_t *domain1 = NULL;
static ec_domain_state_t domain1_state = {};

static ec_slave_config_t *sc_ana_in = NULL;
static ec_slave_config_state_t sc_ana_in_state = {};

// Timer
static unsigned int sig_alarms = 0;
static unsigned int user_alarms = 0;

//

// process data
static uint8_t *domain1_pd = NULL;

#define BusCouplerPos  0, 0 //#define assigns 0, 0 to the name BusCouplerPos
#define DigOutSlavePos 0, 2
#define AnaInSlavePos  0, 3
#define AnaOutSlavePos 0, 4

#define Beckhoff_EK1100 0x0002, 0x044c2c52
//#define Beckhoff_EL2004 0x0002, 0x07d43052
#define Beckhoff_EL2032 0x0002, 0x07f03052
#define Beckhoff_EL3152 0x0002, 0x0c503052
#define Beckhoff_EL3102 0x0002, 0x0c1e3052
#define Beckhoff_EL4102 0x0002, 0x10063052
//test
// offsets for PDO entries
static unsigned int off_ana_in_status;
static unsigned int off_ana_in_value;
static unsigned int off_ana_out;
static unsigned int off_dig_out;

const static ec_pdo_entry_reg_t domain1_regs[] = {
{AnaInSlavePos,  Beckhoff_EL3102, 0x6000, 1, _ana_in_status},
{AnaInSlavePos,  Beckhoff_EL3102, 0x6000, 2, _ana_in_value},
{AnaOutSlavePos, Beckhoff_EL4102, 0x6000, 1, 

[etherlab-users] Purpose of the PdCom Library

2017-02-10 Thread Justin Hunt
Hello Everyone,

I was looking into the PdCom library and it appears that it can be used
independently of the other Etherlab software components. Does this mean
that I can use it directly to stream data from an ethercat device to my
Linux computer?

Thanks,
Justin
___
etherlab-users mailing list
etherlab-users@etherlab.org
http://lists.etherlab.org/mailman/listinfo/etherlab-users


Re: [etherlab-users] etherlab-users Digest, Vol 115, Issue 11

2017-01-24 Thread Justin Hunt
Thank you for the response!

I am currently trying to install EtherCAT Master and I am running into a
problem. When trying to configure and build using the command:

./*configure --disable-8139too --enable-e1000e*

I get the error:

*checking for kernel for e1000e driver... configure: error: kernel 4.2 not
available for e1000e driver!*

Do I need to use a different kernel, or is there a work around to this
problem?




On Tue, Jan 24, 2017 at 4:00 AM, <etherlab-users-requ...@etherlab.org>
wrote:

> Send etherlab-users mailing list submissions to
> etherlab-users@etherlab.org
>
> To subscribe or unsubscribe via the World Wide Web, visit
> http://lists.etherlab.org/mailman/listinfo/etherlab-users
> or, via email, send a message with subject or body 'help' to
> etherlab-users-requ...@etherlab.org
>
> You can reach the person managing the list at
> etherlab-users-ow...@etherlab.org
>
> When replying, please edit your Subject line so it is more specific
> than "Re: Contents of etherlab-users digest..."
>
>
> Today's Topics:
>
>1. Using EtherLab to to collect force sensor data (Justin Hunt)
>2. Re: Using EtherLab to to collect force sensor data
>   (Dr.-Ing. Wilhelm Hagemeister)
>
>
> ------
>
> Message: 1
> Date: Mon, 23 Jan 2017 17:44:04 -0700
> From: Justin Hunt <jphu...@asu.edu>
> To: etherlab-users@etherlab.org
> Subject: [etherlab-users] Using EtherLab to to collect force sensor
> data
> Message-ID:
>