[etherlab-users] domain process data persistence

Thomas Paoloni thomas at digithom.it
Mon Oct 8 09:33:41 CEST 2012


I don't agree completely with you.
You're right, but if I write a certain bit out to 1 I expect that nobody 
changes it's state and so, the actual value on the fieldbus should 
remain 1 up to the end of the program, even if I don't write 1 continuously.
I see this as a sort of bug, I'll write a workaround buffering the 
output section of the domain area but I admit that I don't like this too 
much ...

Thanks,
Thomas.




On 08/10/2012 09:05, Thomas Bitsky, Jr. wrote:
>
> I think you're thinking of it wrong. The data isn't cleared, it's 
> replaced by the actual value on the field bus. So, if you don't write 
> the value out to update the field bus, then the packet gets returned 
> with the value that is out there.
>
> Thomas C Bitsky Jr
> Lead Developer and Application Engineer
> ADC | automateddesign.com <http://automateddesign.com>
> (Sent from my mobile device.)
>
> On Oct 6, 2012 4:14 AM, "Thomas Paoloni" <thomas at digithom.it 
> <mailto:thomas at digithom.it>> wrote:
>
>     Hi all,
>
>     even if I'm dealing with ethercat since more than one year, I'm in
>     front of a very basic question ...
>     As from I can see, the data in master->slave direction in the
>     domain_pd area are not preserved from an update to another.
>     I'mean that I need to write out data to domain_pd area at each
>     cycle, even if I data is not changed and theoretically I don't
>     need to update some parts of the pdo area.
>
>     Just applying this to the basic example in examples/user
>
>     void cyclic_task()
>     {
>         int i;
>
>         // receive process data
>         ecrt_master_receive(master);
>         ecrt_domain_process(domain1);
>
>         // check process data state (optional)
>         check_domain1_state();
>
>         if (counter) {
>             counter--;
>         } else { // do this at 1 Hz
>             counter = FREQUENCY;
>
>             // calculate new process data
>             blink = !blink;
>         }
>
>         EC_WRITE_U8(domain1_pd + off_dig_out, blink ? 0x06 : 0x09);
>
>         // send process data
>         ecrt_domain_queue(domain1);
>         ecrt_master_send(master);
>     }
>
>
>     moving the EC_WRITE_U8 inside the if condition (after the
>     blink=!blink) will not work, because the blink bit is cleared from
>     the pdo area after the process data has been sent.
>
>     This means that I should keep a copy of the process data and write
>     it on the domain1_pd each time.
>     Is this right or I'm missing something ?
>
>
>     Thanks,
>     Thomas.
>
>
>     _______________________________________________
>     etherlab-users mailing list
>     etherlab-users at etherlab.org <mailto:etherlab-users at etherlab.org>
>     http://lists.etherlab.org/mailman/listinfo/etherlab-users
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.etherlab.org/pipermail/etherlab-users/attachments/20121008/1c44750d/attachment-0004.htm>


More information about the Etherlab-users mailing list