[etherlab-users] FW: Distributed Clock with Yaskawa SGDV drives
Florian Pose
fp at igh-essen.com
Mon Mar 12 10:07:31 CET 2012
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Am 12.03.2012 00:03, schrieb Graeme Foot:
> Hi,
>
> The slaves are not in OP before ecrt_master_activate(). They are
> in OP after ecrt_master_activate(), but before the first PDO
> datagrams were sent.
But this is what the application is responsible for. After activating
the master, the ecrt_master_send()/receive() methods have to be called
by the application, otherwise *no* bus communication (including slave
configuration) will take place. That's why I'm not understanding, why
slaves can go to OP before 'seeing' the fist process data...
> I was sorting out a few problems I was having at the time, so it's
> probably not such an issue anymore. However the main issue is that
> I'm running from a user space thread in RTAI.
>
> What I originally had was:
>
> ecrt_master_activate() ... setting up app objects to use pdo data
> etc ... rt_make_hard_real_time() rt_task_make_periodic(...,
> firstScanTime, ...) rt_task_wait_period() while (true) { ...
> ethercat polling stuff etc ... rt_task_wait_period() }
>
> I needed to call ecrt_master_activate() (and then set up objects
> referring to the pdo data) before making the thread hard realtime.
> In the time it took for the first hard period to start some of the
> slaves had already reached OP mode and missed a couple of PDO
> datagrams.
See above, after ecrt_master_activate() is called, there is no bus
configuration until you call ecrt_master_send() cyclically.
> So instead of that, I added an ethercat function to allow
> pre-assigning of the pdo data from user space so that the pdo data
> objects could be set up before calling ecrt_master_activate(). I'm
> also putting the ecrt_master_activate() call in a non-hard realtime
> helper thread so there is minimal time between the
> ecrt_master_activate() call and the PDO packets starting to be
> sent.
>
> It all comes down to ecrt_master_activate() not being able to be
> called from a hard realtime thread in RTAI because it drops the
> thread out of hard realtime.
Sure, because memory has to be allocated. It never was never meant to
be called in real-time.
So before futher discussions I would like to have an explanation, why
the slaves are configured before the application calls ecrt_master_send().
Could you tell me the exact code revision including all patches you use?
- --
Viele Grüße,
Florian
-----BEGIN PGP SIGNATURE-----
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/
iEYEARECAAYFAk9dvNMACgkQABFOIMygR8w43gCfTxQNvONoIgTnwWubf55ih3rA
ekoAnA9IRkZwPkzq+KPxwijhAld5+4Lc
=aGCa
-----END PGP SIGNATURE-----
More information about the Etherlab-users
mailing list