国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于Linux平臺(tái)的EtherCAT主站設(shè)計(jì)與研究

2023-12-18 10:42:15楊亮亮錢(qián)家豪魯文其潘曉銘
計(jì)算機(jī)時(shí)代 2023年11期

楊亮亮 錢(qián)家豪 魯文其 潘曉銘

關(guān)鍵詞:EtherCAT;Linux;工業(yè)以太網(wǎng);SOEM

中圖分類(lèi)號(hào):TP273 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1006-8228(2023)11-12-04

0 引言

在工業(yè)自動(dòng)化控制領(lǐng)域,控制系統(tǒng)需不斷滿(mǎn)足通信速度、控制精度、抗干擾能力和實(shí)時(shí)性的要求[1]。傳統(tǒng)總線(xiàn)控制方式已不能滿(mǎn)足要求,工業(yè)以太網(wǎng)技術(shù)因其高實(shí)時(shí)性和穩(wěn)定性成為工業(yè)技術(shù)發(fā)展的重要推動(dòng)力,如廣泛應(yīng)用的有EtherCAT、EtherNet/IP、SERCOS等[2]。

EtherCAT 協(xié)議使用了一種名為“處理數(shù)據(jù)”的方式,使得數(shù)據(jù)可以在網(wǎng)絡(luò)上以非常高的速度傳輸,從而獲得實(shí)時(shí)性能好的控制,在測(cè)控領(lǐng)域、工業(yè)機(jī)器人等領(lǐng)域都有著重要的應(yīng)用價(jià)值。

目前市面上使用EtherCAT 來(lái)控制高端數(shù)控系統(tǒng)的主站,主要是倍福公司基于傳統(tǒng)的PC 研發(fā)的TwinCAT 商業(yè)主站,其價(jià)格高昂、不開(kāi)源、靈活性差,正在被嵌入式主站逐步替代[3-4],但傳統(tǒng)的嵌入式主站因其芯片價(jià)格一直居高不下,故使用成本高。針對(duì)上述問(wèn)題,本文設(shè)計(jì)了一種Linux+RT-PREEMPT+SOME 的框架下搭建EtherCAT 主站的方案,采用國(guó)產(chǎn)T3 芯片作為主站控制芯片,實(shí)現(xiàn)了對(duì)二臺(tái)伺服電機(jī)周期性控制,并對(duì)其周期性和實(shí)時(shí)性進(jìn)行了測(cè)試。此方案即滿(mǎn)足了EtherCAT 主站強(qiáng)實(shí)時(shí)性和高穩(wěn)定性的要求,又解決了傳統(tǒng)EtherCAT 主站成本高、便攜性差的缺點(diǎn)。

1 EtherCAT系統(tǒng)架構(gòu)

EtherCAT 是一種實(shí)時(shí)以太網(wǎng)協(xié)議,其核心是一個(gè)分布式控制系統(tǒng),其中多個(gè)設(shè)備通過(guò)一個(gè)物理總線(xiàn)連接[5-6]。其系統(tǒng)總體架構(gòu)及運(yùn)行原理如圖1 所示,搭載Linux 實(shí)時(shí)系統(tǒng)的全志T3 系列芯片與PHY 芯片連接,然后PHY 芯片連接帶有網(wǎng)絡(luò)隔離變壓器的RJ45 接口,組成了EtherCAT 主站,從站由多臺(tái)伺服驅(qū)動(dòng)器和伺服電機(jī)構(gòu)成,主站通過(guò)網(wǎng)線(xiàn)將EtherCAT 報(bào)文發(fā)送至全部從站。

2 Linux 系統(tǒng)實(shí)時(shí)性?xún)?yōu)化

EtherCAT 主站對(duì)其搭載的操作系統(tǒng)的實(shí)時(shí)性提出了要求[7],本文選用的Linux 操作系統(tǒng)內(nèi)核版本為L(zhǎng)inux-3.10.65,其具有豐富軟件資料,穩(wěn)定性和重構(gòu)性強(qiáng)的優(yōu)勢(shì),但本身作為一個(gè)通用操作系統(tǒng)內(nèi)核而設(shè)計(jì)的,存在實(shí)時(shí)性能差的缺點(diǎn),因此選用RT-Preempt 實(shí)時(shí)補(bǔ)丁優(yōu)化Linux 系統(tǒng)[8-9]。優(yōu)化Linux 系統(tǒng)的實(shí)時(shí)性步驟如圖2 所示,通過(guò)SecureCRT 軟件,在其終端上輸入uname -a 來(lái)查看當(dāng)前開(kāi)發(fā)板的Linux 內(nèi)核的相關(guān)信息,用來(lái)判斷Linux 操作系統(tǒng)實(shí)時(shí)性?xún)?yōu)化是否成功。

3 EtherCAT 主站設(shè)計(jì)

3.1 應(yīng)用程序設(shè)計(jì)

EtherCAT 主站和從站建立通信主要由EtherCAT總線(xiàn)配置和周期實(shí)時(shí)任務(wù)兩個(gè)階段組成。如圖3 所示。通過(guò)在終端使用ifconfig 命令查看所用的網(wǎng)絡(luò)設(shè)備并對(duì)網(wǎng)口進(jìn)行配置。其中ec_config_init()函數(shù)負(fù)責(zé)從站的配置信息:包含從站的數(shù)量、產(chǎn)品的ID。以便于主站可以和特定的從站進(jìn)行PDO 數(shù)據(jù)交換。

EtherCAT 狀態(tài)機(jī)的通信機(jī)制是用來(lái)實(shí)現(xiàn)主站和從站之間的通信,并且定義了主站和從站在通信過(guò)程中可以采取的狀態(tài)[10]。EtherCAT 主站要控制從站運(yùn)行,需要經(jīng)過(guò)四個(gè)狀態(tài),分別是Init( 初始化),Pre-Operational( 預(yù)運(yùn)行),Safe-Operational( 安全運(yùn)行),Operational(運(yùn)行),必須按照“初始化→預(yù)運(yùn)行→預(yù)運(yùn)行→安全運(yùn)行”順序進(jìn)行狀態(tài)的轉(zhuǎn)化,不能越級(jí)轉(zhuǎn)化,從運(yùn)行狀態(tài)返回時(shí)可以越級(jí)轉(zhuǎn)化[11]。

EtherCAT 主站控制伺服電機(jī)周期同步位置模式模式(Cyclic synchronous position mode, CSP)運(yùn)行,需要在Pre-Operational 狀態(tài)轉(zhuǎn)向Safe-Operational 狀態(tài)期間,需要配置從站的信息,主站按照CiA402 標(biāo)準(zhǔn)協(xié)議進(jìn)行PDO 映射,PDO 可以分為RxPDO(信息寫(xiě)入從站)和TxPDO(從站發(fā)出信息),其配置信息如圖4所示。

伺服電機(jī)csp 模式運(yùn)行之前,需要設(shè)置伺服驅(qū)動(dòng)器的模式并且控制其使能,根據(jù)CiA402 協(xié)議,csp 模式對(duì)應(yīng)的控制模式為8,因此需要將地址60600008h 寫(xiě)入8,地址60400010h 寫(xiě)入任意數(shù)→6→7→15 的順序使能伺服驅(qū)動(dòng)器。

3.2 周期性實(shí)時(shí)任務(wù)

周期性實(shí)時(shí)任務(wù)的作用是實(shí)現(xiàn)主站與從站之間過(guò)程數(shù)據(jù)的交換,其包含了主站周期性實(shí)時(shí)生成控制指令(邏輯運(yùn)算指令和運(yùn)動(dòng)控制算法)并發(fā)送給從站,從站接收完主站指令執(zhí)行周期性任務(wù)以及反饋運(yùn)行狀態(tài)。在SOEM 中實(shí)現(xiàn)的代碼如下所示:

ec_send_processdata();

ec_receive_processdata(EC_TIMEOUTRET);

周期時(shí)間的控制精度影響著EtherCAT 實(shí)時(shí)性的精度,因此時(shí)鐘函數(shù)選用的是擁有納秒級(jí)精度的clock_gettime()和clock_nanosleep()。其周期實(shí)時(shí)任務(wù)設(shè)計(jì)模塊如圖5 所示。其中clock_gettime()和clock_nanosleep()函數(shù)的第一參數(shù)為CLOCK_MONOTONIC,將以絕對(duì)時(shí)間為準(zhǔn),獲取的時(shí)間為系統(tǒng)重啟到現(xiàn)在的時(shí)間,系統(tǒng)時(shí)間的更改對(duì)其沒(méi)有影響,t1 和t2為絕對(duì)時(shí)間。

4 實(shí)驗(yàn)平臺(tái)搭建及測(cè)試

本文提出的基于Linux 嵌入式的EtherCAT 主站實(shí)驗(yàn)平臺(tái)如圖6所示,其中主要由EtherCAT主站和從站組成,全志T3系列開(kāi)發(fā)板上使用Linux+RT-PREEMPT+SOEM 的開(kāi)源架構(gòu)作為EtherCAT 主站,從站選用了兩臺(tái)禾川公司開(kāi)發(fā)的X3E 伺服驅(qū)動(dòng)器和伺服電機(jī)。

4.1 Linux 內(nèi)核實(shí)時(shí)性測(cè)試

RT-PREEMPT 移植完成后,需要對(duì)其進(jìn)行實(shí)時(shí)性測(cè)試,以此來(lái)用對(duì)在實(shí)際應(yīng)用場(chǎng)合中處理多任務(wù)高負(fù)載的場(chǎng)景,因此使用壓力測(cè)試工具模擬系統(tǒng)處于高負(fù)載的場(chǎng)景,并且同時(shí)運(yùn)行EtherCAT 主站應(yīng)用程序,然后使用Cyclictest 工具測(cè)量系統(tǒng)的實(shí)時(shí)性。

使用由圖7 可知,沒(méi)有實(shí)時(shí)內(nèi)核的Linux 系統(tǒng)的實(shí)時(shí)線(xiàn)程最大延遲達(dá)到了2ms,已經(jīng)超出了EtherCAT 對(duì)實(shí)時(shí)性的要求。而由圖8 表明,經(jīng)過(guò)實(shí)時(shí)性?xún)?yōu)化的Linux 內(nèi)核的實(shí)時(shí)線(xiàn)程的性能得到了極大的提升,最大的延遲在60us 左右,平均延遲在18us 左右,最小延遲在11us 左右,其結(jié)果表明實(shí)時(shí)內(nèi)核的性能更加優(yōu)于非實(shí)現(xiàn)內(nèi)核,達(dá)到了EtherCAT 主站對(duì)實(shí)時(shí)性u(píng)s 精度的要求。

4.2 EtherCAT 通信測(cè)試

周期時(shí)間需要實(shí)際工程的需求來(lái)設(shè)定,其中EtherCAT 數(shù)據(jù)幀收發(fā)的時(shí)間是一個(gè)重要的影響因素,周期時(shí)間設(shè)定的值必須要大于EtherCAT 一幀數(shù)據(jù)幀的收發(fā)時(shí)間,選用clock_gettime() 函數(shù)來(lái)測(cè)量EtherCAT 收發(fā)幀的時(shí)間,經(jīng)過(guò)長(zhǎng)時(shí)間的測(cè)量,最大時(shí)間為420us??紤]到伺服運(yùn)動(dòng)控制也需要花費(fèi)時(shí)間,因此將周期時(shí)間設(shè)為2ms。

啟動(dòng)EtherCAT 主站應(yīng)用程序,主站與從站進(jìn)行周期數(shù)據(jù)交換后,使用交換機(jī)分別與PC 和T3 開(kāi)發(fā)板的網(wǎng)口相連,使用Wireshark 軟件抓取EtherCAT 數(shù)據(jù)幀并進(jìn)行統(tǒng)計(jì)與分析,EtherCAT 報(bào)文如圖9 所示。

EtherCAT通過(guò)檢擦字報(bào)文中的WKC(Working Cnt)的值并和預(yù)期的值進(jìn)行對(duì)比,以此來(lái)判斷從站是否有正確的處理報(bào)文,當(dāng)字報(bào)文經(jīng)過(guò)一個(gè)從站時(shí),進(jìn)行讀或?qū)懖僮鞒晒r(shí),WKC 會(huì)加1,在進(jìn)行讀/寫(xiě)操作時(shí),讀成功時(shí)WKC 加1,寫(xiě)成功時(shí)WKC 加2,讀寫(xiě)都成功時(shí),WKC 的時(shí)便會(huì)加3[12]。由圖9 可知,主站連接著兩個(gè)伺服從站,執(zhí)行LRW 和FRMW 的命令后,WKC 的數(shù)值從0 分別變?yōu)榱? 和2,說(shuō)明了從站正確處理了報(bào)文。

4.3 主站實(shí)時(shí)性測(cè)試

在SOEM 中,ecx_context.DCtime 是一個(gè)用來(lái)表示當(dāng)前DC 時(shí)鐘值的變量,可以通過(guò)檢查ecx_context.DCtime 的值來(lái)確定從站的同步狀態(tài),因此使用ns 級(jí)別精度的clock_gettime()函數(shù)來(lái)獲取當(dāng)前以及上一個(gè)ecx_context.DCtime 的值,通過(guò)當(dāng)前的DC 值減去上一次的DC 值,便可以計(jì)算出當(dāng)前的數(shù)據(jù)傳輸時(shí)間,經(jīng)過(guò)長(zhǎng)時(shí)間的測(cè)試,其結(jié)果如表1 所示,EtherCAT 數(shù)據(jù)幀傳輸平均周期為2000005ns 左右,符合設(shè)定了2ms 周期,并且最大的周期為2139840ns,與設(shè)定的2ms 周期相差了130us 左右,符合EtherCAT 對(duì)實(shí)時(shí)性的要求,而且在測(cè)試期間伺服電機(jī)通信穩(wěn)定無(wú)報(bào)錯(cuò)。

由表1 的結(jié)果表明,該方案能穩(wěn)定運(yùn)行EtherCAT通信,為了進(jìn)一步分析其主站的性能,利用tshark 工具將Wireshark 抓取的EtherCAT 數(shù)據(jù)包中的時(shí)間戳提取出來(lái)并進(jìn)行分析,其測(cè)試結(jié)果如下所示:

由圖10 可知,在Linux+RT-PREEMPT+SOEM 的架構(gòu)中,EtherCAT 主站和從站能正常的周期性通信,該方案的抖動(dòng)量在80us 左右,最大的抖動(dòng)量在160us左右。與系統(tǒng)設(shè)置的2ms 周期相比,其延遲是符合預(yù)期要求的,并且在保證正常通信的情況下,該方案可以輕松地進(jìn)行跨平臺(tái)移植,從而減少了大量不必要的安裝和部署工作,降低了學(xué)習(xí)難度。此外,隨著硬件性能的提高,抖動(dòng)量也會(huì)逐漸減少。

5 結(jié)束語(yǔ)

本文介紹了基于Linux+RT-PREEMPT+SOEM 的開(kāi)源框架搭建EtherCAT 主站的主要流程,著重介紹了應(yīng)用程序設(shè)計(jì)流程和Linux 內(nèi)核實(shí)時(shí)性?xún)?yōu)化方法,對(duì)搭建好的主站進(jìn)行性能測(cè)試,其結(jié)果表明,使用優(yōu)化后的Linux 內(nèi)核,以本文方案搭建的EtherCAT 主站能順利運(yùn)行,主站抖動(dòng)量穩(wěn)定在80us 左右,具有較高的實(shí)時(shí)性和穩(wěn)定性,較好地解決了傳統(tǒng)EtherCAT 成本高昂、便攜性差的問(wèn)題,為EtherCAT 主站在Linux 平臺(tái)搭建提供了一種切實(shí)可行的方案。

同心县| 东乌珠穆沁旗| 巴中市| 丹凤县| 蓬溪县| 禹城市| 包头市| 安阳市| 台湾省| 郎溪县| 阳春市| 同心县| 巴林右旗| 寻乌县| 韶关市| 仁怀市| 丘北县| 志丹县| 于田县| 横山县| 精河县| 化州市| 宝应县| 临漳县| 林芝县| 新化县| 榆树市| 金堂县| 北票市| 新兴县| 通州市| 金阳县| 榆树市| 贺州市| 张北县| 滕州市| 阳朔县| 荣昌县| 佛冈县| 夏津县| 上饶市|