以下部分包含應(yīng)用程序接口的一般說(shuō)明
每個(gè)應(yīng)用程序應(yīng)該通過(guò)兩個(gè)步驟使用主站:
配置? 請(qǐng)求主站并應(yīng)用配置。 例如,創(chuàng)建域,配置從屬并注冊(cè)PDO條目(請(qǐng)參見(jiàn)第3.1節(jié))。
運(yùn)行??運(yùn)行循環(huán)代碼和交換過(guò)程數(shù)據(jù)(參見(jiàn)第3.2節(jié))。
應(yīng)用程序示例 在主站代碼的examples /子目錄中有一些示例應(yīng)用程序。 它們被記錄在源代碼中。
3.1 主站配置
總線(xiàn)配置通過(guò)應(yīng)用程序接口提供。圖3.1給出了可由應(yīng)用程序配置的對(duì)象的概述。
總線(xiàn)配置通過(guò)應(yīng)用程序接口提供。圖3.1給出了可由應(yīng)用程序配置的對(duì)象的概述。
?
3.1.1 從站配置
應(yīng)用程序必須告訴主站有關(guān)預(yù)期的總線(xiàn)拓?fù)?。這可以通過(guò)創(chuàng)建“從站配置”來(lái)完成。從站配置可以看作是預(yù)期的從站設(shè)備。當(dāng)創(chuàng)建從站配置時(shí),應(yīng)用程序提供總線(xiàn)位置(見(jiàn)下文),供應(yīng)商ID和產(chǎn)品代碼。
當(dāng)應(yīng)用總線(xiàn)配置時(shí),主站會(huì)檢查,在給定位置是否存在給定供應(yīng)商ID和產(chǎn)品代碼的從站。如果存在,從站配置將“附加”到總線(xiàn)上的實(shí)際從站,并根據(jù)應(yīng)用程序提供的設(shè)置配置從站。從站配置的狀態(tài)可以通過(guò)應(yīng)用程序接口或通過(guò)命令行工具查詢(xún)。
從站位置 從站位置必須指定為“別名”和“位置”的元組。允許通過(guò)絕對(duì)總線(xiàn)位置或通過(guò)保存的稱(chēng)為“別名”的標(biāo)識(shí)符或兩者的混合來(lái)對(duì)從站尋址。別名是存儲(chǔ)在從站E2PROM中的16位值。它可以通過(guò)命令行工具進(jìn)行修改。表3.1顯示了如何解釋這些值。
別名位置解釋
00-65535位置尋址。 位置參數(shù)被解釋為總線(xiàn)中的絕對(duì)環(huán)位置。
1-655350-65535別名尋址。 位置參數(shù)被解釋為在具有給定別名地址的第一從站之后的相對(duì)位置。
圖3.2顯示了如何連接從站配置的示例。添加了一些配置,而其他配置保持分離。下面的列表給出了從最高開(kāi)始的各從站配置的原因。
?
1. 別名為0意味著使用簡(jiǎn)單的位置尋址。 從站1存在,并且供應(yīng)商ID和產(chǎn)品代碼與預(yù)期值匹配。
2. 雖然找到了位置為0的從站,但產(chǎn)品代碼不匹配,因此不添加配置。
3. 別名非0,因此使用別名尋址。 從站2是別名為0x2000的第一個(gè)從機(jī)。 由于位置值為0,因此使用相同的從站。
4. 沒(méi)有具有給定別名的從站,因此無(wú)法添加配置。
5. 從站2再次是別名為0x2000的第一個(gè)從機(jī),但位置現(xiàn)在為1,因此添加從站3。
如果主站源代碼配置了–enable-wildcards,則0xffffffff將匹配任何一個(gè)供應(yīng)商ID和/或產(chǎn)品代碼。
3.2 循環(huán)操作
要進(jìn)入循環(huán)操作模式,必須“激活”主站來(lái)計(jì)算過(guò)程數(shù)據(jù)映像,并首次循環(huán)操作時(shí)應(yīng)用總線(xiàn)配置。激活后,應(yīng)用程序負(fù)責(zé)發(fā)送和接收幀。激活后無(wú)法更改配置。
3.3 VoE處理程序
在配置階段,應(yīng)用程序可以創(chuàng)建第6.3節(jié)中描述的VoE郵箱協(xié)議的處理程序。一個(gè)VoE處理程序總是屬于某個(gè)從站配置,因此創(chuàng)建函數(shù)是從站配置的一個(gè)方法。
VoE處理器管理VoE數(shù)據(jù)和用于發(fā)送和接收VoE消息的數(shù)據(jù)報(bào)。它包含傳輸VoE消息所需的狀態(tài)機(jī)。
VoE狀態(tài)機(jī)一次只能處理一個(gè)操作。因此,一次可以進(jìn)行一個(gè)讀或?qū)懖僮?。操作啟動(dòng)后,處理程序必須循環(huán)執(zhí)行,直到完成。之后,可以檢索操作的結(jié)果。
VoE處理程序具有自己的數(shù)據(jù)報(bào)結(jié)構(gòu),它將被標(biāo)記,用于在每個(gè)執(zhí)行步驟之后進(jìn)行交換。因此,應(yīng)用程序可以決定在發(fā)送相應(yīng)的EtherCAT幀之前執(zhí)行多少個(gè)處理程序。
有關(guān)使用VoE處理程序的更多信息,請(qǐng)參閱examples /目錄中提供的應(yīng)用程序接口函數(shù)和示例應(yīng)用程序的文檔。
3.4并發(fā)主站訪(fǎng)問(wèn)
在某些情況下,一個(gè)主站由多個(gè)實(shí)例使用,例如,當(dāng)應(yīng)用程序執(zhí)行循環(huán)過(guò)程數(shù)據(jù)交換的同時(shí)時(shí),存在支持EoE的從站需要與內(nèi)核交換以太網(wǎng)數(shù)據(jù)(參見(jiàn)第6.1節(jié))。為此,主站是共享資源,并且對(duì)其的訪(fǎng)問(wèn)必須被順序化。這通常通過(guò)鎖定信號(hào)量或其他方法保護(hù)關(guān)鍵部分來(lái)完成。
主站本身不能提供鎖定機(jī)制,因?yàn)樗鼪](méi)有機(jī)會(huì)知道合適的鎖定類(lèi)型。例如,如果應(yīng)用程序在內(nèi)核空間中并且使用RTAI功能,則普通內(nèi)核信號(hào)量將是不夠的。為此,作出了一個(gè)重要的設(shè)計(jì)決定:預(yù)定主站的應(yīng)用程序必須具有完全控制,因此它必須負(fù)責(zé)提供適當(dāng)?shù)逆i定機(jī)制。如果另一個(gè)實(shí)例想要訪(fǎng)問(wèn)主站,它必須通過(guò)回調(diào)請(qǐng)求總線(xiàn)訪(fǎng)問(wèn),這必須由應(yīng)用程序提供。此外,如果應(yīng)用程序認(rèn)為實(shí)例在當(dāng)時(shí)是不合適的,則可以拒絕對(duì)主機(jī)的訪(fǎng)問(wèn)。
圖3.3示例顯示了兩個(gè)進(jìn)程如何共享一個(gè)主站:應(yīng)用程序的循環(huán)任務(wù)使用主站進(jìn)行過(guò)程數(shù)據(jù)交換,而主站內(nèi)部EoE進(jìn)程使用主站與具有EoE功能的從站通信。兩者都不時(shí)訪(fǎng)問(wèn)總線(xiàn),但EoE進(jìn)程通過(guò)“請(qǐng)求”應(yīng)用程序
訪(fǎng)問(wèn)總線(xiàn)。這樣,應(yīng)用程序可以使用適當(dāng)?shù)逆i定機(jī)制來(lái)避免同時(shí)訪(fǎng)問(wèn)總線(xiàn)。有關(guān)如何使用這些回調(diào),請(qǐng)參閱應(yīng)用程序接口文檔(第3章)。
?
3.5 分布式時(shí)鐘
從版本1.5開(kāi)始,主站支持EtherCAT的“分布式時(shí)鐘”功能??梢詫⒖偩€(xiàn)上的從站時(shí)鐘同步到“參考時(shí)鐘”(支持DC的第一從站的本地時(shí)鐘),并且將參考時(shí)鐘同步到“主站時(shí)鐘”(主站的本地時(shí)鐘)。總線(xiàn)上的所有其他時(shí)鐘(在參考時(shí)鐘之后)被視為“從站時(shí)鐘”(見(jiàn)圖3.4)。
?
本地時(shí)鐘 任何支持DC的EtherCAT從站都有一個(gè)具有納秒分辨率的本地時(shí)鐘寄存器。如果從站被供電,則時(shí)鐘從零開(kāi)始,這意味著當(dāng)從站在不同時(shí)間上電時(shí),它們的時(shí)鐘將具有不同的值。這些“偏移”必須通過(guò)分布式時(shí)鐘機(jī)制來(lái)補(bǔ)償。另一方面,時(shí)鐘不是以相同的速度精確地運(yùn)行,因?yàn)樗褂玫氖卧哂泄逃械念l率偏差。該偏差通常非常小,但是在較長(zhǎng)時(shí)間段內(nèi),誤差將累積,而且本地時(shí)鐘之間的差異將增大。這個(gè)時(shí)鐘“漂移”也必須由DC機(jī)制補(bǔ)償。
應(yīng)用程序時(shí)間 總線(xiàn)的公共時(shí)基必須由應(yīng)用程序提供。 使用此應(yīng)用程序時(shí)間的tapp
1. 以配置從站的時(shí)鐘偏移(見(jiàn)下文),
2. 以編程從器件的同步脈沖產(chǎn)生的開(kāi)始時(shí)間(見(jiàn)下文),
3. 以將參考時(shí)鐘同步到主時(shí)鐘(可選)。
偏移補(bǔ)償 對(duì)于偏移補(bǔ)償,每個(gè)從站提供一個(gè)“系統(tǒng)時(shí)間偏移”寄存器toff,它被添加到內(nèi)部時(shí)鐘值tint以獲得“系統(tǒng)時(shí)間”tsys:
tsys = tint + toff
? tint = tsys ? toff
主站讀取兩個(gè)寄存器的值,以某種方式計(jì)算新的系統(tǒng)時(shí)間偏移,結(jié)果系統(tǒng)時(shí)間應(yīng)與主機(jī)的應(yīng)用時(shí)間tapp匹配:
tsys ? tapp
? tint + toff ? tapp
? toff = tapp ? tint
? toff = tapp ?( tsys ? toff )
? toff = tapp ? tsys + toff
由讀取和寫(xiě)入寄存器的不同時(shí)間產(chǎn)生的小的時(shí)間偏移誤差將由漂移補(bǔ)償進(jìn)行補(bǔ)償。
漂移補(bǔ)償 由于每個(gè)支持DC的從站中有特殊機(jī)制,因此可以進(jìn)行漂移補(bǔ)償:對(duì)“系統(tǒng)時(shí)間”寄存器的寫(xiě)操作將使得內(nèi)部時(shí)間控制循環(huán)對(duì)寫(xiě)入時(shí)間(減去編程的傳輸延遲,見(jiàn)下文)與當(dāng)前系統(tǒng)時(shí)間進(jìn)行比較。計(jì)算出的時(shí)間誤差將用作時(shí)間控制器的輸入,根據(jù)誤差的符號(hào)將本地時(shí)鐘速度調(diào)整為稍快或慢一些2。
傳輸延遲 以太網(wǎng)幀從從站到從站需要少量時(shí)間。所得的傳輸延遲時(shí)間累積在總線(xiàn)上,并且可以達(dá)到微秒級(jí)別,因此在漂移補(bǔ)償期間必須被考慮。支持DC的EtherCAT從站提供一種測(cè)量傳輸延遲的機(jī)制:對(duì)于四個(gè)從站端口中的每一個(gè),有一個(gè)接收時(shí)間寄存器。從對(duì)端口0的接收時(shí)間寄存器的寫(xiě)操作開(kāi)始測(cè)量,一旦在相應(yīng)端口上接收到幀,則當(dāng)前系統(tǒng)時(shí)間被鎖存并存儲(chǔ)在接收時(shí)間寄存器中。主站可以讀出相對(duì)接收時(shí)間,然后計(jì)算從站之間的時(shí)間延遲(使用主站對(duì)總線(xiàn)拓?fù)涞亩x),最后計(jì)算從參考時(shí)鐘到每個(gè)從機(jī)的時(shí)間延遲。這些值通過(guò)編程被寫(xiě)到從站的傳輸延遲寄存器中。以這種方式,漂移補(bǔ)償可以達(dá)到納秒級(jí)同步。
檢查同步性 支持DC的從站在地址0x092c處提供32位“系統(tǒng)時(shí)間差”寄存器,其中最后一次漂移補(bǔ)償?shù)南到y(tǒng)時(shí)間差以納秒分辨率和符號(hào)-幅值編碼方式存儲(chǔ)3。為了檢查總線(xiàn)同步性,系統(tǒng)時(shí)間差寄存器也可以通過(guò)命令行工具循環(huán)讀?。ㄒ?jiàn)第7.1.14節(jié)):、
$ watch -n0 “ethercat reg read -p4 -tsm32 0x92c”
同步信號(hào) 同步時(shí)鐘是總線(xiàn)上同步事件的先決條件。每個(gè)支持DC的從站提供兩個(gè)“同步信號(hào)”,其可以被編程以創(chuàng)建事件,這將,例如,使得從站應(yīng)用程序在某個(gè)時(shí)刻鎖存其輸入。同步事件可以一次生成或循環(huán)生成,取決于哪種對(duì)從站應(yīng)用程序有意義。編程同步信號(hào)設(shè)置所謂的“AssignActivate”字和同步信號(hào)的周期和移位時(shí)間。AssignActivate字是從站確定的,并且必須取自XML從站描述(Device → Dc),其中還可以找到典型的同步信號(hào)配置“ OpModes”。
1如果需要同時(shí)發(fā)送和接收,則可以為從配置創(chuàng)建兩個(gè)VoE處理程序。
2本地從時(shí)鐘將每10 ns以9 ns,10 ns或 11 ns的頻率遞增。
3這允許廣播讀取總線(xiàn)上的所有系統(tǒng)時(shí)間差寄存器以獲得向上近似
電子發(fā)燒友App
















評(píng)論