[etherlab-users] How to "upload/download" SDOs in application(*.c file)?

jerry itnet jerry.itnet at gmail.com
Wed Jun 20 18:07:56 CEST 2018


Hi, Gavin:

Thanks for your guide, now it can upload  SDO packet (seen with Wireshark).
But I got an error message on console:
               *  "Failed to execute SDO upload: Bad Address"*

------------------------------- my code
---------------------------------------------------------------------

...
        size_t *result_size;    uint8_t *target;

        const uint8_t *data;    uint32_t *abort_code;
  ecrt_master_sdo_upload(master, 5, 0xf880, 1, target, 4, result_size,
abort_code );


...

  if (ecrt_master_activate(master))         return -1;

  cycle_task();

...
---------------------------------------------------------------------------------------------------------------------


What could be wrong?
Thanks again!

Jerry




On Mon, Jun 18, 2018 at 7:25 PM, Gavin Lambert <gavin.lambert at tomra.com>
wrote:

> There are a few different kinds of API to do SDO transfers, depending on
> how and when you want to do them.  (But in short: no, that code is probably
> not correct.)
>
>
>
> ecrt_master_sdo_download/upload are blocking APIs; they are intended to
> be called before activating the master.  It is still possible to call them *on
> a separate thread* while the master is active (though be aware that this
> will cause lock contention so is not recommended if you have a fast cycle
> time).  You *must not* call it from your realtime thread.  These are
> intended for network discovery or other one-off or infrequent actions.
>
>
>
> ecrt_slave_config_create_sdo_request and the companion ecrt_sdo_request_*
> methods are intended for the case where you want to do transfers (either
> one-off or periodically) from the realtime thread while the master is
> active.  You create the request first (before activating the master) and
> then use the other methods to kick off a specific action and then poll it
> for completion from inside your realtime loop.  These are non-blocking.
>
>
>
> ecrt_slave_config_sdo* is for slave configuration settings that need to be
> written to the slave each time it reboots.  You call these once before
> activating the master and then the master itself takes care of sending
> these on first configuration and also if the slave needs to be reconfigured
> for any reason (eg. network disruption, rebooting).
>
>
>
> It's all explained in the documentation, the examples, and the header
> files themselves.
>
>
>
> *From:* jerry itnet
> *Sent:* Tuesday, 19 June 2018 04:15
> *Subject:* [etherlab-users] How to "upload/download" SDOs in
> application(*.c file)?
>
>
>
> I am confused on how to "upload/download" SDOs in an application.
>
> For example, am I correct by writing codes like:
>
>
>
> ------------- application.c ------------------------------
> ---------------------------------------------------------------------
>
> ....
>
>   uint16_t sdo_index = 0xf880;        uint8_t sdo_subindex = 1;
> uint32_t value = 0;
>   ecrt_slave_config_sdo32( sc, sdo_index, sdo_subindex, value);
>
>
>
>   if (ecrt_master_activate(master))         return -1;
>
>   size_t *result_size;    uint8_t *target;    const uint8_t *data;
> uint32_t *abort_code;
>   ecrt_master_sdo_upload(master, 5, 0xf880, 1, target, 4, result_size,
> abort_code );
>
> ...
>
>   cycle_task();
>
> ...
>
> ------------------------------------------------------------
> ----------------------------------------------------------------------
>
>
>
> Thank in advance for any hint!
>
> Jerry
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.etherlab.org/pipermail/etherlab-users/attachments/20180620/e8229d59/attachment-0003.htm>


More information about the Etherlab-users mailing list