版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
本文格式為Word版,下載可任意編輯——基于Windows的Powerlink主從站通信基于Windows的Powerlink主從站通信
一、設(shè)計(jì)任務(wù)(要求)
二、總體方案
三、硬件原理圖
四、軟件框圖
五、設(shè)計(jì)總結(jié)
六、語言實(shí)現(xiàn)的基于FPGA的MAC,同時(shí)POWERLINK又提供了一個(gè)用VHDL語言實(shí)現(xiàn)的
openHUB,支持16個(gè)端口。假使用戶的網(wǎng)絡(luò)需要做冗余,如雙網(wǎng)、環(huán)網(wǎng)等,就可以直接在FPGA中實(shí)現(xiàn),易于實(shí)現(xiàn)且成本很低。此外由于基于FPGA的方案,從MAC到數(shù)據(jù)鏈路層(DLL)的通信,POWERLINK采用了DMA,因此速度更快。
2.4POWERLINK的數(shù)據(jù)鏈路層
POWERLINK的數(shù)據(jù)鏈路層:也就是POWERLINK的核心,主要包括如下功能:
1.2.3.4.
構(gòu)建/解析數(shù)據(jù)楨、對(duì)數(shù)據(jù)楨定界、網(wǎng)絡(luò)同步、數(shù)據(jù)楨收發(fā)順序的控制。傳輸過程中的流量控制、過錯(cuò)檢測(cè)、對(duì)物理層的原始數(shù)據(jù)進(jìn)行數(shù)據(jù)封裝等。實(shí)時(shí)通信的傳輸控制。網(wǎng)絡(luò)狀態(tài)機(jī)。
在POWERLINK網(wǎng)絡(luò)中,至少有一個(gè)設(shè)備做為主站(MN),其他的設(shè)備做為從站(CN)。每個(gè)從站設(shè)備都有唯一的節(jié)點(diǎn)號(hào)(NodeId),該節(jié)點(diǎn)號(hào)是用來區(qū)分網(wǎng)絡(luò)中的設(shè)備,取值范圍為1-239。主站設(shè)備(MN)的節(jié)點(diǎn)號(hào)為240,主站的作用是為了為協(xié)調(diào)各個(gè)從站,合理分派總線使用權(quán),避免沖突,實(shí)現(xiàn)實(shí)時(shí)通信。
POWERLINK的實(shí)時(shí)通信機(jī)制:POWERLINK有兩種通信機(jī)制,基于請(qǐng)求/應(yīng)答模式和
基于定時(shí)主動(dòng)上報(bào)模式(PRC模式)。
2.4.1基于請(qǐng)求/應(yīng)答模式
該種模式主站(MN)輪詢所有從站(CN)。首先主站發(fā)送Preq數(shù)據(jù)幀(PReqCN1)給1號(hào)從站,該數(shù)據(jù)幀是單播的,只有1號(hào)節(jié)點(diǎn)接收,其他節(jié)點(diǎn)不接收。在該數(shù)據(jù)幀中包含了
主站(MN)要發(fā)送給1號(hào)從站的數(shù)據(jù)。當(dāng)1號(hào)節(jié)點(diǎn)收到來自主站的Preq數(shù)據(jù)幀,就會(huì)上報(bào)一個(gè)Pres數(shù)據(jù)幀(PresCN1),該數(shù)據(jù)幀是廣播的,除了主站可以接收到以外,網(wǎng)絡(luò)中其他任何一個(gè)從節(jié)點(diǎn)都能收到。主站(MN)與1號(hào)從節(jié)點(diǎn)(CN1)一來(Preq)、一往(Pres),就完成了一次信息交互;接下來主站(MN)與2號(hào)從節(jié)點(diǎn)(CN2)的信息交互,以此類推,將網(wǎng)絡(luò)中所有的節(jié)點(diǎn)掃描一次,稱為一個(gè)循環(huán)周期。假定循環(huán)周期為200us,那么網(wǎng)絡(luò)中的每個(gè)設(shè)備每200us就有一次收取/發(fā)送數(shù)據(jù)的機(jī)遇,而且不會(huì)與其他設(shè)備造成沖突。
該種模式下的性能:完成一個(gè)站的通信所需要的時(shí)間,取決于物理層的傳輸速度和需要
傳送的數(shù)據(jù)包大小。
假定物理層為100M以太網(wǎng),該種網(wǎng)絡(luò)的傳輸速度為12.5bytes/us,假定數(shù)據(jù)包大小為
64bytes(每個(gè)Preq和Pres數(shù)據(jù)幀最大可傳輸1490bytes的數(shù)據(jù)),那么完成一個(gè)站的通信所
需要的時(shí)間:T=Tpreq+Tgap+Tpres
Tpreq:主站發(fā)送Preq數(shù)據(jù)幀給從站,時(shí)間長(zhǎng)度為64/12.5=5.12usTpres:從站發(fā)送Pres數(shù)據(jù)幀給主站,時(shí)間長(zhǎng)度為64/12.5=5.12us
Tgap:Preq數(shù)據(jù)幀與Pres數(shù)據(jù)幀之間的時(shí)間間隙,約為2us因此完成一個(gè)站的通信,總時(shí)間長(zhǎng)度為12.24=5.12+2+5.12
2.4.2PRC模式
在基于請(qǐng)求-應(yīng)答模式(PREQ-PRES)通信時(shí),從節(jié)點(diǎn)什么時(shí)候上報(bào)自己的數(shù)據(jù),取決于主站什么時(shí)候發(fā)生請(qǐng)求(PREQ)給它。該種模式省掉了主站的Preq數(shù)據(jù)幀,取而代之
的是一個(gè)挨一個(gè)的Pres。有人會(huì)問各個(gè)從站如何知道自己應(yīng)當(dāng)在什么時(shí)候上報(bào)數(shù)據(jù)?是否會(huì)出現(xiàn)兩個(gè)或多個(gè)從站同時(shí)上報(bào)數(shù)據(jù)?這樣豈不是發(fā)生了沖突?
該種模式下,POWERLINK主站在開始通信之前,會(huì)去配置從站的參數(shù),告訴每個(gè)從
站應(yīng)當(dāng)在循環(huán)周期的哪一時(shí)刻上報(bào)。舉個(gè)例子:假定我們有3個(gè)從站,主站可以通過配置,
讓1號(hào)從站在收到PresMN后的第5us上傳PresCN1數(shù)據(jù)幀,而2號(hào)從站在收到PresMN后
的第15us上傳PresCN2數(shù)據(jù)幀,而3號(hào)從站在收到PresMN后的第22us上傳PresCN3數(shù)據(jù)
幀。這樣就避免了沖突。由于POWERLINK是基于時(shí)間槽的通信,而且POWERLINK支持1588分布式時(shí)鐘協(xié)議,每個(gè)POWERLINK節(jié)點(diǎn)都有一個(gè)時(shí)鐘,因此POWERLINK很便利實(shí)現(xiàn)這種通信模式。
在該種模式下的性能:完成一個(gè)站的通信所需要的時(shí)間,取決于物理層的傳輸速度和需
要傳送的數(shù)據(jù)包大小。
假定物理層為100M以太網(wǎng),該種網(wǎng)絡(luò)的傳輸速度為12.5bytes/us。假定數(shù)據(jù)包大小為
64bytes(每個(gè)Preq和Pres數(shù)據(jù)幀最大可傳輸1490bytes的數(shù)據(jù))。那么完成一個(gè)站的通信所
需要的時(shí)間T=Tgap+Tpres
Tpres:從站發(fā)送Pres數(shù)據(jù)幀給主站,時(shí)間長(zhǎng)度為64/12.5=5.12us
Tgap:Preq數(shù)據(jù)幀與Pres數(shù)據(jù)幀之間的時(shí)間間隙,約為2us因此完成一個(gè)站的通信,總時(shí)間長(zhǎng)度為7.12=5.12+2這種通信比基于請(qǐng)求/應(yīng)答模式至少能提高30%的效率。PRC模式的通信過程:1.
主站發(fā)生廣播數(shù)據(jù)幀PresMN,主站把多個(gè)從站需要的數(shù)據(jù)在該數(shù)據(jù)幀里打包,然后以廣播的方式發(fā)送出去,各個(gè)從站根據(jù)配置信息,從該數(shù)據(jù)幀中取走相應(yīng)的數(shù)據(jù)。
2.
該數(shù)據(jù)幀為標(biāo)準(zhǔn)的以太網(wǎng)數(shù)據(jù)幀,最大有效數(shù)據(jù)容量為1490Bytes。
從站接受到PresMN以后,根據(jù)主站配置的上報(bào)時(shí)間,來決定什么時(shí)候該上報(bào)PresCN,當(dāng)定時(shí)器到了上報(bào)時(shí)間,從站就以廣播的方式上報(bào)PresCN。該數(shù)據(jù)幀包
3.
含了主站以及其他從站需要的數(shù)據(jù)信息。
主站和從站是支持PRC模式,還是支持請(qǐng)求/應(yīng)答模式,是由它自身的參數(shù)決定的??梢酝ㄟ^參數(shù)設(shè)置,在一個(gè)周期內(nèi),讓某些從節(jié)點(diǎn)采用PRC模式,而另外一些從
節(jié)點(diǎn)采用請(qǐng)求/應(yīng)答模式。這種搭配使得網(wǎng)絡(luò)容量可以靈活搭配。
2.4.3多路復(fù)用
在一個(gè)系統(tǒng)中,尋常有多種不同類型的設(shè)備,如有伺服驅(qū)動(dòng)器、I/O、傳感器、儀表等。不同種類的設(shè)備對(duì)通信周期和控制周期的要求往往不同。假設(shè)現(xiàn)在有3種設(shè)備:伺服驅(qū)動(dòng)器、
I/O、傳感器。伺服的控制周期為200us,而I/O的控制周期為1ms,傳感器卻不定時(shí)的上傳數(shù)據(jù)。面對(duì)如此應(yīng)用,POWERLINK如何來解決?
首先解決伺服的200us和I/O的1ms的配置。由于兩種設(shè)備需要的循環(huán)周期不同,假使
將循環(huán)周期設(shè)為200us,伺服沒有問題,可是I/O卻會(huì)由于通信過于頻繁而反應(yīng)不過來;如
果將循環(huán)周期設(shè)為1ms,那么伺服會(huì)由于控制周期太長(zhǎng),而達(dá)不到精度的要求。
POWERLINK采用多路復(fù)用來解決這個(gè)問題。在這里,可以將循環(huán)周期設(shè)置為200us,將伺服配置成每個(gè)循環(huán)周期都參與通信,將I/O配置成每N個(gè)循環(huán)周期參與一次通信,N是
一個(gè)參數(shù),可以設(shè)置為任意整數(shù)(在這里N的值為5)。這樣就可以達(dá)到伺服的通信周期為200us,I/O的通信周期為200x5=1ms。
如下圖所示,有11個(gè)節(jié)點(diǎn)要通信,其中1、2、3這三個(gè)節(jié)點(diǎn)每個(gè)循環(huán)周期都通信;而
4、5、6、7、8、9、10、11這8個(gè)節(jié)點(diǎn)為復(fù)用節(jié)點(diǎn),這些節(jié)點(diǎn)每3個(gè)循環(huán)周期才通信一次。
這樣就可以把快速設(shè)備和慢速設(shè)備經(jīng)過合理配置達(dá)到系統(tǒng)最優(yōu)。
2.4.4異步階段
以上提到了三種不同設(shè)備,伺服的控制周期為200us,而I/O的控制周期為1ms,傳感器卻不定時(shí)的上傳數(shù)據(jù)。上一節(jié)陳述了快速設(shè)備(伺服)和慢速設(shè)備(I/O)的合理配置。
接下來講如何配置不定時(shí)上傳數(shù)據(jù)的設(shè)備(傳感器),這種類型的設(shè)備稱為異步設(shè)備。
一個(gè)完整的POWERLINK周期分為兩個(gè)階段:同步階段和異步階段。
同步階段用來傳輸周期性通信的數(shù)據(jù);異步階段用來傳輸那些非周期性的通信數(shù)據(jù)。非周期通信數(shù)據(jù)包括:1.異步設(shè)備的通信數(shù)據(jù),如這里所說的傳感器;2.一些設(shè)備偶爾需要傳
送的參數(shù),例如在某些應(yīng)用場(chǎng)合伺服周期性傳輸位置數(shù)據(jù),但可能偶爾傳輸一下扭矩或者溫度數(shù)據(jù),這些非周期性傳輸?shù)臄?shù)據(jù),就叫異步數(shù)據(jù)。這些異步數(shù)據(jù)會(huì)在通信周期的異步階段來傳送。
從SoC數(shù)據(jù)幀開始到SoA數(shù)據(jù)幀的時(shí)間段為同步階段,SoA和AsyncData為異步階段。
SoA數(shù)據(jù)幀包含了請(qǐng)求哪個(gè)從站上報(bào)數(shù)據(jù),而AsyncData數(shù)據(jù)幀為該從站上報(bào)的數(shù)據(jù)。在每
個(gè)循環(huán)周期,只能有一個(gè)從節(jié)點(diǎn)上報(bào)異步數(shù)據(jù),假使有多個(gè)從節(jié)點(diǎn)需要異步通信,那么需要在多個(gè)周期內(nèi)完。
2.5POWERLINK的同步機(jī)制
POWERLINK支持1588分布式時(shí)鐘協(xié)議,每個(gè)循環(huán)周期的開始,主站都會(huì)廣播一個(gè)SoC數(shù)據(jù)幀到網(wǎng)絡(luò)上,該數(shù)據(jù)幀包含了兩個(gè)重要信息:網(wǎng)絡(luò)的絕對(duì)時(shí)間和相對(duì)時(shí)間。
絕對(duì)時(shí)間信息:年、月、日、時(shí)、分、秒、毫秒、微秒、納秒。如下所示:
相對(duì)時(shí)間信息:從網(wǎng)絡(luò)開始工作,到現(xiàn)在一共運(yùn)行了多少us。
SoC數(shù)據(jù)幀有兩個(gè)功能:時(shí)鐘同步和動(dòng)作同步。時(shí)鐘同步:網(wǎng)絡(luò)中的節(jié)點(diǎn)需要有一個(gè)統(tǒng)一的網(wǎng)絡(luò)時(shí)間
利用網(wǎng)絡(luò)時(shí)間來同步網(wǎng)絡(luò)中所有設(shè)備的分布式時(shí)鐘,讓網(wǎng)絡(luò)中所有節(jié)點(diǎn)的時(shí)鐘有一個(gè)共同的基準(zhǔn)。POWERLINK主站(MN)在每個(gè)循環(huán)周期的開始將SoC數(shù)據(jù)幀廣播到
網(wǎng)絡(luò)上,該數(shù)據(jù)幀包含了網(wǎng)絡(luò)時(shí)間信息,網(wǎng)上的各個(gè)從節(jié)點(diǎn)可以將這個(gè)時(shí)間作為統(tǒng)一的網(wǎng)絡(luò)時(shí)間。
動(dòng)作同步:網(wǎng)絡(luò)中的節(jié)點(diǎn)需要同時(shí)去做一件事情
在POWERLINK協(xié)議中有兩種方法去觸發(fā)一個(gè)同步的事件:1.通過從節(jié)點(diǎn)自己的時(shí)鐘觸發(fā);2.通過SoC數(shù)據(jù)幀觸發(fā)。這里主要講通過SoC數(shù)據(jù)幀觸發(fā)同步事件的原理。
在POWERLINK數(shù)據(jù)鏈路層里,每當(dāng)收到了SoC數(shù)據(jù)幀,會(huì)觸發(fā)一個(gè)同步的回調(diào)
函數(shù),用戶可以將同步執(zhí)行的程序?qū)懺谠摵瘮?shù)里,這樣就可以執(zhí)行同步動(dòng)作。舉例來說,
假設(shè)有一個(gè)運(yùn)動(dòng)控制器,要控制10臺(tái)伺服做同步運(yùn)動(dòng),例如需要10臺(tái)伺服同時(shí)啟動(dòng)。每個(gè)循環(huán)周期,運(yùn)動(dòng)控制器(作為POWERLINK的主站)將10臺(tái)伺服所需要的新的位置信息依次傳給各個(gè)伺服。每個(gè)伺服收到新數(shù)據(jù)的時(shí)間是不同的,第一個(gè)和最終一個(gè)得到位置數(shù)據(jù)的時(shí)間可能會(huì)差100多us。假使收到新數(shù)據(jù),伺服就開始啟動(dòng),那么就會(huì)出現(xiàn)這種狀況:第一個(gè)伺服已經(jīng)開始運(yùn)轉(zhuǎn),而最終一個(gè)伺服還沒有收到數(shù)據(jù),這顯然不是我們想要的結(jié)果。因此我們需要一個(gè)同步信號(hào),使所有的伺服都得到新數(shù)據(jù)以后,同時(shí)啟動(dòng)。這個(gè)同步信號(hào)就是SoC。
主站在上一個(gè)循環(huán)周期終止(即下一個(gè)循環(huán)周期開始)時(shí)廣播一個(gè)SoC數(shù)據(jù)幀,基本上所有的從站會(huì)同時(shí)收到這個(gè)數(shù)據(jù)幀。該信號(hào)觸發(fā)一個(gè)同步回調(diào)函數(shù)或者硬件中斷,來處理
同步事件。由于在SoC數(shù)據(jù)幀之前,每個(gè)從站都已經(jīng)從主站(控制器)那里得到了新的位
置信息,因此SoC信號(hào)觸發(fā)的同步事件中可以同時(shí)啟動(dòng),運(yùn)行到設(shè)定位置。
假使是星形拓?fù)?,各個(gè)從站收到該信號(hào)的時(shí)間差取決于線纜的長(zhǎng)度,電信號(hào)可以認(rèn)為是
以光速在導(dǎo)線中傳播,因此用戶可以計(jì)算出該時(shí)間差??山茷?米為3.3ns。這個(gè)級(jí)別的
時(shí)間差基本上可以忽略。
假使你采用的是菊花鏈連接,那么沒經(jīng)過一級(jí)hub會(huì)有40ns的延遲,再加上線纜的延
遲,第一個(gè)從站和最終一個(gè)從站在接受到SoC信號(hào)的時(shí)間差可能會(huì)達(dá)到幾百納秒甚至微秒,
用戶需要根據(jù)應(yīng)用場(chǎng)合的需要來決定該延遲是否可以忽略,假使不可以忽略,POWERLINK
提供了測(cè)量機(jī)制,可以測(cè)出來相鄰兩個(gè)節(jié)點(diǎn)的傳輸延遲。用戶根據(jù)這些延遲時(shí)間給各個(gè)節(jié)點(diǎn)做一個(gè)補(bǔ)償,從而達(dá)到各個(gè)節(jié)點(diǎn)在同一時(shí)刻做同步事件。綜上,介紹完了POWERLINK數(shù)據(jù)鏈路層的整個(gè)工作原理和過程。
三、總體實(shí)現(xiàn)方案流程
1.所需軟件和硬件:需要準(zhǔn)備兩臺(tái)電腦,一臺(tái)作為主站,一臺(tái)作為從站;操作系統(tǒng)為
WindowsXP;需要安裝VS2023開發(fā)環(huán)境;需要安裝WinPcap或者Wireshark。2.將POWERLINK的源碼分拷貝到要作為主站和從站的電腦上,隨便選哪臺(tái)電腦做主站都可以,主站和從站上的程序有所不同。
3.開啟主站\\Examples\\X86\\Windows\\VC9\\demo_pcap下的工程,使用VS2023開啟,
此外為了能在Windows上運(yùn)行openPOWERLINK,你需要安裝winpcap或wireshark軟件,由于openPOWERLINK將pcaplib作為網(wǎng)卡驅(qū)動(dòng)程序。
4.修改主站上的網(wǎng)絡(luò)參數(shù)和映射參數(shù),假定我們要通信2個(gè)參數(shù),一個(gè)參數(shù)是主站發(fā)
送給從站,另一個(gè)是主站接收來自從站的數(shù)據(jù)。開啟objdict.h文件。首先確定要把哪個(gè)object作為主站發(fā)送給從站的參數(shù),我們注意到源碼里有一個(gè)
Object0X2000/01,可以將該object作為主站發(fā)送給從站的參數(shù)。因此我們配置發(fā)送的網(wǎng)絡(luò)參數(shù)和映射參數(shù):
將0x1801/0x01的值設(shè)為1,即發(fā)送數(shù)據(jù)給1號(hào)節(jié)點(diǎn):將0x1A01的參數(shù)設(shè)置為如下的值:
5.修改主站上的源程序。開啟demo_main.c文件,將NODEID改為:
#defineNODEID0xF0//=>MN,主站的nodeid為240即16進(jìn)制的FO6.定義一個(gè)變量(BYTEoutput8),與0X2000/01link起來。
POWERLINK實(shí)時(shí)以太網(wǎng)教程59
在main.c中,將與0x2000/0x01連接的代碼修改如下:
至此,我們就映射了一個(gè)object,并把他和我們自己定義的一個(gè)變量link起來。接下來我們?cè)儆成湟粋€(gè)object,用來接收數(shù)據(jù)。
7.接收的網(wǎng)絡(luò)參數(shù)和映射參數(shù):
我們注意到源碼中有索引為0x2200的對(duì)象字典,可以將0x2200/02作為接收的objcet。
將0x1402作為接收1號(hào)節(jié)點(diǎn)的網(wǎng)絡(luò)參數(shù)。將0x1402/0x01的值設(shè)為1,即接收來自1
號(hào)節(jié)點(diǎn)的數(shù)據(jù)。
相應(yīng)的映射參數(shù)為0x1602,將0x1602的參數(shù)設(shè)置為如下的值:8.定義一個(gè)變量(BYTEinput8),與0X2200/02link起來。
POWERLINK實(shí)時(shí)以太網(wǎng)教程60
在main.c中,在main.c中,將與0x2200/0x02連接的代碼修改如下:
至此,我們映射了一個(gè)object,并把他和我們自己定義的一個(gè)變量link起來。接下來
我們將AppCbSync修改如下,這段代碼的意思是我們把主站要發(fā)給從站的數(shù)據(jù)不斷的累加,
同時(shí)打印出來自從站的數(shù)據(jù)。
6.1.2設(shè)置從站的參數(shù)設(shè)設(shè)置置從從站站的的參參數(shù)數(shù)設(shè)置從站的參數(shù)1.從站需要2個(gè)參數(shù),一個(gè)參數(shù)用來接收來自主站的數(shù)據(jù),另一個(gè)參數(shù)發(fā)送給主站。開啟objdict.h文件。首先確定我們要把哪個(gè)object作為發(fā)送給主站的參數(shù),我們注
意到源碼里有一個(gè)Object0X6000/01,可以將該object作為從站發(fā)送給主站的參數(shù)。
因此我們配置發(fā)送的網(wǎng)絡(luò)參數(shù)和映射參數(shù):將0x1800/0x01的值設(shè)為0。
POWERLINK實(shí)時(shí)以太網(wǎng)教程61
將0x1A00的參數(shù)設(shè)置為如下的值:
2.修改從站上的源程序。開啟demo_main.c文件,將NODEID改為:#defineNODEID0x01//=>從站的nodeid取值范圍1-2393.定義一個(gè)變量(BYTEoutput8),與0X6000/01link起來。在main.c中,將與0x6000/0x01連接的代碼修改如下:ObdSize=sizeof(output8);uiVarEntries=1;
EplRet=EplApiLinkObject(0x6000,if(EplRet!=kEplSuccessful){
GotoExitShutdown;}
至此,我們就映射了一個(gè)object,并把他和我們自己定義的一個(gè)變量link起來。接下來
我們?cè)儆成湟粋€(gè)object,用來接收數(shù)據(jù)。4.接收的網(wǎng)絡(luò)參數(shù)和映射參數(shù)。
我們注意到源碼中有索引為0x6200的對(duì)象字典,可以將006200/01作為接收的objcet。
POWERLINK實(shí)時(shí)以太網(wǎng)教程62
將0x1400作為接收來自主站的網(wǎng)絡(luò)參數(shù)。將0x1400/0x01的值設(shè)為0。相應(yīng)的映射參數(shù)為0x1600,將0x1600/01的參數(shù)設(shè)置為如下的值:5.定義一個(gè)變量(BYTEinput8),與0X6200/01link起來。在main.c中,將與0x6200/0x01連接的代碼修改如下:ObdSize=sizeof(input8);uiVarEntries=1;
EplRet=EplApiLinkObject(0x6200,if(EplRet!=kEplSuccessful)
{
gotoExitShutdown;}
接下來我們將AppCbSync修改如下,這段代碼的意思是我們把從站要發(fā)給主站的數(shù)據(jù)
不斷的累加10,同時(shí)打印出來自主站的數(shù)據(jù)。
完成上述步驟,我們就完成了主站和從站的配置。先將兩臺(tái)電腦用網(wǎng)線連接起來,接下
POWERLINK實(shí)時(shí)以太網(wǎng)教程63
來將從站先運(yùn)行起來,最終再把主站運(yùn)行起來。
當(dāng)把主站或從站運(yùn)行起來時(shí),出現(xiàn)如下界面來選擇使用哪個(gè)網(wǎng)口作為POWERLINK口。
在這里我使用第三個(gè)網(wǎng)口(MarvellYukonEthernetController),因此我輸入3,然后回車。
1.
所需軟件和硬件:需要準(zhǔn)備兩臺(tái)電腦,一臺(tái)作為主站,一臺(tái)作為從站;操作系統(tǒng)為WindowsXP;需要安裝VS2023開發(fā)環(huán)境;需要安裝WinPcap或者Wireshark。將POWERLINK的源碼分別拷貝到要作為主站和從站的電腦上,隨便選哪臺(tái)電腦做主站都可以,主站和從站上的程序有所不同。
開啟主站\\Examples\\X86\\Windows\\VC9\\demo_pcap下的工程,使用VS2023開啟,此外為了能在Windows上運(yùn)行openPOWERLINK,你需要安裝winpcap或wireshark
2.
3.
軟件,由于openPOWERLINK將pcaplib作為網(wǎng)卡驅(qū)動(dòng)程序。
用openCONFIGURATOR配置Windows主站和從站
1.
使用這種方法配置網(wǎng)絡(luò),從站需要一個(gè)XDD文件,該文件與從站的對(duì)象字典相匹配(即與從站的objdict.h定義的對(duì)象字典匹配),例子中從站使用的objdict.h文件
2.
在目錄\\ObjDicts\\Api_CN下,而相應(yīng)的XDD文件在\\ObjDicts目錄下,名稱為0000003F_openPOWERLINK_demo_CN.xdd。
使用openCONFIGURATOR配置網(wǎng)絡(luò),比較簡(jiǎn)單,參考第五章第七節(jié)5-7使用openCONFIGURATOR組建POWERLINK網(wǎng)絡(luò)。將生成的monbd.cdc和xap.h這兩
3.
個(gè)文件拷貝到主站源代碼的Examples\\X86\\Windows\\VC8\\demo_cfm_pcap目錄下。
用VS開啟主站Examples\\X86\\Windows\\VC8\\demo_cfm_pcap的工程,然后開啟demo_main.c,在AppCbSync(void)函數(shù)中,AppProcessImageIn_g變量的類型是xap.h
4.
中定義的數(shù)據(jù)結(jié)構(gòu)PI_IN的類型,AppProcessImageOut_g變量的類型是xap.h中定義的數(shù)據(jù)結(jié)構(gòu)PI_OUT的類型.這兩個(gè)變量自動(dòng)被映射到主站相應(yīng)的Object上,使用者可以直接使用,而無需link操作。注意,這里AppProcessImageIn_g是指主站輸出給從站的數(shù)據(jù),而AppProcessImageOut_g是指主站接收的來自從站的數(shù)據(jù)。
從站程序的修改:將從站objdict.h文件中的所有映射參數(shù)的值都設(shè)為0,由于主站
會(huì)來配置這些參數(shù)的值。只是從站的object與用戶自己定義的變量的link,還需要
使用者自己來調(diào)用EplApiLinkObject()來連接。
4.1獲得POWERLINK源碼
從/projects/openpowerlink/下載POWERLINK源碼。目前的最新版本為V1.7.1,下載解壓后你會(huì)看到如下目錄。
圖4-1
Documentation:文檔的目錄,其中包含了源代碼中一些重要函數(shù)、數(shù)據(jù)結(jié)構(gòu)的說
明,還有關(guān)于POWERLINK在Linux下如何編譯的說明。
EplStack:POWERLINK協(xié)議棧的.C文件,這里包含了數(shù)據(jù)鏈路層和CANopen的源碼。
Include:包含了POWERLINK協(xié)議棧的.h文件,這個(gè)文件夾和EplStack文件夾匹配。
ObjDicts:CANopen對(duì)象字典的源程序,用戶需要根據(jù)自己要實(shí)現(xiàn)的設(shè)備修改對(duì)象字典。
Edrv:由于POWERLINK可運(yùn)行于多種不同的軟件平臺(tái)和硬件平臺(tái),和不同的平臺(tái)打交道,就需要有不同的驅(qū)動(dòng)程序,這個(gè)文件夾包含了一些常用平臺(tái)的驅(qū)動(dòng),如ARM,8139,82573,F(xiàn)PGA等平臺(tái)的驅(qū)動(dòng)程序,假使你想要將POWERLINK移植到一個(gè)新的平臺(tái),可以參考這里的例子,修改驅(qū)動(dòng)程序即可。
Examples:這里是重點(diǎn),包含了一些常用平臺(tái)的例子,你可以直接運(yùn)行,評(píng)估POWERLINK。如基于Windows的、Linux的、FPGA的、ARM的。
32
4.2POWERLINK源碼概覽
圖4-2軟件架構(gòu)
從下至上,軟件分別分為以太網(wǎng)驅(qū)動(dòng)模塊、數(shù)據(jù)鏈路層模塊、對(duì)象字典、SDO模塊、網(wǎng)絡(luò)管理
NMT模塊已經(jīng)API模塊。
4.3
POWERLINKAPI接口
這個(gè)是用戶的應(yīng)用程序與POWERLINK協(xié)議棧的接口。用戶實(shí)現(xiàn)POWERLINK時(shí),不需要修改協(xié)議棧里面的內(nèi)容。由于這部分內(nèi)容是標(biāo)準(zhǔn)的,假使用戶修改了,可能會(huì)導(dǎo)致最終
的協(xié)議不遵守POWERLINK標(biāo)準(zhǔn)。用戶根據(jù)自己需要調(diào)用API的一些函數(shù)。其中比較重要的函數(shù)有如下幾個(gè):
4.3.1
AppCbEvent這個(gè)函數(shù)是協(xié)議棧的回調(diào)函數(shù)。當(dāng)協(xié)議棧內(nèi)部發(fā)生狀態(tài)變化、特定事件、以及一些錯(cuò)誤
等,協(xié)議棧自動(dòng)調(diào)用此函數(shù)。假使用戶需要根據(jù)協(xié)議棧的狀態(tài)或者事件做特別處理,就可以
把處理程序?qū)懺谶@里。例如當(dāng)檢查到該節(jié)點(diǎn)從網(wǎng)絡(luò)上脫離開,需要將該設(shè)備安全停機(jī)。對(duì)于
33
這種應(yīng)用,用戶可以在該回調(diào)函數(shù)中,檢查網(wǎng)絡(luò)事件,當(dāng)發(fā)現(xiàn)有鏈接丟失的event時(shí),就執(zhí)
行一段安全停機(jī)的程序。
4.3.2AppCbSync(void)
同步回調(diào)函數(shù)。該函數(shù)是協(xié)議棧的回調(diào)函數(shù),當(dāng)協(xié)議棧收到SoC數(shù)據(jù)幀,就會(huì)觸發(fā)執(zhí)
行該函數(shù)。由于SoC數(shù)據(jù)幀是廣播的,網(wǎng)絡(luò)中的所有節(jié)點(diǎn)基本上同時(shí)收到該數(shù)據(jù)幀,因此
網(wǎng)絡(luò)中的所有節(jié)點(diǎn)會(huì)同時(shí)觸發(fā)執(zhí)行各自的同步回調(diào)函數(shù)。由于SoC是每個(gè)循環(huán)周期開始時(shí)都會(huì)發(fā)送,因此該函數(shù)每個(gè)循環(huán)周期都會(huì)被調(diào)用。用戶可以將需要周期性處理的程序?qū)懺谠摶卣{(diào)函數(shù)中,例如周期性的把接收的新數(shù)據(jù)取走,把要發(fā)送的數(shù)據(jù)賦予新的值,或者周期性的控制等。
4.3.3EplApiExecNmtCommand()
用戶可以使用該函數(shù)發(fā)送一些網(wǎng)絡(luò)命令,來控制協(xié)議棧的一些狀態(tài)變化,或者觸發(fā)一
些事件,目前支持如下命令參數(shù):
例如執(zhí)行EplApiExecNmtCommand(kEplNmtEventSwReset);會(huì)使協(xié)議棧進(jìn)入軟件Reset
狀態(tài),使整個(gè)協(xié)議棧重新啟動(dòng)。具體的每一條命令的使用方法和作用請(qǐng)參見源代碼的說明。
34
4.3.4對(duì)象字典的訪問
EplApiReadLocalObject()
該函數(shù)可以讀取本地對(duì)象字典中對(duì)象的值,POWERLINK實(shí)現(xiàn)了CANopen,里面
集成了對(duì)象字典,那么用戶如何得到對(duì)象字典中的對(duì)象的值呢?可以調(diào)用函數(shù)
EplApiReadLocalObject,將對(duì)象字典中的值讀出并存入指定的緩沖區(qū)。
EplApiWriteLocalObject()
該函數(shù)可以向本地對(duì)象字典中的對(duì)象寫入值。
EplApiLinkObject()
該函數(shù)可以將用戶自己定義的變量與本地對(duì)象字典中的對(duì)象鏈接起來。對(duì)于周期
性要訪問的對(duì)象,假使每次都調(diào)用EplApiReadLocalObject()和EplApiWriteLocalObject()會(huì)導(dǎo)
致調(diào)用的效率降低,此時(shí)可以調(diào)用該函數(shù),將用戶自己定義的變量和對(duì)象字典中的對(duì)象link起來,這樣,當(dāng)對(duì)象的值改變時(shí),用戶的變量的值也會(huì)改變,同樣當(dāng)用戶的變量的值改變時(shí),對(duì)象的值也會(huì)改變。該函數(shù)只在初始化時(shí)執(zhí)行一次即可。
4.3.5源碼中的OD
對(duì)象字典是POWERLINK協(xié)議中很重要的部分,而且是和應(yīng)用緊湊相關(guān)的。可以這么說,當(dāng)用戶在其產(chǎn)品中實(shí)現(xiàn)POWERLINK時(shí),只需要修改源碼中的對(duì)象字典,不需也不必
修改其他地方。對(duì)象字典OD可以理解為設(shè)備的參數(shù),對(duì)于不同的設(shè)備,參數(shù)就不同,對(duì)于不同廠家的設(shè)備,參數(shù)也不同,這就決定了對(duì)象字典OD的不同。用戶需要根據(jù)自己設(shè)備,來決定需要哪些參數(shù),這些參數(shù)的類型是什么(8bits還是16bits,有符號(hào)還是無符號(hào)等),可訪問的類型是什么(可讀的還是可寫的,還是可讀寫的)等等。
此外,對(duì)象字典OD也是連接用戶程序與POWERLINK的協(xié)議的接口。POWERLINK
協(xié)議棧會(huì)根據(jù)配置信息,將對(duì)象字典中一些對(duì)象的值打成數(shù)據(jù)包發(fā)送出去,同時(shí)根據(jù)配置信
息,將收到的一些數(shù)據(jù)存入對(duì)象字典中相應(yīng)的對(duì)象。這部分工作POWERLINK協(xié)議棧會(huì)自動(dòng)完成。用戶的應(yīng)用程序從對(duì)象字典中讀取一些對(duì)象的值,或者向?qū)ο笞值渲械囊恍?duì)象寫入值。用戶的應(yīng)用程序如何訪問對(duì)象字典,可以調(diào)用EplApiLinkObject()(對(duì)于周期性要訪問的對(duì)象,可映射為EplApiWriteLocalObject()。
PDO的對(duì)象),或者EplApiReadLocalObject()和
35
POWERLINK實(shí)時(shí)以太網(wǎng)教程
OD用戶應(yīng)用程序變量1變量2
POWERLINK協(xié)議棧變量n圖4-3
對(duì)象字典的定義在源文件objdict.h中,該文件用宏定義,定義了一個(gè)數(shù)據(jù)結(jié)構(gòu)。例如:
//Readinput8-bit
EPL_OBD_BEGIN_INDEX_RAM(0x6000,0x05,NULL)
EPL_OBD_SUBINDEX_RAM_VAR(0x6000,0x00,kEplObdTypUInt8,kEplObdAccConst,tEplObdUnsigned8,number
_of_entries,0x4)
EPL_OBD_SUBINDEX_RAM_USERDEF(0x6000,0x01,kEplObdTypUInt8,kEplObdAccVPR,tEplObdUnsigned8,Send
b1,0x0)
EPL_OBD_SUBINDEX_RAM_USERDEF(0x6000,0x02,kEplObdTypUInt8,kEplObdAccVPR,tEplObdUnsigned8,Send
b1,0x0)
EPL_OBD_SUBINDEX_RAM_USERDEF(0x6000,0x03,kEplObdTypUInt8,kEplObdAccVPR,tEplObdUnsigned8,Send
b1,0x0)
EPL_OBD_SUBINDEX_RAM_USERDEF(0x6000,0x04,kEplObdTypUInt8,kEplObdAccVPR,tEplObdUnsigned8,Send
b1,0x0)
EPL_OBD_E
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026中仁正和工程設(shè)計(jì)集團(tuán)有限公司錫林郭勒盟分公司招聘4人備考題庫(內(nèi)蒙古)及一套完整答案詳解
- 2026廣東云浮市郁南縣糧食儲(chǔ)備庫招聘臨工1人備考題庫參考答案詳解
- 2026云南匯盈環(huán)保包裝科技有限公司招聘26人備考題庫有答案詳解
- 2026云南昭通市水富市文化館城鎮(zhèn)公益性崗位人員招聘1人備考題庫完整答案詳解
- 2026河南安陽新東投資集團(tuán)有限公司招聘11人備考題庫及一套答案詳解
- 2026中國(guó)鐵路南昌局集團(tuán)有限公司招聘本科及以上學(xué)歷畢業(yè)生494人備考題庫(一)及答案詳解(易錯(cuò)題)
- 2025年日照五蓮縣教體系統(tǒng)公開招聘博士研究生備考題庫及答案詳解1套
- 2025安徽馬鞍山市住房公積金管理中心編外聘用人員招聘3人備考題庫有答案詳解
- 2025廣東深圳大學(xué)管理學(xué)院張慶宇特聘教授團(tuán)隊(duì)招聘專職副研究員1人備考題庫及完整答案詳解1套
- 2026年福建省泉州市鯉城區(qū)第五實(shí)驗(yàn)幼兒園招聘?jìng)淇碱}庫(含答案詳解)
- 中班幼兒戶外游戲活動(dòng)實(shí)施現(xiàn)狀研究-以綿陽市Y幼兒園為例
- 特色休閑農(nóng)場(chǎng)設(shè)計(jì)規(guī)劃方案
- 采購部門月度匯報(bào)
- 新華書店管理辦法
- 檔案專業(yè)人員公司招聘筆試題庫及答案
- 工程竣工移交單(移交甲方、物業(yè))
- 2025年高考語文全國(guó)一卷試題真題及答案詳解(精校打?。?/a>
- 來料檢驗(yàn)控制程序(含表格)
- 2025年鈦合金閥項(xiàng)目可行性研究報(bào)告
- 耙地合同協(xié)議書
- 分布式基站光伏電站建設(shè)標(biāo)準(zhǔn)
評(píng)論
0/150
提交評(píng)論