天天看點

EtherCAT igh "Fatal Sync Error"——0x002C,0x001A

問題還沒解決,後續會跟進。打算記錄一下調試過程,以防後面忘記。當然也希望有朋友能指點我一下,哈哈。

使用igh進行開發,遇到了一個報錯,這種報錯無規律可言,測試的時候,有時會出現,有時不出現。

EtherCAT igh "Fatal Sync Error"——0x002C,0x001A

這個問題,我問了一個網友,他的回答如下:

EtherCAT從站有個本地時鐘(是個定時器,1ms一次中斷,這個中斷函數會去喂狗,就是累加一個數),sync會去清零這個累加數(清除喂狗的次數)。當喂狗的次數(就是那個累加數)大于等于約定的次數時,就會報這個錯誤。

是以查三個地方,一個是定時的周期是否正确,二是喂狗的次數上限是否正确,三是否在規定時間内接收到sync中斷。

你可以用開發闆接你的主站,能正常通訊,那就不是sync的問題,查兩外兩個。

這個報錯的資訊是從站上傳的,你可以在從站代碼裡面全局搜尋002c,就能找到這個錯誤的宏定義,和報錯的地方

ctrl + F, 全局搜尋002c

EtherCAT igh "Fatal Sync Error"——0x002C,0x001A
EtherCAT igh "Fatal Sync Error"——0x002C,0x001A

繼續全局查找這個bDcRunning

EtherCAT igh "Fatal Sync Error"——0x002C,0x001A

然後debug這兩個變量

EtherCAT igh "Fatal Sync Error"——0x002C,0x001A

上面在動的那個計數,大于等于下面那個就報錯了,有時候等于也沒報錯,這是因為報錯的機制在主函數循環裡面,還沒執行到,又被清零了,是以有時候不報錯,這是bug。

ASK:如果說sync中斷慢了,也會報這種錯誤是吧?
ANSWER:是的,因為狗已經喂飽了,就是那個計數已經超過設定的計數值了,
		喂狗就是不斷的讓那個計數值加1,sync中斷會清零那個計數值,
		那個計數值大于一定數,就會sync報錯,就是你遇到的那個錯誤。
           

好吧,其實忙活了半天隻是知道為什麼會報錯,并沒能找到報錯的真正原因!!!

個人認為并不是從站的問題,我用TwinCAT連接配接從站做測試,尚未發現這個問題,隻有在用igh主站的時候會報錯!!!

這個問題應該叫做“EtherCAT網絡抖動問題”,我在知網搜到了一篇論文《一種EtherCAT軟主站的抖動抑制方法》,論文中講述了一些造成抖動的原因,有興趣的可以下載下傳參考。

過段時間打算研究一下從站程式的流程,以及IRQ、sync0、sync1三個中斷。

繼續閱讀