1 引言
現(xiàn)代遠(yuǎn)程測控任務(wù)要求能對(duì)各種工業(yè)系統(tǒng)進(jìn)行遠(yuǎn)程監(jiān)視、控制以及遠(yuǎn)程數(shù)據(jù)傳送,傳統(tǒng)的集中測控系統(tǒng)已經(jīng)滿足不了復(fù)雜、遠(yuǎn)程(異地)和范圍較大的分布式測控任務(wù)的需求。而且多數(shù)的工業(yè)控制和通信設(shè)備中,采用的是符合rs232標(biāo)準(zhǔn)的串行口設(shè)備。在internet技術(shù)向全球各個(gè)領(lǐng)域普及的同時(shí),如何將串行口的數(shù)據(jù)轉(zhuǎn)發(fā)到網(wǎng)絡(luò)上,實(shí)現(xiàn)設(shè)備的遠(yuǎn)程控制、數(shù)據(jù)的遠(yuǎn)程傳輸便成了一個(gè)亟待解決的問題。同時(shí),考慮到成本問題,以往設(shè)備又不可能全部淘汰。因此,本文提出一種基于tcp/ip的串口轉(zhuǎn)換網(wǎng)關(guān)解決方案。
串口轉(zhuǎn)換網(wǎng)關(guān)使得串口數(shù)據(jù)流到以太網(wǎng)數(shù)據(jù)流的傳輸成為可能。它能連接rs232串口設(shè)備,并將串口數(shù)據(jù)進(jìn)行選擇和處理,把rs232接口的數(shù)據(jù)流轉(zhuǎn)化成以太網(wǎng)數(shù)據(jù)流,這樣就可以進(jìn)行網(wǎng)絡(luò)化的數(shù)據(jù)處理,實(shí)現(xiàn)串行數(shù)據(jù)的網(wǎng)絡(luò)化。采用此種方案,無需淘汰原有串口設(shè)備,多臺(tái)設(shè)備可同時(shí)入網(wǎng),既可以提高設(shè)備利用率,又節(jié)約組網(wǎng)費(fèi)用,還可在已有的網(wǎng)絡(luò)基礎(chǔ)上簡化布線復(fù)雜度。
2 硬件結(jié)構(gòu)
由stc89c58單片機(jī)和rtl8019-as以太網(wǎng)控制器組成硬件平臺(tái),編寫網(wǎng)絡(luò)設(shè)備的驅(qū)動(dòng)程序,實(shí)現(xiàn)以太網(wǎng)通信功能。該系統(tǒng)的硬件結(jié)構(gòu)如圖1所示。該系統(tǒng)模塊可滿足具有rs-232接口的電氣設(shè)備的遠(yuǎn)程監(jiān)控工作需求,是一種具有實(shí)際意義的網(wǎng)絡(luò)通信模塊,該模塊利用網(wǎng)絡(luò)接口芯片rtl8019as使得測控設(shè)備能以低廉的費(fèi)用、簡單的方式接入局域網(wǎng)。以網(wǎng)絡(luò)接口芯片rtl8019as的主要性能符合ethernetⅱ與ieee802.3標(biāo)準(zhǔn),全雙工,收發(fā)可同時(shí)達(dá)到10mb/s的速率。遠(yuǎn)程端pc機(jī)把數(shù)據(jù)發(fā)給以太網(wǎng)接口,以太網(wǎng)接口把數(shù)據(jù)存入ram中,現(xiàn)場串口裝置與單片機(jī)進(jìn)行通訊,從ram中取出數(shù)據(jù)作為現(xiàn)場設(shè)備的控制命令,從而使現(xiàn)場設(shè)備工作狀態(tài)發(fā)生變化。

圖1 系統(tǒng)結(jié)構(gòu)圖
rtl8019as內(nèi)部有2塊ram區(qū),一塊32bytes,地址為0x0000-0x0001f,用于存儲(chǔ)以太網(wǎng)物理地址。一塊16kbram地址為0x4000-ox7fff,要接收和發(fā)送數(shù)據(jù)包就必須通過dma讀寫此ram。rtl8019as內(nèi)部可分為遠(yuǎn)程dma接口、本地dma接口、mac邏輯、數(shù)據(jù)編碼解碼邏輯和其他端口。rtl8019as具有32bit輸入輸出地址,遠(yuǎn)程dma地址偏移量0x10h-0x17h都可以用來做遠(yuǎn)程dma端口,只要用其中一個(gè)就可以了,一般使用0x10h。遠(yuǎn)程dma是cpu從網(wǎng)卡的ram里讀取數(shù)據(jù)到系統(tǒng)ram中,或者發(fā)送數(shù)據(jù)到網(wǎng)卡的ram中。本地dma是網(wǎng)卡接收以太網(wǎng)上傳來的數(shù)據(jù),或者發(fā)送網(wǎng)卡ram 里的數(shù)據(jù)到以太網(wǎng)(啟動(dòng)命令后,網(wǎng)卡自動(dòng)完成)。
本地dma完成控制線與網(wǎng)線的數(shù)據(jù)交換,處理器cpu收發(fā)數(shù)據(jù)只需對(duì)遠(yuǎn)程dma操作。當(dāng)處理器要向網(wǎng)絡(luò)上發(fā)送數(shù)據(jù)時(shí),先將一幀數(shù)據(jù)通過遠(yuǎn)程dma通道送到rtl8019as中的發(fā)送緩存區(qū),然后發(fā)出傳送命令。rtl-8019as在完成了上一幀的發(fā)送后,再開始此幀的發(fā)送。rtl8019as接收到的數(shù)據(jù)通過mac地址比較、crc校驗(yàn)后,由fifo存到接收緩存區(qū),收滿一幀后,以中斷或查詢寄存器標(biāo)志的方式通知主處理器。
3 軟件設(shè)計(jì)
3.1 rtl8019as初始化
在使用rtl8019as作為網(wǎng)管芯片時(shí),必須對(duì)8019進(jìn)行初始化
{page_select(0);
cr=0x4c;
pstart=0x80;
bnry=0x4c;
tpsr=0x40; //tpsr,發(fā)送起始頁寄存器
isr=0xff; //清除所有中斷標(biāo)志
rcr=0xe0; //rcr,監(jiān)視模式,不接收數(shù)據(jù)包
tcr=0xe2; //tcr,look back模式
dcr=0xc8; //數(shù)據(jù)配置寄存器
imr=0x00; //中斷標(biāo)志屏蔽寄存器清0
page_select(1);
curr=0x4d;
cr=0x22; // 啟動(dòng)rtl8019as開始工作
page_select(0);
cr=0x22; //啟動(dòng)rtl8019as開始工作
isr=0xff; //清除所有中斷標(biāo)志
rcr=0xcc; //將rtl8019as的物理地址寫入到mar寄存器
tcr=0xe0;
}
3.2 數(shù)據(jù)封裝
串口進(jìn)入的數(shù)據(jù)要想在以太網(wǎng)中傳輸必須按照以太網(wǎng)的幀格式進(jìn)行封裝,而這是一個(gè)逐層封裝的過程。由應(yīng)用程序?qū)υO(shè)備數(shù)據(jù)添加appl首部形成應(yīng)用數(shù)據(jù),由tcp協(xié)議對(duì)應(yīng)用數(shù)據(jù)添加tcp首部,逐層對(duì)數(shù)據(jù)進(jìn)行封裝,最后由rtl8019as芯片對(duì)數(shù)據(jù)添加以太網(wǎng)首部。封裝過程如圖2所示。

圖2 數(shù)據(jù)封裝示意圖
封裝后的數(shù)據(jù)傳輸格式如線下所示:

(1) 前導(dǎo):由rtl8019as芯片本身產(chǎn)生,用于同步首發(fā)雙方的時(shí)鐘,并指定傳輸數(shù)率。
(2) 目的地址da:以太網(wǎng)數(shù)據(jù)幀傳輸?shù)哪康牡刂?,?8位二進(jìn)制地址,全1時(shí)表示廣播地址。
(3) 源地址sa:以太網(wǎng)數(shù)據(jù)幀傳輸?shù)脑吹刂?8位,表示該幀數(shù)據(jù)的出發(fā)點(diǎn),即發(fā)送端的地址。
(4) 幀格式type:類型字段,表明該幀數(shù)據(jù)的類型。如ip包的數(shù)據(jù)類型為0800h,arp包的數(shù)據(jù)類型為0806h。
(5) 數(shù)據(jù):以太網(wǎng)規(guī)定整個(gè)數(shù)據(jù)包的最大長度為1514字節(jié),在這里規(guī)定數(shù)據(jù)字段不能超過1500字節(jié)。
(6) crc及填充位:以太網(wǎng)規(guī)定整個(gè)數(shù)據(jù)包必須大于60字節(jié)不滿足字節(jié)60字節(jié),用任何數(shù)據(jù)不補(bǔ)足60字節(jié)。
3.3 數(shù)據(jù)處理框架
來自客戶端的數(shù)據(jù)信息通過rj-45以太網(wǎng)接口,網(wǎng)路接口芯片到達(dá)微控制器,微控制器通過內(nèi)嵌的tcp/ip協(xié)議棧,實(shí)現(xiàn)地址解析協(xié)議(arp)、internet控制報(bào)文協(xié)議(icmp)、ip協(xié)議和用戶數(shù)據(jù)報(bào)協(xié)議(udp)等協(xié)議,從而完成網(wǎng)絡(luò)數(shù)據(jù)的解析和拆封。網(wǎng)絡(luò)數(shù)據(jù)處理編程時(shí)候使用如下的程序框架:
{ if(以太網(wǎng)首部幀類型==0x0806)
{arp處理程序}
if(以太網(wǎng)首部幀類型==0x0835)
{parp處理程序}
if(以太網(wǎng)首部幀類型==0x0800)
{ip處理程序}
}
在正常運(yùn)行時(shí),tcp/ip協(xié)議轉(zhuǎn)換模塊的任務(wù)主要是將以太網(wǎng)發(fā)送緩沖區(qū)的串口幀封裝在udp包中,并傳給ip層;同時(shí),接收以太網(wǎng)數(shù)據(jù)幀并向上層層解包,分離應(yīng)用層數(shù)據(jù),然后數(shù)據(jù)的解析處理交由多串口發(fā)送模塊完成。接受串口數(shù)據(jù)后由單片機(jī)封裝后寫入以太網(wǎng)發(fā)送緩沖區(qū)打包傳輸;同時(shí),接收以太網(wǎng)應(yīng)用層的數(shù)據(jù),解析并從串口發(fā)出。對(duì)于該設(shè)計(jì)來說,通信數(shù)據(jù)的具體形式并不重要,它的任務(wù)主要是接收/發(fā)送,封裝/拆封串口幀,為串口設(shè)備提供通用網(wǎng)關(guān)接口。
4 結(jié)束語
本文介紹了基于tcp/ip的網(wǎng)關(guān)轉(zhuǎn)串口通訊,采用rtl8019as芯片實(shí)現(xiàn)了串口設(shè)備的網(wǎng)上通訊。較好的適應(yīng)了,低速,串口的工業(yè)場合。在串口電氣設(shè)備和網(wǎng)絡(luò)之間建起了一道橋梁,實(shí)現(xiàn)了串口設(shè)備和監(jiān)控和透明數(shù)據(jù)傳輸,以及設(shè)備的網(wǎng)絡(luò)化控制及信息的分布式管理,能夠廣泛的應(yīng)用在基于以太網(wǎng)的分布式測控網(wǎng)絡(luò)中。通過它,我們可以實(shí)現(xiàn)對(duì)各種實(shí)時(shí)信號(hào)、儀器儀表、民用設(shè)施等目標(biāo)的遠(yuǎn)程監(jiān)視,對(duì)各種設(shè)備統(tǒng)一管理。這必將大大提高工作效率,改善工作環(huán)境,提升人們的生產(chǎn)生活水平。
