plc具有可靠性高、通用性強(qiáng)等優(yōu)點(diǎn),可以大大減少故障的產(chǎn)生,因此在工業(yè)控制領(lǐng)域得到了廣泛的應(yīng)用。隨著電子控制技術(shù)的發(fā)展,各種高級(jí)控制策略得以面對(duì)不同的對(duì)象在不同的場(chǎng)合下應(yīng)用,如何融合分析各種現(xiàn)場(chǎng)數(shù)據(jù)就是很現(xiàn)實(shí)的問題,這其中的前提之一就是各種數(shù)據(jù)的提取,伴隨著網(wǎng)絡(luò)技術(shù)的發(fā)展,通過以太網(wǎng)技術(shù),就可以實(shí)現(xiàn)這種數(shù)據(jù)的遠(yuǎn)程傳輸,進(jìn)而達(dá)到數(shù)據(jù)的集中分析處理,做出合理的控制策略。
2 系統(tǒng)構(gòu)成
本系統(tǒng)是基于實(shí)驗(yàn)室設(shè)備而開發(fā)的一套遠(yuǎn)程控制系統(tǒng),它的控制對(duì)象是多臺(tái)plc控制的雙容水箱,可以稱之為雙容水箱實(shí)驗(yàn)臺(tái),它包括plc變頻器、水泵和雙容水箱。plc包括ad、di等模塊,plc通過控制變頻器的輸出來調(diào)整水泵的轉(zhuǎn)速,進(jìn)而控制雙容水箱的進(jìn)水量。plc通過串口與實(shí)驗(yàn)開發(fā)的以太網(wǎng)模塊相連以實(shí)現(xiàn)plc數(shù)據(jù)與遠(yuǎn)端操作端的數(shù)據(jù)交換。由于是多個(gè)實(shí)驗(yàn)臺(tái)組成一個(gè)網(wǎng)絡(luò),所以在組網(wǎng)的過程中采用的策略是利用hub與單塊以太網(wǎng)模塊相連,然后連在一臺(tái)服務(wù)器上。利用rj45水晶頭把hub和以太網(wǎng)模塊連接以后,數(shù)據(jù)遵循802.3網(wǎng)絡(luò)協(xié)議以實(shí)現(xiàn)以太網(wǎng)模塊與服務(wù)器的數(shù)據(jù)傳輸。在服務(wù)器端,用sql語(yǔ)言建立一個(gè)數(shù)據(jù)庫(kù)用以存放各種實(shí)驗(yàn)數(shù)據(jù)和控制命令,同時(shí)用c++builder編寫所需要的現(xiàn)實(shí)畫面和網(wǎng)絡(luò)發(fā)布畫面。整個(gè)系統(tǒng)框圖如圖1所示:
3 以太網(wǎng)模塊硬件設(shè)計(jì)
以太網(wǎng)模塊是用通用的c51系列單片機(jī)作為控制器,rtl8019as芯片作為以太網(wǎng)控制芯片,20f-01芯片作為網(wǎng)絡(luò)濾波器,在這個(gè)10baset以太網(wǎng)中,采用非屏蔽雙絞線的rj45標(biāo)準(zhǔn)接口。模塊電路如圖2所示。
這里主要介紹一下rtl8019as網(wǎng)絡(luò)控制芯片。rtl8019as是臺(tái)灣地區(qū)realtek公司生產(chǎn)的一種高度集成的全面支持iebb802.3標(biāo)準(zhǔn)的以大網(wǎng)控制器芯片,它支持8位位處理器。軟件兼容ne2000,同時(shí)還支持微軟的pnp(即插即用)規(guī)范。其主要特性如下:
符合ethernet ⅱ和ieee802.3標(biāo)準(zhǔn);
支持跳線和免跳線兩種工作方式;
全雙工,收發(fā)可同時(shí)達(dá)到10mbps的速率;
內(nèi)部有16k的sram;
支持 8位16位數(shù)據(jù)總線;
和ne2000系列兼容;
允許四個(gè)診斷l(xiāng)ed可編程輸出;
100腳pqfp襯禁。
rtl8019as芯片內(nèi)部主要可分為遠(yuǎn)程dma接口、本地dma接口、mac(介質(zhì)訪問子層)邏輯、數(shù)據(jù)編碼解碼邏輯和其它端口。isa總線接口即遠(yuǎn)程 dma接口是指主機(jī)對(duì)rtl8019as進(jìn)行控制和操作的總線,本地dma接口是指rtl8019as與網(wǎng)絡(luò)線的連接通道,作用是成控制器和網(wǎng)絡(luò)線的數(shù)據(jù)交換。pnp(即插即用)邏輯部分主要是用來解決和 pc機(jī)的連接連接,bootrom端口作用是解訣遠(yuǎn)程啟動(dòng)問題:eeprom端口是用來操作rtl8019as和eeprom芯片93c46的接口,sram用來存放接收和要發(fā)送的數(shù)據(jù):mac邏輯完成數(shù)據(jù)的發(fā)送和接收過程中的一些控制:當(dāng)主機(jī)要發(fā)送數(shù)據(jù)時(shí),將一幀數(shù)據(jù)經(jīng)過遠(yuǎn)程dma信道送到以太網(wǎng)絡(luò)控制器中的發(fā)送緩存內(nèi)存中,然后發(fā)出傳送命令,以太網(wǎng)絡(luò)控制器在送出前一幀的數(shù)據(jù)后繼而完成此幀的發(fā)送;接收數(shù)據(jù)時(shí),串行數(shù)據(jù)組成字節(jié)送到fifo和 crc,發(fā)送邏輯將 fifo送來的字節(jié)在發(fā)送時(shí)脈的控制下逐步按位移出并送到crc,crc邏輯在接收時(shí)對(duì)輸入的數(shù)據(jù)進(jìn)行crc校驗(yàn);將結(jié)果與幀尾的crc比較,如不同該幀數(shù)據(jù)將被柜收,如相問則送到接收緩沖區(qū)中,存到接收緩沖區(qū)收滿一幀后以中斷或緩存器標(biāo)志的方式通知主處理器把數(shù)據(jù)讀走。
4 以太網(wǎng)模塊的軟件設(shè)計(jì)
本系統(tǒng)程序是由keil c語(yǔ)言寫成,主耍包括兩部分:一是tcp/ip的實(shí)現(xiàn),二是8019as的驅(qū)動(dòng)程序。
4.1 tcp/ip協(xié)議的實(shí)現(xiàn)
tcp/1p實(shí)質(zhì)上是一系列協(xié)儀的總稱,是實(shí)現(xiàn)internet通訊必不可少的部分,包括十幾個(gè)協(xié)議標(biāo)準(zhǔn)。傳輸?shù)臄?shù)據(jù)量很少且對(duì)實(shí)時(shí)性要求不是很高,不需要全部的協(xié)議,只要實(shí)現(xiàn)幾個(gè)必要的就可以了;權(quán)衡之下,求在最小代碼、最小資源需求和功能實(shí)現(xiàn)間取得一個(gè)平衡;只要實(shí)現(xiàn)了icmp(互聯(lián)網(wǎng)控制報(bào)文協(xié)議)、tcp(傳輸控制協(xié)議)、ip(網(wǎng)絡(luò)層協(xié)議)、arp(地址解析協(xié)議)4個(gè)協(xié)議。因?yàn)槿魏我粋€(gè)以太網(wǎng)數(shù)據(jù)幀要發(fā)送時(shí)都必須要知道對(duì)方的物理地址,這能過arp協(xié)議來取得,所以要實(shí)現(xiàn)arp協(xié)議,而ip協(xié)議是tcp和icmp協(xié)議數(shù)據(jù)的傳輸格式;tcp協(xié)議提供可靠的、可重組服務(wù);而icmp協(xié)議是調(diào)試時(shí)所不可缺少的。
4.2 rtl8019as驅(qū)動(dòng)程序
(1) rtl8019as的初始化
開機(jī)復(fù)位信號(hào)接在以太網(wǎng)絡(luò)控制器的復(fù)位接腳上,因此當(dāng)開機(jī)后以太網(wǎng)絡(luò)控制器一直會(huì)處于復(fù)位狀態(tài),直到主控制器發(fā)出開始命令為止,初始化步驟如下:
硬件重置;
cr寫入21h,進(jìn)入第0頁(yè);
對(duì)dcr進(jìn)行初始化;
對(duì)rbcr進(jìn)行初始化:
對(duì)rcr進(jìn)行初始化;
對(duì)tcr進(jìn)行初始化;
接收緩仲區(qū)初始化包含bndry,pstrat,pstop,tpsr的初始化:
清除 isr的值寫入 ffh,允許中斷;間對(duì)imr進(jìn)行初始化;
cr寫入61h,進(jìn)入第1頁(yè)的對(duì)par0-5、mar0-7、curr進(jìn)行初始化;
將以太網(wǎng)絡(luò)控制器置于開始模式cr=22h;
將以太網(wǎng)控制器置第0頁(yè),準(zhǔn)備開始工作。
(2) 接受幀的過程
在接收數(shù)據(jù)時(shí),當(dāng)rtl8019as接收到一個(gè)以太網(wǎng)幀時(shí),當(dāng)這幀數(shù)據(jù)的目的地址是本地地址且crc校驗(yàn)正確時(shí),啟動(dòng)本地dma把數(shù)據(jù)讀入接收緩沖區(qū),然后通過中斷通知主控制器,主控制器通過遠(yuǎn)程dma把rtl8019as中的數(shù)據(jù)讀走。這時(shí)一定要設(shè)置bnry指針,因?yàn)樗枰脩粑丛O(shè)置,每讀走一個(gè)數(shù)據(jù)都要把它加l。當(dāng)它到ox7f時(shí)自動(dòng)返回為初始化值。
(3) 發(fā)送幀的過程
傳送流程比較復(fù)雜筒言之有幾個(gè)重要步驟:
ip層軟件己準(zhǔn)備好數(shù)據(jù)幀;
將數(shù)據(jù)幀寫入數(shù)據(jù)通訊端口處;
判斷cr緩存器的txp值是否為入若為1表示上一幀數(shù)據(jù)尚未傳完,暫時(shí)不能傳送此數(shù)據(jù)幀,若為0則可以傳送;再發(fā)出發(fā)迭數(shù)據(jù)的命令,啟動(dòng)本地dma把數(shù)據(jù)發(fā)送到以太網(wǎng)上即可,需要注意的是一定要設(shè)置以太網(wǎng)的目的地址和源地址,協(xié)議類型等。
這里采用查詢方式來處理。數(shù)據(jù)發(fā)送之前,我們要將發(fā)送數(shù)據(jù)封裝成以太網(wǎng)的ieee802.3t或者dix ethernet v2標(biāo)準(zhǔn)的mac幀,并通過遠(yuǎn)程dma寫到發(fā)送緩沖區(qū)中。往常,我們只須向緩沖區(qū)填寫目的地址、源地址.數(shù)據(jù)長(zhǎng)度/類型和數(shù)據(jù),前同步碼和fsc由 rtl8019as發(fā)送時(shí),自動(dòng)產(chǎn)生。標(biāo)準(zhǔn)的以太網(wǎng)數(shù)據(jù)幀如圖3所示:
5 網(wǎng)絡(luò)編程
borland公司推出的c++builder是一個(gè)功能強(qiáng)大的windows應(yīng)用軟件開發(fā)工具,即可以編寫一般windows應(yīng)用程序和控制臺(tái)程序,也可以編寫復(fù)雜的數(shù)據(jù)庫(kù)應(yīng)用和web服務(wù)程序。本課題就是利用c++builder軟件的可視化特性和高效存取數(shù)據(jù)庫(kù)來完成相關(guān)的網(wǎng)絡(luò)功能。在c/s模式下,本來可以直接利用在windows環(huán)境下的winsock組建來完成編程,但是由于考慮到可能需要了解相關(guān)的通信細(xì)節(jié),而winsock組件在一定的程度上屏蔽了許多通信細(xì)節(jié),所以采用了winsock api編程。在以太網(wǎng)數(shù)據(jù)傳輸過程中,主要使用udp協(xié)議通信,udp協(xié)議下socket通信流程如圖5所示:
在c++builder中利用軟件所提供的database desktop工具創(chuàng)建一個(gè)數(shù)據(jù)庫(kù),由于是在同一個(gè)開發(fā)環(huán)境下數(shù)據(jù)庫(kù)的調(diào)用和數(shù)據(jù)的修改顯得比較方便。
6 結(jié)束語(yǔ)
通過本課題的研究,以實(shí)驗(yàn)環(huán)境為背景的以太網(wǎng)遠(yuǎn)程控制系統(tǒng)是可以達(dá)到所設(shè)想的目的的,通過控制網(wǎng)絡(luò)和通信網(wǎng)絡(luò)的接合,可以方便的實(shí)現(xiàn)各種實(shí)驗(yàn)平臺(tái)的聯(lián)系,同時(shí)系統(tǒng)運(yùn)行穩(wěn)定,對(duì)于各種數(shù)據(jù)的集中分析處理會(huì)有比較大的幫助。