2 系統(tǒng)組成
系統(tǒng)主要由SPC3智能通信模塊、TCP/IP協(xié)議模塊、雙口RAM和雙 CPU組成。當(dāng)實(shí)現(xiàn)遠(yuǎn)程控制時(shí),TCP/IP協(xié)議模塊負(fù)責(zé)將從以太網(wǎng)接受到的數(shù)據(jù)幀解包后送到雙口RAM,SPC3通信模塊再把從雙口RAM中取出的數(shù)據(jù)打包后通過(guò)RJ485接口送到Profibus現(xiàn)場(chǎng)總線上去。當(dāng)實(shí)現(xiàn)遠(yuǎn)程監(jiān)察功能時(shí),SPC3智能通信模塊把從PROFIBUS現(xiàn)場(chǎng)總線接受到的數(shù)據(jù)解包后送到雙口RAM中,TCP/IP協(xié)議模塊再把雙口RAM中的數(shù)據(jù)取出打包后送到以太網(wǎng)。系統(tǒng)硬件結(jié)構(gòu)平臺(tái)如圖1所示。

圖 1 系統(tǒng)組成原理框圖
3 TCPIP協(xié)議實(shí)現(xiàn)
3.1 實(shí)現(xiàn)方法
TCPIP協(xié)議模塊由8位MCU和精簡(jiǎn)TCP/IP協(xié)議棧組成。這里TCPIP協(xié)議采用一種簡(jiǎn)化的四層模型, 分別為應(yīng)用層、傳輸層、網(wǎng)絡(luò)層、鏈路層。應(yīng)用層(以及用戶層)采用用戶自定義應(yīng)用層。傳輸層讓網(wǎng)絡(luò)程序通過(guò)明確定義的網(wǎng)絡(luò)連接的端口號(hào)(例1025端口)獲取數(shù)據(jù),實(shí)現(xiàn)該層協(xié)議的是傳輸控制協(xié)議TCP和用戶數(shù)據(jù)報(bào)協(xié)議UDP。網(wǎng)絡(luò)層讓信息可以發(fā)送到相鄰的TCPIP網(wǎng)絡(luò)上的任一主機(jī)上,IP協(xié)議就是層中傳送數(shù)據(jù)的機(jī)制,同時(shí)為建立網(wǎng)絡(luò)間的互連,提供了ARP地址、解析協(xié)議,從而實(shí)現(xiàn)從IP地址到數(shù)據(jù)鏈路物理地址的映像。鏈路層由控制同一物理網(wǎng)絡(luò)上的不同機(jī)器間數(shù)據(jù)傳送的底層協(xié)議組成,實(shí)現(xiàn)這一層協(xié)議的協(xié)議并不屬于TCPIP協(xié)議組,鏈路層部分由RTL8019AS完成[1]。
3.2 硬件電路
TCP/IP協(xié)議模塊硬件電路如圖2所示。雙口RAM芯片IDT7130用于TCP/IP模塊與SPC3模塊的數(shù)據(jù)交換;使用X5045作為閃盤存儲(chǔ)MAC 地址、Ip地址、子網(wǎng)掩碼和網(wǎng)關(guān);使用可編程邏輯器件GAL16V8芯片作為譯碼器,A9到A15七個(gè)狀態(tài)通過(guò)GAL16V8編程,經(jīng)8-3編碼,送到外部數(shù)據(jù)存儲(chǔ)器和RTL8019AS以太網(wǎng)控制器的片選端。以太網(wǎng)協(xié)議由8019AS芯片硬件自動(dòng)完成,對(duì)程序員透明。驅(qū)動(dòng)程序有3 種功能:芯片初始化、收包、發(fā)包。按數(shù)據(jù)鏈路的不同,可以將RTL8019AS內(nèi)部劃分為遠(yuǎn)程DMA(remote DMA)通道和本地DMA(local DMA)通道兩個(gè)部分。本地DMA完成控制器與網(wǎng)線的數(shù)據(jù)交換,主處理器收發(fā)數(shù)據(jù)只需對(duì)遠(yuǎn)程DMA操作。當(dāng)主處理器要向網(wǎng)上發(fā)送數(shù)據(jù)時(shí),先將一幀數(shù)據(jù)通過(guò)遠(yuǎn)程DMA通道送到RTL8019AS中的發(fā)送緩存區(qū),然后發(fā)出傳送命令。RTL8019AS在完成了上一幀的發(fā)送后,再完成此幀的發(fā)送。RTL8019AS接收到的數(shù)據(jù)通過(guò)MAC比較、CRC校驗(yàn)后,由FIFO存到接收緩沖區(qū),收滿一幀后,以中斷或寄存器標(biāo)志的方式通知主處理器。

圖 2 TCP/IP模塊硬件電路
3.3 數(shù)據(jù)的收發(fā)
程序開(kāi)始執(zhí)行后,初始狀態(tài)字為命令輸入狀態(tài)字,從串口緩沖區(qū)讀1字節(jié)數(shù)據(jù),如果接受緩沖區(qū)為空,則狀態(tài)字設(shè)置為命令執(zhí)行狀態(tài)字,從而進(jìn)入TCP命令處理程序,把要發(fā)送的數(shù)據(jù)封裝成TCP包后發(fā)包至緩沖區(qū);如果接受緩沖區(qū)不為空的話,則進(jìn)入主循環(huán)進(jìn)行收發(fā)包處理過(guò)程,主程序流程圖如圖3所示。

圖 3 主程序流程
在進(jìn)入主循環(huán)后,將進(jìn)行收發(fā)包處理,首先對(duì)發(fā)包緩沖區(qū)進(jìn)行發(fā)送處理,要傳輸?shù)腎nternet數(shù)據(jù)包在以太網(wǎng)控制器的發(fā)送緩沖區(qū)中被構(gòu)建,它使用最近接收到的數(shù)據(jù)包的目的以太網(wǎng)地址作為數(shù)據(jù)包的目的地址。實(shí)際發(fā)送前,ARP協(xié)議將將檢查發(fā)送數(shù)據(jù)包的IP地址是否存在于ARP內(nèi)核中并做相應(yīng)處理,8019AS發(fā)包函數(shù)send_packet()將完成最后數(shù)據(jù)包到以太網(wǎng)的傳送。然后8019AS的收包函數(shù)recv_packet()將進(jìn)行收包處理,接受的數(shù)據(jù)包放到rxdnet指向的緩沖區(qū)中。如果rxdnet.etherframe.protocal等于0x0806,則表示收到的是一個(gè)arp請(qǐng)求包,并根據(jù)rxdnet.arpframe.operation的數(shù)值判斷是做arp應(yīng)答處理還是做arp應(yīng)答。如果rxdnet.etherframe.protocal等于0x0800,則表示收到一個(gè)ip包,rxdnet.ipframe.protocal等于6時(shí)表示數(shù)據(jù)包的傳輸層是tcp協(xié)議,從而進(jìn)入TCP處理進(jìn)程。rxdnet.ipframe.protocal等于0x11,表示數(shù)據(jù)包的傳輸層是udp協(xié)議,從而進(jìn)入udp處理進(jìn)程。收發(fā)包處理流程如圖4所示[2]。

圖 4 收發(fā)包處理流程
4 Profibus-DP實(shí)現(xiàn)
SPC3協(xié)議模塊主要包括89C52單片機(jī)和協(xié)議芯片SPC3。SPC3可獨(dú)立完成全部Profibus-DP通信功能,數(shù)據(jù)輸入和輸出處理(輸入輸出相對(duì)于主站而言)以及用戶診斷數(shù)據(jù)輸入可以放在應(yīng)用程序循環(huán)中。用戶可以通過(guò)查詢輸入輸出及診斷事務(wù)的處理。DPS2_POLL_IND_xx宏支持讀取單個(gè)事件信息,查詢方式也可被DPS2_IND_CONFIRM宏獲取并確認(rèn)。在一個(gè)應(yīng)用程序循環(huán)中讀入數(shù)據(jù),且由應(yīng)用來(lái)刷新輸入緩沖區(qū)中的數(shù)據(jù),保障所有的輸入數(shù)據(jù)是最新更新的數(shù)據(jù)。而SPC3在接收到由PROFIBUS主站傳送的不同輸出數(shù)據(jù)時(shí),會(huì)產(chǎn)生輸出標(biāo)志位(位于中斷請(qǐng)求字單元),CPU通過(guò)在應(yīng)用循環(huán)中查詢標(biāo)志位來(lái)進(jìn)行接收主站數(shù)據(jù)。對(duì)于實(shí)時(shí)性要求嚴(yán)格的系統(tǒng),應(yīng)采用中斷方式進(jìn)行輸出數(shù)據(jù)的處理。主程序首先利用開(kāi)發(fā)包中的DPS2對(duì)SPC3進(jìn)行初始化,并允許外部中斷INT0,設(shè)置INT0為高優(yōu)先級(jí)及開(kāi)中斷,然后啟動(dòng)SPC3,通過(guò)SPC3進(jìn)行主站和從站的數(shù)據(jù)交換以及處理診斷[3]。
4.1 數(shù)據(jù)的接收
主站和SPC3通過(guò)默認(rèn)的服務(wù)訪問(wèn)點(diǎn)交換數(shù)據(jù),在此過(guò)程中SPC3需要完成的任務(wù)主要包括以下三點(diǎn): SPC3將輸出數(shù)據(jù)寫入D緩沖區(qū)中,且交換D和N緩沖區(qū)中的數(shù)據(jù);產(chǎn)生DX-Out中斷;用戶通過(guò)交換N和U緩沖區(qū)中的數(shù)據(jù),從U緩沖區(qū)中獲取輸出數(shù)據(jù)。其中第一步由SPC3自動(dòng)完成,用DPS2_POLL_IND_DX_OUT()讀SPC3的中斷請(qǐng)求寄存器查詢中斷事件。當(dāng)為真時(shí),表示SPC3接收到Write_Read_Data報(bào)文,并使N緩沖區(qū)中的輸出數(shù)據(jù)有效。用宏DPS2_OUTPUT_UPDATE()更新輸出緩沖區(qū),即將N緩沖區(qū)中的數(shù)據(jù)送到U緩沖區(qū)中。輸出數(shù)據(jù)中并不包括輸出數(shù)據(jù)的長(zhǎng)度,但必須和DPS2_SET_IO_DATA_LEN()定義的數(shù)據(jù)長(zhǎng)度一致,當(dāng)長(zhǎng)度不一致時(shí),從站將會(huì)返回到等待參數(shù)賦值狀態(tài),輸出數(shù)據(jù)緩沖區(qū)的長(zhǎng)度在初始化部分程序中。
if (DPS2_POLL_IND_DX_OUT()) /* 判斷是否有新的輸出數(shù)據(jù) */
{
DPS2_CON_IND_DX_OUT();/*中斷確認(rèn)對(duì)SPC3的中斷響應(yīng)寄存器寫操作*/
user_output_buffer_ptr = DPS2_OUTPUT_UPDATE();/* 獲取實(shí)際輸出數(shù)據(jù)指針*/
for (i=0; i<user_io_data_len_ptr->outp_data_len; i++)
{
(*((io_byte_ptr) + i)) = (*(((UBYTE SPC3_PTR_ATTR*) user_output_buffer_ptr) + i));
}
}
4.2 數(shù)據(jù)的發(fā)送[4]
在輸入數(shù)據(jù)傳送前,用戶主程序首先要宏DPS2_GET_DIN_BUF_PTR()取得輸入緩沖區(qū)的指針,用宏DPS2_bbbbb_UPDATE()用戶可以重復(fù)地將輸入數(shù)據(jù)從用戶端傳送到DPS2,并取得可用的輸入緩沖區(qū)指針,用于接收新的輸入數(shù)據(jù)。輸入數(shù)據(jù)中并不包括輸入數(shù)據(jù)的長(zhǎng)度,但輸入數(shù)據(jù)必須和DPS2_SET_IO_DATA_LEN()定義的長(zhǎng)度一致。處理輸入數(shù)據(jù),將輸入數(shù)據(jù)從外設(shè)寫入緩沖區(qū)程序如下。
for (i=0; i<user_io_data_len_ptr->inp_data_len; i++)
{
*(((UBYTE SPC3_PTR_ATTR*) user_bbbbb_buffer_ptr) + i) = *((io_byte_ptr) + i);
}
user_bbbbb_buffer_ptr = DPS2_bbbbb_UPDATE();
5 結(jié)束語(yǔ)
以太網(wǎng)與Profibus-DP現(xiàn)場(chǎng)總線數(shù)據(jù)交換是工業(yè)現(xiàn)場(chǎng)經(jīng)常遇到的問(wèn)題。本文所采用的簡(jiǎn)化TCP/IP協(xié)議棧+8位MCU與89C52單片機(jī)+協(xié)議芯片組成的數(shù)據(jù)交換系統(tǒng)具有價(jià)格低廉、易于實(shí)現(xiàn)和易于普及等優(yōu)點(diǎn)。測(cè)試表明數(shù)據(jù)交換過(guò)程具有良好的可靠性和實(shí)時(shí)性,可以滿足實(shí)際現(xiàn)場(chǎng)以太網(wǎng)與PROFIBUS現(xiàn)場(chǎng)總線之間數(shù)據(jù)交換的要求,從而為工業(yè)企業(yè)實(shí)現(xiàn)管控一體化提供了一種靈活的組網(wǎng)方式。
參考文獻(xiàn):
[1] DOUGLAS E. COMER著,《用TCP/IP進(jìn)行網(wǎng)際互連——TCP/IP詳解,卷1:協(xié)議》,電子工業(yè)出版社,2000
[2] JEREMY BENTHAM 著,嵌入式系統(tǒng)web服務(wù)器——TCP/IP Lean,機(jī)械工業(yè)出版社,2003
[3] SPC3 and DPS2 User Debbbbbbion V1.9,2000. SIEMENS.
[4] Profibus Technical Guideline, PROFIBUS-DP Extensions to EN50170(DPV1) Version 2.0,April 1998. SIEMENS.
李先生 【求購(gòu)】 綜合微機(jī)保... 2026-4-10
王坤 【求購(gòu)】 石英碎片 2026-4-9
陳經(jīng)理 【求購(gòu)】 攪拌設(shè)備的... 2026-4-9
周經(jīng)理 【求購(gòu)】 遠(yuǎn)大流量計(jì) 2026-4-9
蔡經(jīng)理 【求購(gòu)】 歐姆龍傳感... 2026-4-8
呂經(jīng)理 【求購(gòu)】 二手伺服變... 2026-4-8
曾經(jīng)理 【求購(gòu)】 金龍羽電線 2026-4-8










