EtherCAT是一種高效且常用的工業(yè)通訊協(xié)議。本系列文章將帶領(lǐng)您使用ZLG致遠(yuǎn)電子的PCIe EtherCAT通訊卡,一步步實(shí)現(xiàn)從搭建編譯環(huán)境到程序運(yùn)行。
ZLG致遠(yuǎn)電子PCIe EtherCAT通訊卡是一款高性能的總線(xiàn)控制卡,專(zhuān)為滿(mǎn)足高實(shí)時(shí)的工業(yè)控制需求而設(shè)計(jì)?;赑CI Express技術(shù),該卡通過(guò)使用實(shí)時(shí)內(nèi)核+商業(yè)授權(quán)EtherCAT協(xié)議棧的方式,實(shí)現(xiàn)了高達(dá)125us的控制周期。
為了方便用戶(hù)的使用,該卡配套提供了全面的上位機(jī)配置軟件AWStudio,用戶(hù)通過(guò)使用AWStudio軟件,可快速掃描從站設(shè)備,輕松地得到ENI的配置文件。此外,該卡還支持Windows、Linux、Vxworks等多平臺(tái),并提供了簡(jiǎn)潔易用的SDK接口。無(wú)論是在復(fù)雜的工業(yè)控制中,還是在追求高性能的場(chǎng)景中,ZLG致遠(yuǎn)電子的PCIe EtherCAT通訊卡都是您的理想選擇。運(yùn)行框架:
表1 PCIeEtherCAT通訊卡型號(hào)
?搭建步驟為了優(yōu)化客戶(hù)使用PCIe EtherCAT通訊卡的體驗(yàn),我們將詳細(xì)介紹在Ubuntu環(huán)境下開(kāi)發(fā)項(xiàng)目搭建環(huán)境的步驟,以及如何快速上手使用PCIE卡和IO從站進(jìn)行通訊。這將使您能夠快速而輕松地將ZLG致遠(yuǎn)電子的PCIe EtherCAT通訊卡接入到您的工程項(xiàng)目中。
1. 前期準(zhǔn)備1.1 在目標(biāo)機(jī)器上安裝驅(qū)動(dòng);
1.2 獲得SDK包;
1.3 使用AWStudio導(dǎo)出EtherCAT網(wǎng)絡(luò)信息文件(ENI)。
2. 項(xiàng)目創(chuàng)建
2.1 構(gòu)建工程目錄
新建Project文件夾。
將sdk移動(dòng)到工程目錄中。
移動(dòng)完后,工程目錄Project將會(huì)是下圖的樣子。
2.2 CMakeLists.txt編寫(xiě)
在Project目錄下,創(chuàng)建CMakeLists.txt文件。
在CMakeLists.txt文件中輸入。
2.3 創(chuàng)建測(cè)試程序
在src目錄中創(chuàng)建主程序ecat_api_io_test.cpp,該文件名需要和CMakeLists.txt中的SRC變量相同。
打開(kāi)ecat_api_io_test.cpp文件。輸入內(nèi)容:
#include #include //用于sleep#include //用于sleep#include "pci_errno.h"#include "pci_zecm.h"#include "pci_dbg.h"
int32_t testDemo(int alias, int channel, const char* fileName){int result = 0;char buff[256]; ECAT_HANDLE hHandle; //初始化hHandle句柄 EXIT_IF_FAIL(EcatOpen(&hHandle, BOARD_ALIAS(buff, alias), channel));//啟動(dòng)主站 EXIT_IF_FAIL(EcatBusRun(hHandle, fileName));//將狀態(tài)切換為8(Operational) EXIT_IF_FAIL(EcatRequestMasterState(hHandle, EcatStateO));EXIT_IF_FAIL(EcatClose(hHandle)); return result;}
int main(int argc, char* argv[]){ ECAT_HANDLE hHandle; char buff[256]; uint32_t channel = 0, alias = 0; std::string eniFile; if (argc != 4){ std::cout << "usage: " << argv[0] << " encoder_id channel eni.xml" << std::endl; ? ? ? ?return 1; ? ?} ? ?alias = atoi(argv[1]); ? ?channel = atoi(argv[2]); ? ?eniFile = argv[3]; ? ?if (channel > 1){ channel = 1; } testDemo(alias, channel, eniFile.c_str()); return 0;}
上面的示例代碼實(shí)現(xiàn)了主站的啟動(dòng)以及關(guān)閉,具體的過(guò)程數(shù)據(jù)修改將在下一章節(jié)做介紹。2.4 測(cè)試編譯環(huán)境
構(gòu)建項(xiàng)目,先去到項(xiàng)目的根目錄。
創(chuàng)建構(gòu)建的文件夾build。進(jìn)入到文件夾build。執(zhí)行cmake構(gòu)建項(xiàng)目。編譯(編譯完成后,生成的執(zhí)行程序?qū)?huì)在build目錄下,可執(zhí)行程序的名字為CMakeLists.txt中TARGET_NAME變量指定的名字)。
-
通訊卡
+關(guān)注
關(guān)注
0文章
6瀏覽量
5857 -
工業(yè)通訊
+關(guān)注
關(guān)注
0文章
61瀏覽量
11540 -
ZLG致遠(yuǎn)電子
+關(guān)注
關(guān)注
6文章
33瀏覽量
22144
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論