基于Ethernet現(xiàn)場(chǎng)總線的多協(xié)議網(wǎng)絡(luò)通信系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)
DM9000A是一款完全集成的和符合成本效益單芯片快速以太網(wǎng)MAC控制器與一般處理接口,一個(gè)10/100M自適應(yīng)PHY和內(nèi)部集成的16 KB的SRAM(其中13KB用作接收緩沖區(qū),3 KB作為發(fā)送緩沖區(qū)),對(duì)內(nèi)部存儲(chǔ)器訪問(wèn)支持8位和16位數(shù)據(jù)接口以適用于不同的徽處理器;數(shù)據(jù)存取使用16bit模式時(shí),理論最高速度可達(dá)800Mbit/s(但DM9000A被設(shè)計(jì)為100M以太網(wǎng).因此最大速度被限定為100 Mbit/s)。DM9000A功耗非常低,單電源3.3 V工作,內(nèi)置3.3 V變2.5 V電源電路,I/O端口支持3.3 V~5 V的容差。
2 軟件設(shè)計(jì)
2.1軟件結(jié)構(gòu)設(shè)計(jì)
在單片機(jī)的方案中實(shí)現(xiàn)多種嵌人的協(xié)議棧,一個(gè)很大的問(wèn)題是單片機(jī)的資源有限。并且基于網(wǎng)絡(luò)的環(huán)境.一定是多用戶多任務(wù)的環(huán)境,因此,要達(dá)到實(shí)時(shí)性的要求,需要合理實(shí)現(xiàn)多種協(xié)議棧的流程,在單片機(jī)的實(shí)現(xiàn)方案下。必須進(jìn)行任務(wù)的優(yōu)化處理與調(diào)度。
本課題中以嵌入的SERCOSIII協(xié)議與TCP/IP協(xié)議棧實(shí)現(xiàn)為例,采用面向?qū)ο蟮木幊趟枷?,并重點(diǎn)介紹了SERCOS對(duì)象中SERCOSIII協(xié)議的實(shí)現(xiàn)與Main對(duì)象中以太同驅(qū)動(dòng)程序的設(shè)計(jì),如圖5為軟件模塊結(jié)構(gòu),而SERCOSIII協(xié)議與TCP/IP協(xié)議在系統(tǒng)中相應(yīng)架構(gòu)如圖6所示。圖5中設(shè)置的6種對(duì)象:
(1)kernel對(duì)象:是系統(tǒng)核心。封裝了程序任務(wù)區(qū)、任務(wù)調(diào)度塊,以及有關(guān)任務(wù)調(diào)度的相關(guān)過(guò)程,保證所有對(duì)象能夠快速有序地被執(zhí)行處理。
(2)Mac對(duì)象:是以太同數(shù)據(jù)幀處理核心。將接收到的數(shù)據(jù)及即將發(fā)送到的數(shù)據(jù)進(jìn)行以太網(wǎng)解封與封裝處理任務(wù)。
(3)DM9000對(duì)象:封裝了有關(guān)硬件設(shè)備的數(shù)據(jù)處理(發(fā)送和接收)功能。每個(gè)硬件芯片生成一個(gè)對(duì)象。如采用兩片DM9000,則有兩個(gè)DM9000對(duì)象。
(4)Sercos對(duì)象:是SERCOS協(xié)議處理的核心。封裝了有關(guān)SERcos協(xié)議的全部數(shù)據(jù)處理過(guò)程,實(shí)現(xiàn)了SERCOSIII協(xié)議的初始化及運(yùn)行。
(5)Tcpip對(duì)象:是TCP/IP協(xié)議處理的核心。封裝rARP、IP、ICMP、TCP、UDP和HTTP六種協(xié)議的數(shù)據(jù)處理過(guò)程,主要實(shí)現(xiàn)上層管理層PC機(jī)對(duì)底層現(xiàn)場(chǎng)設(shè)備的遠(yuǎn)程訪問(wèn)。
圖5軟件模塊結(jié)構(gòu)圖
圖6軟件協(xié)議架構(gòu)圖
2.2 Mac對(duì)象設(shè)計(jì)
系統(tǒng)軟件協(xié)議架構(gòu)如圖6所示,在物理層與數(shù)據(jù)鏈路層的數(shù)據(jù)即為圖5的MAC對(duì)象,DM9000A從網(wǎng)絡(luò)端口列45接收到數(shù)據(jù)包進(jìn)行數(shù)據(jù)的解封后數(shù)據(jù)再往上層傳輸時(shí),CPU對(duì)端口讀取的數(shù)據(jù)則需進(jìn)行判斷再分類處理。圖7所示為硬件上電后系統(tǒng)的初始化流程圖,首先清空串口接收緩沖區(qū),接下來(lái)進(jìn)行Globallnit()、Kemellint()、SERCOSIint()及本地MAc地址初始化,其中Globallmt()包括:串口UART0_Ini()、網(wǎng)卡芯片1DM90001_init()、網(wǎng)卡芯片2DM90002_init()、GPIO口GPIO_Init()及中斷的初始化;再加載任務(wù)驅(qū)動(dòng)設(shè)備列表和加載系統(tǒng)定時(shí)器,其中加載任務(wù)驅(qū)動(dòng)設(shè)備列表為:HTTP、IP、ICMP、ARP、SERCOS、Ethernet、Ping等協(xié)議的收發(fā)任務(wù)。最終系統(tǒng)進(jìn)入一個(gè)任務(wù)處理的無(wú)窮循環(huán),先查找TaskReadyFind(&TaskNo,ALL_TYPE。COMM_TYPE)是否有就緒任務(wù)等待執(zhí)行,該類任務(wù)是指(TCP/IP協(xié)議族),如有則先執(zhí)行一個(gè)就緒任務(wù),任務(wù)結(jié)束后進(jìn)行Netflgl判斷,沒(méi)有就緒任務(wù)則直接進(jìn)行Netflgl判斷,當(dāng)其Netflgl大于等于1時(shí),則證明網(wǎng)卡1接收到數(shù)據(jù)包,進(jìn)而對(duì)包判斷,如果該數(shù)據(jù)包的站類型為從站且數(shù)據(jù)包為SERCOS包,則接收數(shù)據(jù)。當(dāng)不能同時(shí)滿足數(shù)據(jù)包的站類型為從站且數(shù)據(jù)包為SERCOS數(shù)據(jù)這兩個(gè)條件時(shí)。再判斷站類型是否為最后從站,是則接收數(shù)據(jù),不是則轉(zhuǎn)發(fā)數(shù)據(jù)且表明該包為TCP/IP協(xié)議族包。當(dāng)Netflgl與Netfi92都為0時(shí),則初始化SERC0SIII協(xié)議。
2.3 SERCOSIII對(duì)象設(shè)計(jì)
SERCOS(serial real time communication specification)是一種用于數(shù)字伺服和傳動(dòng)系統(tǒng)的現(xiàn)場(chǎng)總線接口和數(shù)據(jù)交換協(xié)議,能夠?qū)崿F(xiàn)工業(yè)控制計(jì)算機(jī)與數(shù)字伺服系統(tǒng)、傳感器和可編程控制器I/O口之間的實(shí)時(shí)數(shù)據(jù)通訊。SERCOS-III是SER-COS接口的最新版本,使用了工業(yè)以太網(wǎng)作為傳輸機(jī)制。由圖6可知,SERCOS協(xié)議在層次上相當(dāng)于TCP/IP模型的3~5層。兩種協(xié)議的數(shù)據(jù)鏈路層和物理層是完全相同的,因此協(xié)議開(kāi)發(fā)僅需針對(duì)模型3~5層分別處理即可。
評(píng)論