<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; color: rgb(0, 0, 0); font-size: 14px; font-family: Calibri, sans-serif;">
<div>
<div><br>
</div>
<div>I’ve been continuing to work on this, but have had limited success. While a distributed clock is technically running, it’s caused a few other problems that I’ve been unable to correct. I think my main problem all stems from this:</div>
<div><br>
</div>
<div>
<div>[36524.681778] EtherCAT 0: Domain 0: Working counter changed to 10/10.</div>
<div>[36524.681787] EtherCAT 0: Domain 2: Working counter changed to 1/1.</div>
<div>[36524.681792] EtherCAT 0: Domain 1: Working counter changed to 1/1.</div>
<div>[36525.858760] EtherCAT 0: Domain 0: Working counter changed to 0/10.</div>
<div>[36525.858810] EtherCAT 0: Domain 2: Working counter changed to 0/1.</div>
<div>[36525.858827] EtherCAT 0: Domain 1: Working counter changed to 0/1.</div>
<div>[36526.203067] EtherCAT WARNING: Datagram f185d88c (domain0-0-main) was SKIPPED 2 times.</div>
<div>[36526.203099] EtherCAT WARNING: Datagram f185d90c (domain2-28-main) was SKIPPED 2 times.</div>
<div>[36526.203104] EtherCAT WARNING: Datagram f185d28c (domain1-22-main) was SKIPPED 2 times.</div>
<div>[36526.743379] EtherCAT WARNING 0: 12 datagrams UNMATCHED!</div>
<div>[36526.863556] EtherCAT 0: Domain 0: 5 working counter changes - now 10/10.</div>
<div>[36526.863566] EtherCAT 0: Domain 2: 5 working counter changes - now 1/1.</div>
<div>[36526.863572] EtherCAT 0: Domain 1: 5 working counter changes - now 1/1.</div>
<div><br>
</div>
</div>
<div>… and on and on and on…</div>
<div><br>
</div>
<div>The AKD servo drive I’m using will run fine, no warnings, then suddenly drop to an F125 fault and shut off. The is a frame synchronization error. Basically, it’s saying that the sync0 frame isn’t received at a consistent enough rate, so it faults out.</div>
<div><br>
</div>
<div>My scan rate is 250 microseconds, and I admit there is jitter. It varies from as little as +/- 50 microseconds, though I’m not sure why. The "ethercat master" command reports a steady 4000 frames/sec, but the scoping part of my project records a timestamp,
 and I am seeing the +/- 50 microseconds. </div>
<div><br>
</div>
<div>My timing function is straight out of the EtherCAT master examples and is also similar to methods I’ve seen in other cyclic task projects. The whole cyclic task is below. Can anyone see what idiotic thing I must be doing to get unmatched datagrams?</div>
<div><br>
</div>
<div>
<div>#define TIMESPEC_ADD_NS(TS, NS)<span class="Apple-tab-span" style="white-space:pre">
</span>\</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>(TS).tv_nsec += (NS);<span class="Apple-tab-span" style="white-space:pre">
</span>\</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>while ( (TS).tv_nsec >= NANOS_PER_SEC ){<span class="Apple-tab-span" style="white-space:pre">
</span>\</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>(TS).tv_nsec -= NANOS_PER_SEC;<span class="Apple-tab-span" style="white-space:pre">
</span>\</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>(TS).tv_sec++; }<span class="Apple-tab-span" style="white-space:pre">
</span></div>
</div>
<div><br>
</div>
<div>#define TIMESPEC2NSEPOCH2000(T) \</div>
<div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>((uint64_t) (((T).tv_sec - 946684800ULL) * 1000000000ULL) + (T).tv_nsec)</div>
<div><br>
</div>
<div>#define TON struct timespec<span class="Apple-tab-span" style="white-space:pre">
</span></div>
<div><span class="Apple-tab-span" style="white-space:pre"></span></div>
<div>#define TON_ENDTIME(MS)<span class="Apple-tab-span" style="white-space: pre;">
</span>\</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>time_add_ns((MS) * NANOS_PER_MILLISEC)</div>
</div>
<div><br>
</div>
<div><br>
</div>
<div>static TON clockSyncTon_;</div>
<div><br>
</div>
<div>
<div><br>
</div>
<div>int</div>
<div>TON_ISDONE( struct timespec ts )</div>
<div>{</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>struct timespec now;</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>clock_gettime(CLOCK_MONOTONIC, &now);</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span></div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>if ( now.tv_sec > ts.tv_sec )</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>return 1;</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>else if ( now.tv_sec == ts.tv_sec </div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>&& now.tv_nsec >= ts.tv_nsec )</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>return 1;</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>else</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>return 0;</div>
<div>}</div>
</div>
<div><br>
</div>
<div><br>
</div>
<div>
<div>static bool</div>
<div>wait_period(RtaiMain* inst)</div>
<div>{</div>
<div><br>
</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>int rc;</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>bool done = false;</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span></div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>while ( !done && inst->doScan && runAll_ )</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>{</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span></div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>rc = clock_nanosleep(CLOCK_MONOTONIC, </div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>TIMER_ABSTIME, </div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>&inst->wakeupTime, </div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>NULL );</div>
<div><br>
</div>
<div><br>
</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>if ( rc == EFAULT )</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>{</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>return false;</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>}</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>else if ( rc == EINTR )</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>{</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>continue;</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>}</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>else if ( rc == EINVAL )</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>{</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>return false;</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>}</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>else</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>{</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>done = 1;</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>}</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>}</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span></div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>TIMESPEC_ADD_NS(inst->wakeupTime, inst->cycleNs);</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span></div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>return true;</div>
<div><br>
</div>
<div>}</div>
</div>
<div><br>
</div>
<div>
<div><br>
</div>
<div>static void</div>
<div>cyclic_task(RtaiMain* inst)</div>
<div>{</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span></div>
<div><br>
</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>clock_gettime(CLOCK_MONOTONIC ,&(inst->wakeupTime));</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>/* start after one second */</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>inst->wakeupTime.tv_sec++;</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span></div>
<div><span class="Apple-tab-span" style="white-space: pre;"></span>wait_period(inst);</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span></div>
<div>       while (runAll_ && inst->doScan)</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>{</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span></div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>//</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>// Trigger Fieldbus RX here.</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>// </div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>// </div>
<div> <span class="Apple-tab-span" style="white-space:pre"> </span>ecrt_master_receive(master_); </div>
<div><br>
</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span> // record the time we received the data so other parts of the program </div>
<div><span class="Apple-tab-span" style="white-space:pre"></span> // have an accurate time reading </div>
<div><span class="Apple-tab-span" style="white-space:pre"></span> globalTickTimeNs = ton_get_ns();
</div>
<div><br>
</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span> ecrt_domain_process(lrwDomainMgr_.domain);
</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span> ecrt_domain_process(noLrwWriteDomainMgr_.domain); </div>
<div><span class="Apple-tab-span" style="white-space:pre"></span> ecrt_domain_process(noLrwReadDomainMgr_.domain);
</div>
<div><br>
</div>
<div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>if (counter_) </div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>{</div>
<blockquote style="margin:0 0 0 40px; border:none; padding:0px;">
<div><span class="Apple-tab-span" style="white-space:pre"></span>counter_—;<span class="Apple-tab-span" style="white-space:pre">
</span></div>
<div>   } </div>
<div>  else </div>
<div>  { </div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>counter_ = 4000;</div>
<div><br>
</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>// check for master state</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>check_master_state();</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span></div>
<div>  }</div>
</blockquote>
</div>
<div><br>
</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>… tick sub systems</div>
<div><br>
</div>
<div><br>
</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>//</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>// Trigger Fieldbus TX. This should be the last step</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>// </div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>// </div>
<div> <span class="Apple-tab-span" style="white-space:pre"> </span>ecrt_domain_queue(lrwDomainMgr_.domain); </div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>ecrt_domain_queue(noLrwWriteDomainMgr_.domain); </div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>ecrt_domain_queue(noLrwReadDomainMgr_.domain);</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span></div>
<div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>clock_gettime(CLOCK_REALTIME, &dcTime_ );</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>ecrt_master_application_time(</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>master_, </div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>TIMESPEC2NSEPOCH2000(dcTime_) );</div>
<div><br>
</div>
<div><br>
</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>if ( TON_ISDONE(clockSyncTon_) )</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>{</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>ecrt_master_sync_reference_clock(master_);</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>clockSyncTon_ = TON_ENDTIME(10);<span class="Apple-tab-span" style="white-space:pre">
</span>// milliseconds</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>}</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span></div>
<div><span class="Apple-tab-span" style="white-space:pre"></span></div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>ecrt_master_sync_slave_clocks(master_);</div>
</div>
<div><br>
</div>
<div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>// send EtherCAT data</div>
<div>    <span class="Apple-tab-span" style="white-space:pre"></span>ecrt_master_send(master_);</div>
</div>
<div><br>
</div>
<div><br>
</div>
<div><span class="Apple-tab-span" style="white-space: pre;"></span>if ( !wait_period(inst) )</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>{</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>PRINT( "%s Error with waiting! Stopping cyclic_task.\n",</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>__FUNCTION__ );</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>inst->doScan = false;</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>}</div>
<div>    }</div>
<div><br>
</div>
<div>}</div>
</div>
<div><br>
</div>
<div><br>
</div>
<div><br>
</div>
<div><br>
</div>
<div><br>
</div>
<div><br>
</div>
<div><br>
</div>
<div><br>
</div>
<div>
<div id="">
<p class="MsoNormal" style="margin: 0in 0in 0.0001pt;"><br>
</p>
<p class="MsoNormal" style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif;">
<font face="Helvetica Neue"><span style="font-size: 12px;"></span></font></p>
<div><font face="Helvetica Neue"><span style="font-size: 12px;"><br>
</span></font></div>
<p class="MsoNormal" style="margin: 0in 0in 0.0001pt;"><br>
</p>
</div>
</div>
</div>
<div><br>
</div>
<span id="OLK_SRC_BODY_SECTION">
<div style="font-family:Calibri; font-size:12pt; text-align:left; color:black; BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: 0in; PADDING-LEFT: 0in; PADDING-RIGHT: 0in; BORDER-TOP: #b5c4df 1pt solid; BORDER-RIGHT: medium none; PADDING-TOP: 3pt">
<span style="font-weight:bold">From: </span>Graeme Foot <<a href="mailto:Graeme.Foot@touchcut.com">Graeme.Foot@touchcut.com</a>><br>
<span style="font-weight:bold">Date: </span>Sunday, February 21, 2016 at 4:07 PM<br>
<span style="font-weight:bold">To: </span>Thomas Bitsky <<a href="mailto:tbj@automateddesign.com">tbj@automateddesign.com</a>><br>
<span style="font-weight:bold">Cc: </span>"<a href="mailto:etherlab-users@etherlab.org">etherlab-users@etherlab.org</a>" <<a href="mailto:etherlab-users@etherlab.org">etherlab-users@etherlab.org</a>><br>
<span style="font-weight:bold">Subject: </span>RE: Distributed Clocks<br>
</div>
<div><br>
</div>
<div xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<meta name="Generator" content="Microsoft Word 12 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
@font-face
        {font-family:"Helvetica Neue";}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
p.MsoAcetate, li.MsoAcetate, div.MsoAcetate
        {mso-style-priority:99;
        mso-style-link:"Balloon Text Char";
        margin:0cm;
        margin-bottom:.0001pt;
        font-size:8.0pt;
        font-family:"Tahoma","sans-serif";}
span.BalloonTextChar
        {mso-style-name:"Balloon Text Char";
        mso-style-priority:99;
        mso-style-link:"Balloon Text";
        font-family:"Tahoma","sans-serif";}
span.apple-tab-span
        {mso-style-name:apple-tab-span;}
span.EmailStyle20
        {mso-style-type:personal;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
span.EmailStyle21
        {mso-style-type:personal;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
span.EmailStyle22
        {mso-style-type:personal-reply;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
<div lang="EN-NZ" link="blue" vlink="purple">
<div class="WordSection1">
<p class="MsoNormal"><span style="font-size: 11pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125);">Hi,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 11pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125);"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size: 11pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125);">I build and patch against revision 2526, so don’t know what patches / fixes have made it through to the latest release.  However for my revision I
 need fixes for reference clock selections and dc synchronization issues.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 11pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125);"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size: 11pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125);">I’ve attached the dc related patches I use, but these are applied after some other patches so you may get some conflicts or offsetting.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 11pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125);"><o:p> </o:p></span></p>
<p class="MsoNormal"><b><span style="font-size: 11pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125);">01 - Distributed Clock fixes and helpers.patch<o:p></o:p></span></b></p>
<p class="MsoNormal"><span style="font-size: 11pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125);">This sorts out some ref slave issues, allowing a user selected ref slave.  It also adds some helper functions:<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 11pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125);">- ecrt_master_setup_domain_memory() : this allows me to set up the domain memory and do stuff with it before calling ecrt_master_activate() (for user
 space apps)<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 11pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125);">- ecrt_master_deactivate_slaves() : this lets me deactivate the slaves while still in realtime to avoid the slaves getting some shutdown sync errors<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 11pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125);"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size: 11pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125);"><o:p> </o:p></span></p>
<p class="MsoNormal"><b><span style="font-size: 11pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125);">02 - Distributed Clock fixes from Jun Yuan - dc sync issues.patch<o:p></o:p></span></b></p>
<p class="MsoNormal"><span style="font-size: 11pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125);">This sorts out some timing issues to do with slave dc syncing.  Without it they can start syncing from one cycle out causing a large syncing time
 overhead, one slave at a time.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 11pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125);"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size: 11pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125);"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size: 11pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125);">Regards,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 11pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125);">Graeme.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size: 11pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125);"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size: 11pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125);"><o:p> </o:p></span></p>
<div>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0cm 0cm 0cm">
<p class="MsoNormal"><b><span lang="EN-US" style="font-size: 10pt; font-family: Tahoma, sans-serif;">From:</span></b><span lang="EN-US" style="font-size: 10pt; font-family: Tahoma, sans-serif;"> Thomas Bitsky Jr [<a href="mailto:tbj@automateddesign.com">mailto:tbj@automateddesign.com</a>]
<br>
<b>Sent:</b> Sunday, 21 February 2016 10:27 a.m.<br>
<b>To:</b> Graeme Foot<br>
<b>Cc:</b> <a href="mailto:etherlab-users@etherlab.org">etherlab-users@etherlab.org</a><br>
<b>Subject:</b> Re: Distributed Clocks<o:p></o:p></span></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<p class="MsoNormal">Graeme,<o:p></o:p></p>
</div>
<div id="AppleMailSignature">
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div id="AppleMailSignature">
<p class="MsoNormal">Thank you so much for the detailed response. I'm away from my computer right now, so I can't try out your advice, but I noticed you asked about patches. I am not running any patches; which should I get?<o:p></o:p></p>
</div>
<div id="AppleMailSignature">
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div id="AppleMailSignature">
<p class="MsoNormal">Thanks!<br>
Thomas Bitsky Jr <o:p></o:p></p>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
</div>
<div>
<p class="MsoNormal" style="margin-bottom:12.0pt">On Feb 20, 2016, at 3:04 PM, Graeme Foot <<a href="mailto:Graeme.Foot@touchcut.com">Graeme.Foot@touchcut.com</a>> wrote:<o:p></o:p></p>
</div>
<blockquote style="margin-top:5.0pt;margin-bottom:5.0pt">
<div>
<p class="MsoNormal"><span style="font-size: 11pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125);">Hi,</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size: 11pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125);"> </span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size: 11pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125);">The slave clocks get synced via the distributed clock system using the master methods:
</span><span style="font-size:11.0pt;font-family:"Courier New";color:#1F497D">ecrt_master_reference_clock_time(), ecrt_master_sync_slave_clocks(), ecrt_master_application_time(), ecrt_master_sync_reference_clock().</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size: 11pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125);"> </span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size: 11pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125);">However each individual slave can choose (if it is capable of it) whether to synchronize its reading and writing of data to a particular point in
 time within the dc cycle.  If that slave does not choose to do so then the reading and writing of the data occurs at the time the EtherCAT frame goes past, resulting in a progressive update and application of data as the frame progresses through all of the
 slaves.</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size: 11pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125);"> </span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size: 11pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125);">If a slave is registered to use the dc clock then it caches the frame data until the sync0 interrupt so in theory all dc slaves apply the data at
 the same time.  It also means you don’t have to worry about jitter as to the time the frame is sent over the wire.  The only thing is to choose a good sync0 time to ensure your frames are always sent out and have reached all of the slaves before the sync0
 time occurs, and that the next frame is not sent out before the previous sync0 time occurs.</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size: 11pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125);"> </span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size: 11pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125);">In my application my cycle time is 1000us.  I choose a sync0 time of 500us.  I also send my frame as close as possible to the beginning of the cycle. 
 This gives the frame up to half the cycle time to reach all of the slaves and then the other half of the cycle for the frame to return in time for the master receive call.  I could choose a sync0 time later than 500us but I want it processed as soon as possible
 after the frame is received while still allowing for a bus with a large number of terminals.</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size: 11pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125);"> </span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size: 11pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125);">So below where you are calculating loop_shift based on the current time is wrong.  Just choose a time within the dc cycle and use that value for all
 slaves.  Note: the beginning of the dc cycle is in phase with the first call to </span>
<span style="font-size:11.0pt;font-family:"Courier New";color:#1F497D">ecrt_master_application_time()</span><span style="font-size: 11pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125);">, so all of your realtime looping should also be in phase with
 that initial time.</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size: 11pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125);"> </span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size: 11pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125);"> </span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size: 11pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125);">Note, when selecting a slave to be the DC reference slave you should generally choose the first slave on your bus, regardless of whether it will be
 (or can be) registered to use the dc synchronization.  At the very least it must be before, or be the, first slave that will be registered as a dc slave.</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size: 11pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125);">Also note that some slaves clocks are not very stable and shouldn’t be used as the DC reference slave.  My original testing was on a Beckhoff CX1020
 with a CX1100-0004, this could not be used as a reference slave as its clock was not stable. 
</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size: 11pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125);"> </span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size: 11pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125);"> </span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size: 11pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125);">I see you are configuring the slaves via
</span><span style="font-size:11.0pt;font-family:"Courier New";color:#1F497D">ecrt_slave_config_*()</span><span style="font-size: 11pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125);"> then calling
</span><span style="font-size:11.0pt;font-family:"Courier New";color:#1F497D">ecrt_slave_config_pdos()</span><span style="font-size: 11pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125);"> at the end.  If you call
</span><span style="font-size:11.0pt;font-family:"Courier New";color:#1F497D">ecrt_slave_config_pdos()</span><span style="font-size: 11pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125);">  at the beginning you don’t need all the other config calls. 
 However I hear AKD drives and some other slaves prefer explicit slave config calls but most slaves are happy with just the
</span><span style="font-size:11.0pt;font-family:"Courier New";color:#1F497D">ecrt_slave_config_reg_pdo_entry()</span><span style="font-size: 11pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125);"> methods.</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size: 11pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125);"> </span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size: 11pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125);">This also leads to another issue.  One of the configured PDO items is the “mode of operation” value (0x6060 0x00).  You are also configuring this
 with: </span><span style="font-size:11.0pt;font-family:"Courier New";color:#1F497D">ecrt_slave_config_sdo8( sc, 0x6060, 0, 8 )</span><span style="font-size: 11pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125);">.  This value should be instead be
 set via the PDO value.  Use </span><span style="font-size:11.0pt;font-family:"Courier New";color:#1F497D">ecrt_slave_config_reg_pdo_entry()</span><span style="font-size: 11pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125);"> to get the offset to
 the value and set the value there.</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size: 11pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125);"> </span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size: 11pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125);"> </span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size: 11pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125);">Sorry if that was a bit long but DC’s is not an easy topic to get your head around.  Here’s a bit of a summary:</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size: 11pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125);">- You can choose which slaves get registered with
</span><span style="font-size:11.0pt;font-family:"Courier New";color:#1F497D">ecrt_slave_config_dc()</span><span style="font-size: 11pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125);">. But each slave you want synced must get its own call to
</span><span style="font-size:11.0pt;font-family:"Courier New";color:#1F497D">ecrt_slave_config_dc()</span><span style="font-size: 11pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125);">.</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size: 11pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125);">- If your yaskawa drives get to OP without
</span><span style="font-size:11.0pt;font-family:"Courier New";color:#1F497D">ecrt_slave_config_dc()</span><span style="font-size: 11pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125);">then they should get to OP with
</span><span style="font-size:11.0pt;font-family:"Courier New";color:#1F497D">ecrt_slave_config_dc()</span><span style="font-size: 11pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125);">.</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size: 11pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125);">- The yaskawa drives require a very stable reference slave time, which is why we sync the EtherCAT master to the reference slave rather than the other
 way around.</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size: 11pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125);"> </span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size: 11pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125);"> </span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size: 11pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125);">And some other comments:</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size: 11pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125);">- Never use an</span><span style="font-size: 11pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125);">EL9010 endcap module.  These break
 the distributed clock calculations.  I don’t think they are available anymore though.</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size: 11pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125);">- There are some patches out there that fix various DC clock issues, are you using any of these?</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size: 11pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125);"> </span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size: 11pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125);"> </span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size: 11pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125);">Regards,</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size: 11pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125);">Graeme.</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size: 11pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125);"> </span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size: 11pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125);"> </span><o:p></o:p></p>
<div>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0cm 0cm 0cm">
<p class="MsoNormal"><b><span lang="EN-US" style="font-size: 10pt; font-family: Tahoma, sans-serif;">From:</span></b><span lang="EN-US" style="font-size: 10pt; font-family: Tahoma, sans-serif;"> Thomas Bitsky Jr [<a href="mailto:tbj@automateddesign.com">mailto:tbj@automateddesign.com</a>]
<br>
<b>Sent:</b> Sunday, 21 February 2016 7:15 a.m.<br>
<b>To:</b> Graeme Foot; <a href="mailto:etherlab-users@etherlab.org">etherlab-users@etherlab.org</a><br>
<b>Subject:</b> Re: Distributed Clocks</span><o:p></o:p></p>
</div>
</div>
<p class="MsoNormal"> <o:p></o:p></p>
<div>
<div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">[snip]</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 11.5pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125);">I’ve never been able to get the EL7041 stepper modules to work in dc mode.</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 11.5pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125);">[/snip]</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">Is it all or nothing? I need the servo drives, the LVDT and the EL3356 tied to a distributed clock. The EL7041 is optional for me.</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">[snip]</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 11pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125);">I don’t see in your code calls to </span><span style="font-size:11.0pt;font-family:"Courier New";color:#1F497D">ecrt_slave_config_dc()</span><span style="font-size: 11pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125);">.</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 11.5pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125);">For the yaskawa drive, during the config stage, I use the following calls…</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">[/snip]</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">Forgot to put that part; my bad. This is what I had for the Yaskawa/AKD, although I was only doing it to one of the drives. I thought I was supposed to set
 up one distributed clock, and it became the master and handled the rest. Am I supposed to do this for all the cards, or do I select?</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">Yaskawa<span class="apple-tab-span"></span>(AKD drive code is pretty much the same):</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">  if (!(sc = ecrt_master_slave_config(</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">                    master, </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">slavePosDomain, </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">slavePosIndex, </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">vendorId, productCode))) </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">{</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">        <span class="apple-tab-span"></span>return FALSE;</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">    }</span><o:p></o:p></p>
</div>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">ecrt_slave_config_sdo8( sc, 0x1C12, 0, 0 ); /* clear sm pdo 0x1c12 */</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">ecrt_slave_config_sdo8( sc, 0x1C13, 0, 0 ); /* clear sm pdo 0x1c12 */</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">ecrt_slave_config_sdo8( sc, 0x1A00, 0, 0 ); /* clear TxPDO0 */</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">ecrt_slave_config_sdo8( sc, 0x1A01, 0, 0 ); /* clear TxPDO1 */</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">ecrt_slave_config_sdo8( sc, 0x1A02, 0, 0 ); /* clear TxPDO2 */</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">ecrt_slave_config_sdo8( sc, 0x1A03, 0, 0 ); /* clear TxPDO3 */</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">ecrt_slave_config_sdo8( sc, 0x1600, 0, 0 ); /* number of var in this PDO */</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">   <span class="apple-tab-span"></span>ecrt_slave_config_sdo8( sc, 0x1601, 0, 0 ); /* clear RxPdo 0x1601 */</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">    ecrt_slave_config_sdo8( sc, 0x1602, 0, 0 ); /* clear RxPdo 0x1602 */</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">    ecrt_slave_config_sdo8( sc, 0x1603, 0, 0 ); /* clear RxPdo 0x1603 */</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">ecrt_slave_config_sdo8( sc, 0x1A00, 0, 0 ); /* clear TxPDO0 */</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">ecrt_slave_config_sdo32( sc, 0x1A00, 1, 0x60410010 ); // Status word</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">ecrt_slave_config_sdo32( sc, 0x1A00, 2,0x60640020 );// Position actual value, per encoder</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">ecrt_slave_config_sdo32( sc, 0x1A00, 3,0x60770010 );// Torque, actual value</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">ecrt_slave_config_sdo32( sc, 0x1A00, 4,0x60F40020 );// Following error, actual value</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">ecrt_slave_config_sdo32( sc, 0x1A00, 5,0x60610008 );// Modes of operation display</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">ecrt_slave_config_sdo32( sc, 0x1A00, 6,0x00000008 );// GAP</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">ecrt_slave_config_sdo32( sc, 0x1A00, 7,0x60B90010 );// Touch probe status</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">ecrt_slave_config_sdo32( sc, 0x1A00, 8, 0x60BA0020 ); // Touch probe 1 position</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">ecrt_slave_config_sdo8( sc, 0x1A00, 0, 8 ); /* pdo entries */</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">ecrt_slave_config_sdo8( sc, 0x1A01, 0, 0 ); /* clear TxPDO1 */</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">ecrt_slave_config_sdo32( sc, 0x1A01,1,0x60410010 ); // Status word</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">ecrt_slave_config_sdo32( sc, 0x1A01,2,0x60640020 );// Position actual value, per encoder</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">ecrt_slave_config_sdo8( sc, 0x1A01, 0, 2 ); /* pdo entries */</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">ecrt_slave_config_sdo8( sc, 0x1A02, 0, 0 ); /* clear TxPDO2 */</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">ecrt_slave_config_sdo32( sc, 0x1A02,1,0x60410010 ); // Status word</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">ecrt_slave_config_sdo32( sc, 0x1A02,2,0x60640020 );// Position actual value, per encoder</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">ecrt_slave_config_sdo8( sc, 0x1A02, 0, 2 ); /* pdo entries */</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">ecrt_slave_config_sdo8( sc, 0x1A03, 0, 0 ); /* clear TxPDO2 */</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">ecrt_slave_config_sdo32( sc, 0x1A03,1,0x60410010 ); // Status word</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">ecrt_slave_config_sdo32( sc, 0x1A03,2,0x60640020 );// Position actual value, per encoder</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">ecrt_slave_config_sdo32( sc, 0x1A03,3,0x60770010 );// Torque, actual value</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">ecrt_slave_config_sdo8( sc, 0x1A03, 0, 3 ); /* pdo entries */</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">ecrt_slave_config_sdo8( sc, 0x1600, 0, 0 ); /* clear entries */</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">ecrt_slave_config_sdo32( sc, 0x1600, 1, 0x60400010  ); /* control word */</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">ecrt_slave_config_sdo32( sc, 0x1600, 2, 0x607A0020  ); /* target position */</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">ecrt_slave_config_sdo32( sc, 0x1600, 3, 0x60FF0020  ); /* target velocity */</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">ecrt_slave_config_sdo32( sc, 0x1600, 4, 0x60710010  ); /* target torque */</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">ecrt_slave_config_sdo32( sc, 0x1600, 5, 0x60720010  ); /* max torque */</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">ecrt_slave_config_sdo32( sc, 0x1600, 6, 0x60600008  ); /* modes of operation */</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">ecrt_slave_config_sdo32( sc, 0x1600, 7, 0x00000008  ); /* gap */</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">ecrt_slave_config_sdo32( sc, 0x1600, 8, 0x60B80010  ); /* touch probe function */</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">ecrt_slave_config_sdo8(sc, 0x1600, 0, 8 ); /* pdo entries */</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">ecrt_slave_config_sdo8( sc, 0x1601, 0, 0 ); /* clear entries */</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">ecrt_slave_config_sdo32( sc, 0x1601, 1, 0x60400010  ); /* control word */</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">ecrt_slave_config_sdo32( sc, 0x1601, 2, 0x607A0020  ); /* target position */</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">ecrt_slave_config_sdo8( sc, 0x1601, 0, 2 ); /* pdo entries */</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">ecrt_slave_config_sdo8( sc, 0x1602, 0, 0 ); /* clear entries */</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">ecrt_slave_config_sdo32( sc, 0x1602, 1, 0x60400010  ); /* control word */</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">ecrt_slave_config_sdo32( sc, 0x1602, 2, 0x60FF0020  ); /* target position */</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">ecrt_slave_config_sdo8( sc, 0x1602, 0, 2 ); /* pdo entries */</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">ecrt_slave_config_sdo8( sc, 0x1603, 0, 0 ); /* clear entries */</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">ecrt_slave_config_sdo32( sc, 0x1603, 1, 0x60400010  ); /* control word */</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">ecrt_slave_config_sdo32( sc, 0x1603, 2, 0x60710020  ); /* target position */</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">ecrt_slave_config_sdo8( sc, 0x1603, 0, 2 ); /* pdo entries */</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">ecrt_slave_config_sdo16( sc, 0x1C12, 1, 0x1601 ); /* download pdo 1C12 index */</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">ecrt_slave_config_sdo8( sc, 0x1C12, 0, 1 ); /* set number of RxPDO */</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">ecrt_slave_config_sdo16( sc, 0x1C13, 1, 0x1A01 ); /* download pdo 1C13 index */</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">ecrt_slave_config_sdo8( sc, 0x1C13, 0, 1 ); /* set number of TxPDO */</span><o:p></o:p></p>
</div>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">// OPMODE</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">// Yaskawa recommends 8</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">ecrt_slave_config_sdo8( sc, 0x6060, 0, 8 );</span><o:p></o:p></p>
</div>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">unsigned char interpolationTime = 0xFF;</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">// 250</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">unsigned char cycleExponent = 0xFA;</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">// microseconds</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">// globalSCanRate_us equals either 250 or 125.</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">unsigned int us = globalScanRate_us;</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">size_t i;</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">for ( i=0;i<6, us > 0xFF;++i )</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">{</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">us /= 10;</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">cycleExponent += 1;</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">}</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">interpolationTime = us;</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">ecrt_slave_config_sdo8( akd->sc_akd, 0x60C2, 1, interpolationTime ); /* Interpolation time */</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">ecrt_slave_config_sdo8( akd->sc_akd, 0x60C2, 2, cycleExponent ); /* Cycle exponent */</span><o:p></o:p></p>
</div>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">    PRINT("Configuring PDOs...\n");</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">    if (ecrt_slave_config_pdos(sc, EC_END, slave_syncs)) </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">{</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">       <span class="apple-tab-span"></span>PRINT("Failed to configure Yaskawa Sigma PDOs.\n");</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">        return FALSE;</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">    }</span><o:p></o:p></p>
</div>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><b><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">struct timespec cur_time;</span></b><o:p></o:p></p>
</div>
<div>
<div>
<p class="MsoNormal"><b><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">clock_gettime(CLOCK_REALTIME, &cur_time);</span></b><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><b><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">size_t loop_period = globalScanRate_us * 1000;</span></b><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><b><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">if ( loop_period == 0 ) loop_period = 1;</span></b><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><b><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">size_t loop_shift </span></b><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><b><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">= loop_period - (cur_time.tv_nsec % loop_period);</span></b><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><b><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">ecrt_slave_config_dc(</span></b><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><b><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">sc, </span></b><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><b><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">0x0300, </span></b><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><b><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">loop_period, </span></b><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><b><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">loop_shift, </span></b><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><b><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">0, </span></b><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><b><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">0);</span></b><o:p></o:p></p>
</div>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">For the EL3356, would I then?</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">KL3356StrainGauge* sg = (KL3356StrainGauge*)slave->instance;</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">printf( "Begin kl3356_ecConfigure...\n");</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">// </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">// Create the slave configuration</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">//</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">if (!(sg->sc = ecrt_master_slave_config(</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">master, </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">slavePosDomain, slavePosIndex, // Bus position</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">vendorId, productCode</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">// Slave type</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">))) </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">{</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">printf(</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">"kl3356_ecConfigure -- Failed to get slave configuration.\n");</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">   return FALSE;</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">}</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">//</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">// Register startup configuration for the hardware</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">//</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">ecrt_slave_config_sdo8( sg->sc, 0x1C12, 0, 0 ); /* clear sm pdo 0x1c12 */</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">ecrt_slave_config_sdo8( sg->sc, 0x1C13, 0, 0 ); /* clear sm pdo 0x1c12 */</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">ecrt_slave_config_sdo16( sg->sc, 0x1C12, 1, 0x1600 ); /* download pdo 1C12 index */</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">ecrt_slave_config_sdo8( sg->sc, 0x1C12, 0, 1 ); /* set number of RxPDO */</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">ecrt_slave_config_sdo16( sg->sc, 0x1C13, 1, 0x1A00 ); /* download pdo 1C13 index */</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">ecrt_slave_config_sdo16( sg->sc, 0x1C13, 2, 0x1A02 ); /* download pdo 1C13 index */</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">ecrt_slave_config_sdo8( sg->sc, 0x1C13, 0, 2 ); /* set number of TxPDO */</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">//</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">// Configure the hardware's PDOs</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">//</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">if (ecrt_slave_config_pdos(sg->sc, EC_END, kl3356_syncs)) </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">{</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">   printf(</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">"kl3356_ecConfigure -- Failed to configure PDOs.\n");</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">   return FALSE;</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">    }</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><b><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">struct timespec cur_time;</span></b><o:p></o:p></p>
</div>
<div>
<div>
<p class="MsoNormal"><b><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">clock_gettime(CLOCK_REALTIME, &cur_time);</span></b><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><b><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">size_t loop_period = globalScanRate_us * 1000;</span></b><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><b><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">if ( loop_period == 0 ) loop_period = 1;</span></b><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><b><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">size_t loop_shift </span></b><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><b><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">= loop_period - (cur_time.tv_nsec % loop_period);</span></b><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><b><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">ecrt_slave_config_dc(</span></b><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><b>s</b><b><span style="font-family: Calibri, sans-serif;">g->sc, </span></b><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><b><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">0x0300, </span></b><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><b><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">loop_period, </span></b><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><b><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">loop_shift, </span></b><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><b><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">0, </span></b><o:p></o:p></p>
</div>
</div>
<div>
<p class="MsoNormal"><b><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">0);</span></b><o:p></o:p></p>
</div>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">Thanks!</span><o:p></o:p></p>
</div>
<div>
<div id="">
<p class="MsoNormal"><span style="font-size:9.0pt;font-family:"Helvetica Neue";color:black">Thomas C. Bitsky Jr. | Lead Developer</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:9.0pt;font-family:"Helvetica Neue";color:#660000">ADC | <a href="http://automateddesign.com/" target="_blank">automateddesign.com</a></span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:9.0pt;font-family:"Helvetica Neue";color:black">P: 630-783-1150 F: 630-783-1159 M: 630-632-6679</span><o:p></o:p></p>
<p class="MsoNormal"><span style="color:black"> </span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:9.0pt;font-family:"Helvetica Neue";color:black">Follow ADC news and media:</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:9.0pt;font-family:"Helvetica Neue";color:black"><a href="https://facebook.com/automateddesigncorp">Facebook</a> |
<a href="https://twitter.com/ADCSportsLogic">Twitter</a> | <a href="https://www.youtube.com/user/ADCSportsLogic">
YouTube</a></span><o:p></o:p></p>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<p class="MsoNormal"><span style="color:black"> </span><o:p></o:p></p>
</div>
</div>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0cm 0cm 0cm">
<p class="MsoNormal"><b><span style="font-family: Calibri, sans-serif; color: black;">From:
</span></b><span style="font-family: Calibri, sans-serif; color: black;">Graeme Foot <<a href="mailto:Graeme.Foot@touchcut.com">Graeme.Foot@touchcut.com</a>><br>
<b>Date: </b>Friday, February 19, 2016 at 7:24 PM<br>
<b>To: </b>Thomas Bitsky <<a href="mailto:tbj@automateddesign.com">tbj@automateddesign.com</a>>, "<a href="mailto:etherlab-users@etherlab.org">etherlab-users@etherlab.org</a>" <<a href="mailto:etherlab-users@etherlab.org">etherlab-users@etherlab.org</a>><br>
<b>Subject: </b>RE: Distributed Clocks</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<div>
<p class="MsoNormal"><span style="font-size: 11pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125);">Hi,</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size: 11pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125);"> </span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size: 11pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125);">I don’t see in your code calls to
</span><span style="font-size:11.0pt;font-family:"Courier New";color:#1F497D">ecrt_slave_config_dc()</span><span style="font-size: 11pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125);">.</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size: 11pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125);"> </span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size: 11pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125);">For the yaskawa drive, during the config stage, I use the following calls:</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size: 11pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125);"> </span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Courier New";color:#1F497D">    // set interpolation time period (free run mode)</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Courier New";color:#1F497D">    // where 0x60C2 is time in seconds = (0x60C2, 0x01) x 10^(0x60C2, 0x02)</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Courier New";color:#1F497D">    // eg period of 1ms:</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Courier New";color:#1F497D">    //   (0x60C2, 0x01) = 1</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Courier New";color:#1F497D">    //   (0x60C2, 0x02) = -3</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Courier New";color:#1F497D">    // => 1 x 10^(-3) = 0.001s</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Courier New";color:#1F497D">    ecrt_slave_config_sdo8(dev->slaveConfig, 0x60C2, 0x01, (uint8_t)g_app.scanTimeMS);</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Courier New";color:#1F497D">    ecrt_slave_config_sdo8(dev->slaveConfig, 0x60C2, 0x02, (int8_t)(-3));</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Courier New";color:#1F497D"> </span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Courier New";color:#1F497D"> </span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Courier New";color:#1F497D">    // set up the distributed clock</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Courier New";color:#1F497D">    // 0x0000 = free run, 0x0300 = dc</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Courier New";color:#1F497D">    // (Supported DC cycle: 125us to 4ms (every 125us cycle))</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:11.0pt;font-family:"Courier New";color:#1F497D">    ecrt_slave_config_dc(dev->slaveConfig, 0x0300, g_app.scanTimeNS, 500000, 0, 0);</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size: 11pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125);"> </span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size: 11pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125);">0x60C2 shouldn’t be necessary for dc mode, but I used it before I had dc mode working and have never tried it without and it doesn’t harm anything
 having it in.</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size: 11pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125);"> </span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size: 11pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125);">The second value that is being passed to the
</span><span style="font-size:11.0pt;font-family:"Courier New";color:#1F497D">ecrt_slave_config_dc</span><span style="font-size: 11pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125);"> method is a value that is written to the ESC register 0x980. 
 The Yaskawa SGDV doco says this value should be 0x0000 for free run mode and 0x0300 for dc mode.  Other ESC’s may required different values.</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size: 11pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125);"> </span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size: 11pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125);"> </span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size: 11pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125);">I’ve never been able to get the EL7041 stepper modules to work in dc mode.</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size: 11pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125);"> </span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size: 11pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125);"> </span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size: 11pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125);">Graeme.</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size: 11pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125);"> </span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size: 11pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125);"> </span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size: 11pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125);"> </span><o:p></o:p></p>
<div>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0cm 0cm 0cm">
<p class="MsoNormal"><b><span lang="EN-US" style="font-size: 10pt; font-family: Tahoma, sans-serif; color: black;">From:</span></b><span lang="EN-US" style="font-size: 10pt; font-family: Tahoma, sans-serif; color: black;"> etherlab-users [<a href="mailto:etherlab-users-bounces@etherlab.org">mailto:etherlab-users-bounces@etherlab.org</a>]
<b>On Behalf Of </b>Thomas Bitsky Jr<br>
<b>Sent:</b> Saturday, 20 February 2016 1:09 p.m.<br>
<b>To:</b> <a href="mailto:etherlab-users@etherlab.org">etherlab-users@etherlab.org</a><br>
<b>Subject:</b> [etherlab-users] Distributed Clocks</span><o:p></o:p></p>
</div>
</div>
<p class="MsoNormal"><span style="color:black"> </span><o:p></o:p></p>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">Hello.</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">I’ve been using the EtherCAT master for years to great success, but I’m stuck on a problem I can’t figure out that I think several people here are doing successfully.
 I can’t implement distributed clocks in my application.</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">I am having the same problem on two systems I have up and running:</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">SYSTEM ONE:</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">EtherLAB Master 1.52, E1000E Driver, Scan Rate 4Khz, Ubuntu Server 14.04LTS, RT-PREEMPT 3.12.50-rt68</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">alias=0, position=0, device=EK1100 </span><o:p></o:p></p>
</div>
<div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">alias=0, position=1, device=EL1104 </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">alias=0, position=2, device=EL2004</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">alias=0, position=3, device=EL9510</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">alias=0, position=4, device=EL3356</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">alias=0, position=5, device=Kollmorgen AKD</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">alias=0, position=6, device=MTS LVDT</span><o:p></o:p></p>
</div>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">SYSTEM TWO:</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">EtherLAB Master 1.52, E1000E Driver, Scan Rate 8Khz, Ubuntu Server 14.04LTS, RT-PREEMPT 3.12.50-rt68</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">alias=0, position=0, device=EK1100</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">alias=0, position=1, device=EL3001</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">alias=0, position=2, device=EL1104</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">alias=0, position=3, device=EL1104</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">alias=0, position=4, device=EL1104</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">alias=0, position=5, device=EL2004</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">alias=0, position=6, device=EL2004</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">alias=0, position=7, device=EL9505</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">alias=0, position=8, device=EL7041</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">alias=0, position=9, device=EL7041</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">alias=0, position=10, device=EL7041</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">alias=0, position=11, device=EL7041</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">alias=0, position=12, device=EL7041</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">alias=0, position=13, device=EL7041</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">alias=0, position=14, device=EK1110</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">alias=1, position=0, device=SIGMA5-05</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">alias=2, position=0, device=Yaskawa SIGMA5-05</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">alias=3, position=0, device=Yaskawa SIGMA5-05</span><o:p></o:p></p>
</div>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">Both of the system are fully operational. However, for various reasons, I need to implement distributed clocks on these systems. I’ve never been able to get
 this to work.</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">What follows is the code I used for both systems to try this. I read through examples on the mailing list, plus the examples, but I’m not seeing what I’m doing
 wrong. The result is always the same: all the fieldbus cards go into operation, but the servo drives won’t because of “bad configuration.” Take out the distributed clock code, and they work fine. I’m getting away with it for now, but I do need better clock
 resolution.</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">The systems have an LRW domain, then a separate read domain and write domain for the servo drive(s) for a total of three domains (LRW, read, write). The yaskawa
 drives necessitate this. The scan rate is usually 4Khz, but I have tried it at both 1Khz and 8Khz and gotten the same results. Everything about the implementation is fairly straight-forward. There’s just something fundamental about the DC configuration that
 I’m not understanding.</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">Almost all the code below is taken right from the examples or the message boards (thanks, everybody!). If anyone could tell me what I’m going wrong or offer
 any insights, it’s greatly appreciated. For brevity, I tried to narrow it down to relevant parts, but please let me know any additional information or code I can provide.</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">Thank you in advance,</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">Tom</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">**********************************************************</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">// EtherCAT distributed clock variables</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">#define DC_FILTER_CNT          1024</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">#define SYNC_MASTER_TO_REF        1</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">static uint64_t dc_start_time_ns = 0LL;</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">static uint64_t dc_time_ns = 0;</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">static uint8_t  dc_started = 0;</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">static int32_t  dc_diff_ns = 0;</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">static int32_t  prev_dc_diff_ns = 0;</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">static int64_t  dc_diff_total_ns = 0LL;</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">static int64_t  dc_delta_total_ns = 0LL;</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">static int      dc_filter_idx = 0;</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">static int64_t  dc_adjust_ns;</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">static int64_t  system_time_base = 0LL;</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">static uint64_t wakeup_time = 0LL;</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">static uint64_t overruns = 0LL;</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">/** Get the time in ns for the current cpu, adjusted by system_time_base.</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> *</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> * \attention Rather than calling rt_get_time_ns() directly, all application</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> * time calls should use this method instead.</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> *</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> * \ret The time in ns.</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> */</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">uint64_t system_time_ns(void)</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">{</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">struct timespec ts;</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">clock_gettime(GLOBAL_CLOCK_TO_USE, &ts);</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">return TIMESPEC2NS(ts);</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">}</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">static</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">void sync_distributed_clocks(void)</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">{</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">    uint32_t ref_time = 0;</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">    uint64_t prev_app_time = dc_time_ns;</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">    dc_time_ns = system_time_ns();</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">    // set master time in nano-seconds</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">    ecrt_master_application_time(master_, dc_time_ns);</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">    // get reference clock time to synchronize master cycle</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">    ecrt_master_reference_clock_time(master_, &ref_time);</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">    dc_diff_ns = (uint32_t) prev_app_time - ref_time;</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">    // call to sync slaves to ref slave</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">    ecrt_master_sync_slave_clocks(master_);</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">}</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">/** Return the sign of a number</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> *</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> * ie -1 for -ve value, 0 for 0, +1 for +ve value</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> *</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> * \retval the sign of the value</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> */</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">#define sign(val) \</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">    ({ typeof (val) _val = (val); \</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">    ((_val > 0) - (_val < 0)); })</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">/*****************************************************************************/</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">/** Update the master time based on ref slaves time diff</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> *</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> * called after the ethercat frame is sent to avoid time jitter in</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> * sync_distributed_clocks()</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> */</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">static unsigned int cycle_ns = 1000000;  // 1 millisecond </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">void update_master_clock(void)</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">{</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">    // calc drift (via un-normalised time diff)</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">    int32_t delta = dc_diff_ns - prev_dc_diff_ns;</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">    prev_dc_diff_ns = dc_diff_ns;</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">    // normalise the time diff</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">    dc_diff_ns =</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">        ((dc_diff_ns + (cycle_ns / 2)) % cycle_ns) - (cycle_ns / 2);</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">    // only update if primary master</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">    if (dc_started) {</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">        // add to totals</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">        dc_diff_total_ns += dc_diff_ns;</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">        dc_delta_total_ns += delta;</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">        dc_filter_idx++;</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">        if (dc_filter_idx >= DC_FILTER_CNT) {</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">            // add rounded delta average</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">            dc_adjust_ns +=</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">                ((dc_delta_total_ns + (DC_FILTER_CNT / 2)) / DC_FILTER_CNT);</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">            // and add adjustment for general diff (to pull in drift)</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">            dc_adjust_ns += sign(dc_diff_total_ns / DC_FILTER_CNT);</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">            // limit crazy numbers (0.1% of std cycle time)</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">            if (dc_adjust_ns < -1000) {</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">                dc_adjust_ns = -1000;</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">            }</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">            if (dc_adjust_ns > 1000) {</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">                dc_adjust_ns =  1000;</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">            }</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">            // reset</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">            dc_diff_total_ns = 0LL;</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">            dc_delta_total_ns = 0LL;</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">            dc_filter_idx = 0;</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">        }</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">        // add cycles adjustment to time base (including a spot adjustment)</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">        system_time_base += dc_adjust_ns + sign(dc_diff_ns);</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">    }</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">    else {</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">        dc_started = (dc_diff_ns != 0);</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">        if (dc_started) </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">{</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">            // record the time of this initial cycle</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">            dc_start_time_ns = dc_time_ns;</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">        }</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">    }</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">}</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">struct timespec dcTime_;</span><o:p></o:p></p>
</div>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">int</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">ecatMain_process(void* lp)</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">{</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">ecrt_master_receive(master_);</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">clock_gettime(CLOCK_REALTIME, &dcTime_);</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">ecrt_master_application_time(master_, TIMESPEC2NS(dcTime_));</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">ecrt_master_sync_reference_clock(master_);</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">ecrt_master_sync_slave_clocks(master_);</span><o:p></o:p></p>
</div>
<p class="MsoNormal"><span style="color:black"> </span><o:p></o:p></p>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">ecrt_domain_process(lrwDomainMgr_.domain);</span><o:p></o:p></p>
</div>
<p class="MsoNormal"><span style="color:black"> </span><o:p></o:p></p>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">ecrt_domain_process(noLrwWriteDomainMgr_.domain);</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">ecrt_domain_process(noLrwReadDomainMgr_.domain);</span><o:p></o:p></p>
</div>
<p class="MsoNormal"><span style="color:black"> </span><o:p></o:p></p>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">… // handle my business</span><o:p></o:p></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">// write application time to master</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">clock_gettime(CLOCK_REALTIME, &dcTime_);</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">ecrt_master_application_time(master_, TIMESPEC2NS(dcTime_));</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">if (sync_ref_counter_) </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">{</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">sync_ref_counter_--;</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">} </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">else </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">{</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">sync_ref_counter_ = 1; // sync every cycle</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">ecrt_master_sync_reference_clock(master_);</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">}</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">// send process data</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">ecrt_domain_queue(lrwDomainMgr_.domain);</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">ecrt_domain_queue(noLrwWriteDomainMgr_.domain);</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">ecrt_domain_queue(noLrwReadDomainMgr_.domain);</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">// sync distributed clock just before master_send to set</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">// most accurate master clock time</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">sync_distributed_clocks();</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">// send EtherCAT data</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">ecrt_master_send(master_);</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">// update the master clock</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">// Note: called after ecrt_master_send() to reduce time</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">// jitter in the sync_distributed_clocks() call</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">update_master_clock();</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">return 1;</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">}</span><o:p></o:p></p>
</div>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">int</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">ecatMain_start(void* lp)</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">{</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">//</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">// domain regs must end in a null entry</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">//</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">lrwDomainMgr_.domainRegs = realloc(</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">lrwDomainMgr_.domainRegs, </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">sizeof(ec_pdo_entry_reg_t) * (lrwDomainMgr_.size + 1)  );</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">memset(</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">&(lrwDomainMgr_.domainRegs[lrwDomainMgr_.size]),</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">0, </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">sizeof(ec_pdo_entry_reg_t) );</span><o:p></o:p></p>
</div>
<p class="MsoNormal"><span style="color:black"> </span><o:p></o:p></p>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">noLrwReadDomainMgr_.domainRegs = realloc(</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">noLrwReadDomainMgr_.domainRegs, </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">sizeof(ec_pdo_entry_reg_t) * (noLrwReadDomainMgr_.size + 1)  );</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">memset(</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">&(noLrwReadDomainMgr_.domainRegs[noLrwReadDomainMgr_.size]),</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">0, </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">sizeof(ec_pdo_entry_reg_t) );</span><o:p></o:p></p>
</div>
<p class="MsoNormal"><span style="color:black"> </span><o:p></o:p></p>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">noLrwWriteDomainMgr_.domainRegs = realloc(</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">noLrwWriteDomainMgr_.domainRegs, </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">sizeof(ec_pdo_entry_reg_t) * (noLrwWriteDomainMgr_.size + 1)  );</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">memset(</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">&(noLrwWriteDomainMgr_.domainRegs[noLrwWriteDomainMgr_.size]),</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">0, </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">sizeof(ec_pdo_entry_reg_t) );</span><o:p></o:p></p>
</div>
<p class="MsoNormal"><span style="color:black"> </span><o:p></o:p></p>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">//</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">// NOTE: the Output Domain must be registered with</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">// ecrt_domain_reg_pdo_entry_list before the Input Domain otherwise you </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">// will not have any data exchanged even though the drive goes into OP</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">// mode.</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">//</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">PRINT("\nAttempting to register PDOs on WRITE ONLY domain...\n");</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">if (ecrt_domain_reg_pdo_entry_list(</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">noLrwWriteDomainMgr_.domain, noLrwWriteDomainMgr_.domainRegs)) </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">{</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">PRINT("WRITE ONLY PDO entry registration failed!\n");</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">return FALSE;</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">    }</span><o:p></o:p></p>
</div>
<p class="MsoNormal"><span style="color:black"> </span><o:p></o:p></p>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">PRINT("\nAttempting to register PDOs on READ ONLY domain...\n");</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">if (ecrt_domain_reg_pdo_entry_list(</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">noLrwReadDomainMgr_.domain, noLrwReadDomainMgr_.domainRegs)) </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">{</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">PRINT("READ ONLY PDO entry registration failed!\n");</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">return FALSE;</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> }</span><o:p></o:p></p>
</div>
<p class="MsoNormal"><span style="color:black"> </span><o:p></o:p></p>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">//</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">// And now we register the bi-directional domain.</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">//</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">PRINT("\nAttempting to register PDOs on LRW domain...\n");</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">if (ecrt_domain_reg_pdo_entry_list(</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">lrwDomainMgr_.domain, lrwDomainMgr_.domainRegs)) </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">{</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">PRINT("LRW PDO entry registration failed!\n");</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">return FALSE;</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">    }</span><o:p></o:p></p>
</div>
<p class="MsoNormal"><span style="color:black"> </span><o:p></o:p></p>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">/*</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">* Finishes the configuration phase and prepares for cyclic operation.</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">* This function tells the master that the configuration phase </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">* is finished and the realtime operation will begin.</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">* The function allocates internal memory for the domains and calculates </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">* the logical FMMU addresses for domain members. </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">* It tells the master state machine that the bus configuration is </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">* now to be applied</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">*/</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">PRINT("\nAttempting to activate ECAT master...\n");</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">if (ecrt_master_activate(master_))</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">{</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">PRINT(</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">"%s Failed to activate master!\n",</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">__FUNCTION__ );</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">return FALSE;</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">}</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">/*</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">* Returns the domain's process data. </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">*/</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">PRINT( "%s getting LRW process data from master.\n", __FUNCTION__ );</span><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">if (!(lrwDomainMgr_.processData </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">= ecrt_domain_data(lrwDomainMgr_.domain))) </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">{</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">PRINT(</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">"%s set ecProcessData -- domain data is NULL!\n",</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">__FUNCTION__ );</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">return FALSE;</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> }</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">if (!(noLrwReadDomainMgr_.processData </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">= ecrt_domain_data(noLrwReadDomainMgr_.domain))) </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">{</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">PRINT(</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">"%s set read ProcessData -- domain data is NULL!\n",</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">__FUNCTION__ );</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">return FALSE;</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">    }</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">if (!(noLrwWriteDomainMgr_.processData </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">= ecrt_domain_data(noLrwWriteDomainMgr_.domain))) </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">{</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">PRINT(</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">"%s set write ProcessData -- domain data is NULL!\n",</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">__FUNCTION__ );</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">return FALSE;</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">    }</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">… // blah blah blah</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">doScan_ = TRUE;</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;"> </span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">PRINT( "%s completed successfully.\n", __FUNCTION__ );</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">return TRUE;</span><o:p></o:p></p>
</div>
<p class="MsoNormal"><span style="color:black"> </span><o:p></o:p></p>
<div>
<p class="MsoNormal"><span style="font-size: 10.5pt; font-family: Calibri, sans-serif; color: black;">}</span><o:p></o:p></p>
</div>
</div>
<div>
<div id="">
<p class="MsoNormal"><span style="color:black"> </span><o:p></o:p></p>
</div>
</div>
</div>
</div>
</div>
</blockquote>
</div>
</div>
</div>
</span>
</body>
</html>