<html><head><meta http-equiv="content-type" content="text/html; charset=UTF-8"><style>body { line-height: 1.5; }blockquote { margin-top: 0px; margin-bottom: 0px; margin-left: 0.5em; }body { font-size: 10.5pt; font-family: 微软雅黑; color: rgb(0, 0, 0); line-height: 1.5; }</style></head><body>
<div><span></span>Hi <span style="font-size: 10.5pt; line-height: 1.5; background-color: transparent;">Roberto,</span></div><div><span style="font-size: 10.5pt; line-height: 1.5; background-color: transparent;"><br></span></div><div><span style="color: rgb(0, 0, 0); background-color: rgba(0, 0, 0, 0);">    My system stucks if I call </span><span style="font-size: 10.5pt; line-height: 1.5; background-color: transparent;">clock_gettime in RTAI realtime task, maybe it's similar with Xenomai. And I think it's OK to call </span><span style="font-size: 10.5pt; line-height: 1.5; background-color: transparent;">clock_gettime(which would cause a system call) in PREEMPT_RT. You can switch to other functions from Xenomai.</span></div><div><span style="font-size: 10.5pt; line-height: 1.5; background-color: transparent;"><br></span></div><div><span style="font-size: 10.5pt; line-height: 1.5; background-color: transparent;"><br></span></div><div><span style="font-size: 10.5pt; line-height: 1.5; background-color: transparent;">Regards</span></div>
<div>Bryan</div><div><span><div style="margin: 10px;"><br></div></span></div>
<blockquote style="margin-Top: 0px; margin-Bottom: 0px; margin-Left: 0.5em"><div> </div><div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0cm 0cm 0cm"><div style="PADDING-RIGHT: 8px; PADDING-LEFT: 8px; FONT-SIZE: 12px;FONT-FAMILY:tahoma;COLOR:#000000; BACKGROUND: #efefef; PADDING-BOTTOM: 8px; PADDING-TOP: 8px"><div><b>From:</b> <a href="mailto:roberto.viola@systemceramics.com">Viola Roberto</a></div><div><b>Date:</b> 2019-05-21 21:44</div><div><b>To:</b> <a href="mailto:hm@igh.de">Dr.-Ing. Wilhelm Hagemeister</a>; <a href="mailto:etherlab-users@etherlab.org">etherlab-users@etherlab.org</a></div><div><b>Subject:</b> [etherlab-users] R:  R: Random Datagram Unmatched</div></div></div><div><div>Hallo Wilhelm,</div>
<div>  thanks for your answer. I've already check the timings of my loop.</div>
<div>Running at 1KHz these are the clocks (ns) when i have the issue:</div>
<div> </div>
<div>Domain1: WC 0.</div>
<div>Domain1: State 0.</div>
<div>receive[0]=232048932</div>
<div>process[0]=232068191</div>
<div>queue[0]=232070560</div>
<div>send[0]=232071366</div>
<div>aftersend[0]=232077874</div>
<div>receive[1]=233053215 delta from 232077874 is 975341 so 0,975 ms</div>
<div>process[1]=233071905</div>
<div>queue[1]=233096531</div>
<div>send[1]=233097696</div>
<div>aftersend[1]=233113699</div>
<div> </div>
<div>Domain1: WC 3.</div>
<div>Domain1: State 2.</div>
<div>receive[-1]=233053215</div>
<div>process[-1]=233071905</div>
<div>queue[0]=233096531</div>
<div>send[0]=233097696</div>
<div>aftersend[0]=233113699</div>
<div>receive[1]=234050115 delta from 233113699 is 936416 so 0,936 ms</div>
<div>process[1]=234068059</div>
<div>queue[1]=234073073</div>
<div>send[1]=234074001</div>
<div>aftersend[1]=234082476</div>
<div> </div>
<div>Domain1: WC 0.</div>
<div>Domain1: State 0.</div>
<div>receive[0]=450056645</div>
<div>process[0]=450071880</div>
<div>queue[0]=450074396</div>
<div>send[0]=450075202</div>
<div>aftersend[0]=450082843</div>
<div>receive[1]=451056992 delta from 450082843 is 974149 so 0,974 ms</div>
<div>process[1]=451073978</div>
<div>queue[1]=451084047</div>
<div>send[1]=451085161</div>
<div>aftersend[1]=451098212</div>
<div> </div>
<div>Domain1: WC 3.</div>
<div>Domain1: State 2.</div>
<div>receive[0]=451056992</div>
<div>process[0]=451073978</div>
<div>queue[0]=451084047</div>
<div>send[0]=451085161</div>
<div>aftersend[0]=451098212</div>
<div>receive[1]=452056358 delta from 451098212 is 958146 so 0,958 ms</div>
<div>process[1]=452074082</div>
<div>queue[1]=452079176</div>
<div>send[1]=452080059</div>
<div>aftersend[1]=452312695</div>
<div> </div>
<div>As you can see the 1KHz seems ok. I've also tried to append 50-100 us of sleep before calling the ecrt_master_receive without success.</div>
<div> </div>
<div>For reference this is my main loop:</div>
<div> </div>
<div>int cycle_us = 1000;</div>
<div>rt_task_set_periodic(NULL, TM_NOW, cycle_us * 1000);</div>
<div>while (run)</div>
<div>{</div>
<div>rt_task_wait_period(NULL);</div>
<div> </div>
<div>// receive EtherCAT</div>
<div>struct timespec receive[2], process[2], queue[2], send[2], aftersend[2];</div>
<div>static __u8 tictoc = 0;</div>
<div>tictoc = !tictoc;</div>
<div>clock_gettime(CLOCK_REALTIME, &receive[tictoc]);</div>
<div>ecrt_master_receive(master);</div>
<div>clock_gettime(CLOCK_REALTIME, &process[tictoc]);</div>
<div>               ecrt_domain_process(domain1);</div>
<div> </div>
<div>  rt_check_domain_state();</div>
<div> </div>
<div>if (!(cycle_counter % (int)(1000.0 / (cycle_us / 1000.0)))) {</div>
<div>rt_check_master_state();</div>
<div>seconds++;</div>
<div>}</div>
<div> </div>
<div>// send process data</div>
<div>clock_gettime(CLOCK_REALTIME, &queue[tictoc]);</div>
<div>ecrt_domain_queue(domain1);</div>
<div>clock_gettime(CLOCK_REALTIME, &send[tictoc]);</div>
<div>ecrt_master_send(master);</div>
<div>clock_gettime(CLOCK_REALTIME, &aftersend[tictoc]);</div>
<div>}</div>
<div> </div>
<div>-----Messaggio originale-----</div>
<div>Da: etherlab-users [mailto:etherlab-users-bounces@etherlab.org] Per conto di Dr.-Ing. Wilhelm Hagemeister</div>
<div>Inviato: martedì 21 maggio 2019 15:25</div>
<div>A: etherlab-users@etherlab.org</div>
<div>Oggetto: Re: [etherlab-users] R: Random Datagram Unmatched</div>
<div> </div>
<div>Hallo Roberto,</div>
<div> </div>
<div>Am 21.05.19 um 14:48 schrieb Viola Roberto:</div>
<div>></div>
<div>> This crc thing plus the packet’s counter thing by ifconfig push me to</div>
<div>> think that sometimes the ec module ignores a packet even if ethernet</div>
<div>> card receives it. Is is possible?</div>
<div> </div>
<div>Yes that is possible. If you query the NIC to early after you send the frame, it might not be back yet. What is the order of your realtime execution? Is it receiving EtherCAT (the previous frame), processing, sending EtherCAT, waiting for next rt-schedule?</div>
<div> </div>
<div>Due to jitter, or a to long execution time of your task, sending and receiving the EtherCAT frame might come to close. This might also explain why it is not a function of your cycle time. You have to monitor your execution time and cycle jitter to get to the problem.</div>
<div> </div>
<div>></div>
<div>> What happen when EC gives me this warning? I mean, i will lost the</div>
<div>> informations inside the unmatched packet for sure, but if this issue</div>
<div>> happens when i write a SDO instead of a PDO the EC will retry</div>
<div>> automatically to send another SDO packet?</div>
<div> </div>
<div>If you accept frame drops, depends on your application. We usually</div>
<div>accept a frame drop once in a while and don't trigger an emergency stop</div>
<div>or likewise. SDO transfers are handled with state machines. If a request</div>
<div>get's lost, it will be resent or will flag an error (which must be</div>
<div>handled by your application).</div>
<div> </div>
<div>Regards Wilhelm.</div>
<div>_______________________________________________</div>
<div>etherlab-users mailing list</div>
<div>etherlab-users@etherlab.org</div>
<div>http://lists.etherlab.org/mailman/listinfo/etherlab-users</div>
<div> </div>
<div> </div>
<div>Roberto Viola</div>
<div> </div>
<div>Technical Dept</div>
<div>+39 0536836680</div>
<div> </div>
<div>SYSTEM CERAMICS S.p.A.</div>
<div>Via Ghiarola Vecchia, 73</div>
<div>41042 Fiorano (Mo) ITALY</div>
<div>+39 0536 836111</div>
<div>info@system-electronics.it</div>
<div>http://www.system-electronics.it</div>
<div> </div>
<div>Le informazioni contenute in questa email, inclusi i suoi allegati, sono riservate e ad uso esclusivo del destinatario. Qualora le fosse pervenuta per errore, lei non è autorizzato a copiare, inoltrare e/o rendere nota questa email e i suoi allegati, totalmente o parzialmente, e pertanto la preghiamo di cancellarla immediatamente senza visionarne il contenuto e gli allegati.</div>
<div>Avvertenza: la presente casella e-mail ed i messaggi da essa derivanti, sono di esclusivo utilizzo aziendale /lavorativo e mai personale.</div>
<div>Risposte al presente messaggio: si avvisa il destinatario che eventuali sue risposte, potranno essere lette dall’intera azienda /ufficio /reparto di appartenenza del mittente.</div>
<div>The information contained in this e-mail, including attachments, is confidential and exclusively for the use of the intended recipient. If you received this communication by mistake you are not authorized to copy, send and/or publish this message and its attachments, in whole or in part and therefore please delete this message.</div>
<div> </div>
<div>-----Messaggio originale-----</div>
<div>Da: etherlab-users [mailto:etherlab-users-bounces@etherlab.org] Per conto di Dr.-Ing. Wilhelm Hagemeister</div>
<div>Inviato: martedì 21 maggio 2019 15:25</div>
<div>A: etherlab-users@etherlab.org</div>
<div>Oggetto: Re: [etherlab-users] R: Random Datagram Unmatched</div>
<div> </div>
<div>Hallo Roberto,</div>
<div> </div>
<div>Am 21.05.19 um 14:48 schrieb Viola Roberto:</div>
<div>></div>
<div>> This crc thing plus the packet’s counter thing by ifconfig push me to</div>
<div>> think that sometimes the ec module ignores a packet even if ethernet</div>
<div>> card receives it. Is is possible?</div>
<div> </div>
<div>Yes that is possible. If you query the NIC to early after you send the frame, it might not be back yet. What is the order of your realtime execution? Is it receiving EtherCAT (the previous frame), processing, sending EtherCAT, waiting for next rt-schedule?</div>
<div> </div>
<div>Due to jitter, or a to long execution time of your task, sending and receiving the EtherCAT frame might come to close. This might also explain why it is not a function of your cycle time. You have to monitor your execution time and cycle jitter to get to the problem.</div>
<div> </div>
<div>></div>
<div>> What happen when EC gives me this warning? I mean, i will lost the</div>
<div>> informations inside the unmatched packet for sure, but if this issue</div>
<div>> happens when i write a SDO instead of a PDO the EC will retry</div>
<div>> automatically to send another SDO packet?</div>
<div> </div>
<div>If you accept frame drops, depends on your application. We usually</div>
<div>accept a frame drop once in a while and don't trigger an emergency stop</div>
<div>or likewise. SDO transfers are handled with state machines. If a request</div>
<div>get's lost, it will be resent or will flag an error (which must be</div>
<div>handled by your application).</div>
<div> </div>
<div>Regards Wilhelm.</div>
<div>_______________________________________________</div>
<div>etherlab-users mailing list</div>
<div>etherlab-users@etherlab.org</div>
<div>http://lists.etherlab.org/mailman/listinfo/etherlab-users</div>
<div> </div>
<div> </div>
<div>_______________________________________________</div>
<div>etherlab-users mailing list</div>
<div>etherlab-users@etherlab.org</div>
<div>http://lists.etherlab.org/mailman/listinfo/etherlab-users</div>
</div></blockquote>
</body></html>