劉 軍 蘇新凌 蘇紹熙 湯詩(shī)陽(yáng)(作者單位:廣西人民廣播電臺(tái))
接口技術(shù)在系統(tǒng)開(kāi)發(fā)中的應(yīng)用
劉 軍 蘇新凌 蘇紹熙 湯詩(shī)陽(yáng)
(作者單位:廣西人民廣播電臺(tái))
摘 要:接口技術(shù)是系統(tǒng)開(kāi)發(fā)中不可或缺的部分,是不同模塊,不同硬件、硬件與軟件、軟件與軟件之間的聯(lián)系橋梁,是系統(tǒng)連接的關(guān)鍵環(huán)節(jié)。本文通過(guò)對(duì)常用接口及協(xié)議的闡述,以及應(yīng)用開(kāi)發(fā)中的實(shí)例經(jīng)驗(yàn)來(lái)說(shuō)明接口協(xié)議的作用、應(yīng)用選擇、開(kāi)發(fā)技巧等。
關(guān)鍵詞:接口技術(shù);通信協(xié)議;二次開(kāi)發(fā);系統(tǒng)組合
隨著廣播的發(fā)展,越來(lái)越多的新技術(shù)在廣播的多個(gè)方面得到應(yīng)用,除了使用廠商生產(chǎn)的成品設(shè)備,更多的是為了適合本臺(tái)技術(shù)需求所做的定制化開(kāi)發(fā)。定制化開(kāi)發(fā)一般包括系統(tǒng)軟件和硬件的二次開(kāi)發(fā),二次開(kāi)發(fā)中非常重要的一部分內(nèi)容就是各軟硬件或模塊間的通信連接,也就是接口技術(shù)和通信協(xié)議的應(yīng)用,有了合適的通信連接,才能讓一個(gè)整體聯(lián)合發(fā)揮出功能作用。因此在技術(shù)開(kāi)發(fā)中,接口、協(xié)議技術(shù)應(yīng)用具有舉足輕重的作用。要有RS-232、RS-422、RS-485等。
在電子及計(jì)算機(jī)領(lǐng)域中,接口指實(shí)體根據(jù)某些規(guī)則,將其自身歸納并提供給外界的一種抽象化集合,用以進(jìn)行信息的傳輸或交互。接口的抽象性決定了其可被內(nèi)部修改而不影響外部傳輸和交互的特性。
在硬件層面,它是大多數(shù)接口行業(yè)組織提出制定的技術(shù)標(biāo)準(zhǔn)演化而成。常用的接口有串行接口(簡(jiǎn)稱串口)(包括RS-232、RS-485、SPI、UART、I2C、JTAG、USB等)、并行接口(簡(jiǎn)稱并口)、Wiegand、GPIO、RJ45、IDE、SATA、HDMI、VGA、DP、PCI-E、DDR等。在軟件層面,接口可以有2層含義,首先是狹義的、字面理解的“接口”,即各種語(yǔ)言和軟件所給出的API;而廣義的接口指的就是人機(jī)交互界面。
1.1串口
接口有串口和并口兩大類,串行接口(Serial Interface)是采用串行數(shù)據(jù)傳輸方式的接口,即一串?dāng)?shù)據(jù)的各比特位按位順序傳輸。其特點(diǎn)是數(shù)據(jù)傳輸單位較小,傳輸線路簡(jiǎn)單,成本較低廉,特別適用于遠(yuǎn)距離傳輸,常見(jiàn)串行接口主
1.1.1RS-232(圖1)是美國(guó)電子工業(yè)協(xié)會(huì)EIA制定的一種串行物理接口標(biāo)準(zhǔn),這個(gè)標(biāo)準(zhǔn)對(duì)串行接口的電氣特性、信號(hào)線功能都作了明確規(guī)定。由于通信設(shè)備廠商都生產(chǎn)與RS-232接口兼容的通信設(shè)備,它作為一種標(biāo)準(zhǔn)接口在電子通信中廣泛使用。RS-232接口總線標(biāo)準(zhǔn)設(shè)有25條信號(hào)線,包括一條主通道以及一條輔助通道,在多數(shù)情況下主要使用主通道進(jìn)行通信。RS-232接口標(biāo)準(zhǔn)規(guī)定的數(shù)據(jù)傳輸速率為50、75、100、150、300、600、1200、2400、4800、9600、19200、38400波特。
1.1.2針對(duì)RS-232接口存在的很多不足之處,后來(lái)發(fā)展出RS-485接口,它具有10 Mbps最高數(shù)據(jù)傳輸速率;接口信號(hào)電平比RS-232低,不易損壞接口電路的芯片;且與TTL電平兼容,方便與TTL電路連接、抗共模干擾能力增強(qiáng)、抗噪聲干擾性好等,特別是傳輸距離大大提高,達(dá)到了千米左右,支持多點(diǎn)互聯(lián),非常利于聯(lián)網(wǎng)構(gòu)建分布式系統(tǒng)。
圖1 RS- 232接口原理圖
1.1.3SPI是串行外設(shè)接口,它可以使單片機(jī)與各種外圍設(shè)備以串行傳輸?shù)姆绞竭M(jìn)行通信以交換信息。SPI是CPU和外圍低速器件之間進(jìn)行同步串行數(shù)據(jù)傳輸?shù)慕涌?,為全雙工通信,在主器件的移位脈沖下,數(shù)據(jù)按位傳輸,高位在前,低位在后。SPI接口一般有4條線:串行時(shí)鐘線(SCLK)、主機(jī)輸入/從機(jī)輸出數(shù)據(jù)線MISO、主機(jī)輸出/從機(jī)輸入數(shù)據(jù)線MOSI和低電平有效的從機(jī)選擇線NSS(有的SPI接口芯片帶有中斷信號(hào)線INT、有的SPI接口芯片沒(méi)有主機(jī)輸出/從機(jī)輸入數(shù)據(jù)線MOSI),如圖2所示。SPI接口具有支持全雙工操作、操作簡(jiǎn)單、數(shù)據(jù)傳輸速率較高的優(yōu)點(diǎn)。
1.1.4UART接口,通用異步接收發(fā)送器,它用于串行通信與并行通信間的信息傳輸轉(zhuǎn)換,并行輸入,串行輸出,為全雙工通信,其基本結(jié)構(gòu)圖3所示。
1.1.5USB接口(圖4)恐怕是目前最常見(jiàn)的接口了,它是連接計(jì)算機(jī)系統(tǒng)與外部設(shè)備的一種串口總線標(biāo)準(zhǔn),只有4
根線,兩根電源兩根信號(hào),也是一種輸入輸出接口的技術(shù)規(guī)范,被廣泛地應(yīng)用于個(gè)人電腦和移動(dòng)設(shè)備等信息通訊產(chǎn)品。
圖2 SPI接口多外圍設(shè)備連接示意圖
圖3 UART基本結(jié)構(gòu)圖
圖4 USB接口正反面實(shí)物圖
1.2并行接口
并口指采用并行傳輸方式來(lái)傳輸數(shù)據(jù)的接口標(biāo)準(zhǔn)。特點(diǎn)是傳輸速度快,但當(dāng)傳輸距離較遠(yuǎn)且數(shù)據(jù)位寬較大時(shí),就導(dǎo)致通信線路復(fù)雜且成本提高,目前已經(jīng)很少使用。
1.3韋根接口
韋根(Wiegand)接口是近年來(lái)使用較為普及的一種接口,協(xié)議是由摩托羅拉公司制定的一種通訊協(xié)議,沒(méi)有定義通訊的波特率,也沒(méi)有定義數(shù)據(jù)長(zhǎng)度。韋根接口通常由3根線組成,它們是數(shù)據(jù)0(Data0)、數(shù)據(jù)1(Data1)和Data return。Data0和 Data1兩根數(shù)據(jù)線分別傳輸0和1。現(xiàn)在應(yīng)用最多的數(shù)據(jù)格式為26-Bit。
1.4GPIO接口
GPIO接口也是廣播技術(shù)人員比較熟悉的接口,它是通用輸入輸出接口,簡(jiǎn)單說(shuō)就是一些引腳,通過(guò)它們輸出高低電平或通過(guò)它們讀取引腳高低電平狀態(tài)。
1.5軟件接口
上述接口是和硬件關(guān)聯(lián)度很高的,在開(kāi)發(fā)系統(tǒng)時(shí)候往往都有管理軟件,軟件與軟件之間也有多種接口協(xié)議,這些不是實(shí)物看得到的接口,但是也同樣具有重要的連接和通訊協(xié)調(diào)工作的作用。
軟件接口一般分為三個(gè)層面:展現(xiàn)、業(yè)務(wù)和通信。業(yè)務(wù)層是核心,承上啟下,通過(guò)一系列的指令進(jìn)行交互,指令序列規(guī)定了具體執(zhí)行的步驟,如TCP的三次
握手:SYN,ACK,SYN,ACK。通信層是雙方完成交互的一種通訊載體,用來(lái)傳遞具體協(xié)議信息,可以同一進(jìn)程內(nèi),不同進(jìn)程間,兩不同設(shè)備間傳輸,還可以通過(guò)數(shù)據(jù)庫(kù)和文件來(lái)傳輸。展現(xiàn)層則重在考慮溝通雙方的使用方式,通過(guò)一個(gè)個(gè)具體的API來(lái)完成最終的交互,這就是通常所說(shuō)的“Interface”,如圖5所示。
圖5 接口框圖
在技術(shù)開(kāi)發(fā)中,各子系統(tǒng)各模塊間的連接離不開(kāi)各類接口及協(xié)議的使用。而對(duì)接口和協(xié)議的選擇,要根據(jù)需求及設(shè)計(jì)的功能來(lái)確定,比如數(shù)據(jù)傳輸速率、傳輸距離、對(duì)環(huán)境的要求等方面。在二次開(kāi)發(fā)中,也會(huì)遇到硬件或軟件是單品采購(gòu),然后不同硬件軟件之間要聯(lián)系起來(lái)使用,就需要首先清楚每個(gè)硬件軟件的接口和協(xié)議是什么,對(duì)聯(lián)上需要做什么轉(zhuǎn)換,有些可以采用市場(chǎng)上既有的接口轉(zhuǎn)換器來(lái)實(shí)現(xiàn),有些就是通過(guò)搞清楚協(xié)議通訊的定義方式,然后通過(guò)定制開(kāi)發(fā)中間件來(lái)實(shí)現(xiàn)連接。因此,總結(jié)來(lái)說(shuō),需要熟悉接口和協(xié)議的原理,使用方式。如果是涉及軟件,接口必須是開(kāi)放的,這樣才能根據(jù)協(xié)議編制方式來(lái)針對(duì)性開(kāi)發(fā)。
3.1硬件接口實(shí)例說(shuō)明
該例子是無(wú)線射頻讀卡機(jī)讀取卡片信息與管理平臺(tái)通訊實(shí)現(xiàn)管理的一個(gè)系統(tǒng)。這個(gè)系統(tǒng)涉及到串口,RS-485接口,RJ-45網(wǎng)絡(luò)接口,運(yùn)行時(shí),其中無(wú)線射頻讀卡機(jī)讀取卡片信息后,通過(guò)485接口把數(shù)據(jù)(產(chǎn)品約定的格式)傳送到單片機(jī),單片機(jī)處理后編碼通過(guò)串口轉(zhuǎn)成IP發(fā)送給服務(wù)器管理平臺(tái),管理平臺(tái)驗(yàn)證之后把指令回傳給單片機(jī),由單片機(jī)根據(jù)指令輸出控制。下位機(jī)與上位機(jī)通訊至關(guān)重要,為使下位機(jī)與上位機(jī)進(jìn)行有效的
交互,自定義了一種通訊規(guī)范,為上位機(jī)及單片機(jī)的有關(guān)編程提供依據(jù)。部分規(guī)定定義如表1。
表1 下位機(jī)與上位機(jī)部分通訊規(guī)范
軟件管理平臺(tái)采用動(dòng)態(tài)鏈接庫(kù),提供了諸多API接口,在二次開(kāi)發(fā)接口的設(shè)計(jì)和實(shí)現(xiàn)中,大大降低了開(kāi)發(fā)的難度,用戶自定義的接口協(xié)議形式,是一種更靈活的通訊方式,同時(shí)也是按一定的原則基本上實(shí)現(xiàn)的,它為上位機(jī)和下位機(jī)的通訊編程提供依據(jù)。
3.2軟件接口實(shí)例說(shuō)明
該例子是兩個(gè)軟件管理平臺(tái)之間數(shù)據(jù)傳送。在開(kāi)發(fā)項(xiàng)目中有一個(gè)內(nèi)容是在兩地的不同單位設(shè)計(jì)建立兩套軟件平臺(tái),其中1套負(fù)責(zé)收集相關(guān)的資訊信息,另外1套作為用戶,通過(guò)互聯(lián)網(wǎng)傳送數(shù)據(jù),由于兩套軟件各自采用不同的語(yǔ)言及架構(gòu),雙方為了通訊數(shù)據(jù),采用Web Service接口,該接口能使運(yùn)行在不同機(jī)器上的不同應(yīng)用無(wú)須借助附加的、專門的第三方軟件或硬件,就可相互交換數(shù)據(jù)或集成。依據(jù)Web Service規(guī)范實(shí)施的應(yīng)用之間,無(wú)論它們所使用的語(yǔ)言、平臺(tái)或內(nèi)部協(xié)議是什么,都可以相互交換數(shù)據(jù)。從表面上看,Web Service就是一個(gè)應(yīng)用程序,它向外界暴露出一個(gè)能夠通過(guò)Web進(jìn)行調(diào)用的API。這就是說(shuō),你能夠用編程的方法通過(guò)Web來(lái)調(diào)用這個(gè)應(yīng)用程序。把調(diào)用這個(gè)Web Service的應(yīng)用程序叫做客戶。這種接口開(kāi)發(fā)的優(yōu)勢(shì)在于能夠應(yīng)用程序集成,無(wú)需考慮數(shù)據(jù)交互雙方的系統(tǒng)差異。
3.3軟件遠(yuǎn)程控制設(shè)備實(shí)例
該例子是通過(guò)軟件遠(yuǎn)程控制一臺(tái)調(diào)頻發(fā)射機(jī)工作。例子中調(diào)頻發(fā)射機(jī)也有網(wǎng)管接口,可以通過(guò)軟件控制發(fā)射機(jī)的工作及提取運(yùn)行數(shù)據(jù),這里采用的是Socket進(jìn)行雙向的通信連接實(shí)現(xiàn)數(shù)據(jù)的交換,通過(guò)IP地址和端口來(lái)實(shí)現(xiàn)不同虛擬機(jī)或不同計(jì)算機(jī)之間的通信。Socket的英文原意是“孔”或“插座”,就像在Internet上運(yùn)行的主機(jī)所提供的多種服務(wù),每一種服務(wù)就是一個(gè)“插座”,端口就像是“插座”上的編號(hào),有的“插座”提供220 V的交流電,有的則是110 V的交流電??蛻糁恍枰ㄟ^(guò)不同的“編號(hào)”(即端口),就能得到不同的服務(wù)。
連接發(fā)射機(jī)時(shí)只需要得到發(fā)射機(jī)一端IP和端口,即可建立一個(gè)處于等待連接、實(shí)時(shí)監(jiān)控網(wǎng)絡(luò)狀態(tài)的Socket。在Socket握手成功后,因其雙向通信的特性,在控制調(diào)頻發(fā)射機(jī)的同時(shí),也能得到發(fā)射機(jī)反饋回來(lái)的各類實(shí)時(shí)參數(shù)。同時(shí)本例子中的所有Socket通信其內(nèi)容必須通過(guò)CRC16安全校驗(yàn)才能被認(rèn)為有效。
具體實(shí)現(xiàn):
//1與服務(wù)端建立連接
Socket client = new Socket(“IP”,”端口”);
//2發(fā)送命令
DataOutputStream writer = new DataOutputStream(client.getOutputStream());
writer.write(bufData);
writer.flush();
//3返回值
Input Streambr = client.getInputStream();
//設(shè)置超時(shí)間為10秒
client.setSoTimeout(10*1000);
int totalBytesRcvd = 0;
//數(shù)據(jù)容器
byte[] rdsDate = new byte [“字節(jié)長(zhǎng)度”];
totalBytesRcvd=br.read(rdsDate);
//4以下結(jié)束通信
writer.close();
br.close();
client.close();
return rdsDate;
}
上述代碼為一個(gè)簡(jiǎn)單的Socket通信的步驟,簡(jiǎn)單來(lái)說(shuō)就是
(1)通過(guò)IP和端口建立連接
(2)創(chuàng)建客戶端輸出流,往服務(wù)器發(fā)送命令
(3)創(chuàng)建客戶端輸入流,獲取服務(wù)器接收到請(qǐng)求后的返回值
(4)結(jié)束本次通信,清除輸出流、輸入流。
Socket接口優(yōu)勢(shì)在于傳輸數(shù)據(jù)為字節(jié)級(jí),傳輸數(shù)據(jù)可自定義,應(yīng)用靈活,數(shù)據(jù)量??;傳輸數(shù)據(jù)時(shí)間短,性能高;適合于客戶端和服務(wù)器端之間信息實(shí)時(shí)交互;可以加密數(shù)據(jù),數(shù)據(jù)安全性強(qiáng)。
目前越來(lái)越多的電臺(tái)在技術(shù)系統(tǒng)更新或改造中,都會(huì)考慮日后的升級(jí)性和調(diào)整的方便性,同時(shí)在建設(shè)中可能存在不同商家的開(kāi)發(fā)子系統(tǒng),需要組合來(lái)應(yīng)用。這樣就必須掌握底層的協(xié)議,其中很典型的一個(gè)就是接口協(xié)議,外部的硬件接口很顯然容易掌握和應(yīng)用,但是軟件系統(tǒng)的接口則有不同的協(xié)議或編寫格式。接口的開(kāi)發(fā),意味著能夠拿到二次開(kāi)發(fā)的工具,能夠通過(guò)自己或第三方根據(jù)開(kāi)放的接口進(jìn)行進(jìn)一步的系統(tǒng)改造升級(jí),這樣對(duì)于系統(tǒng)的改進(jìn),具有很重要的價(jià)值,可以實(shí)現(xiàn)類似SOA架構(gòu)的模塊擴(kuò)展,滿足系統(tǒng)不斷擴(kuò)展升級(jí)的需求。
廣播技術(shù)包含諸多種類,新技術(shù)的應(yīng)用,系統(tǒng)升級(jí)或補(bǔ)充完善是常態(tài)化的。解決系統(tǒng)的封閉性,為了更符合實(shí)際應(yīng)用要求,更具有使用保障性和后期升級(jí)空間,開(kāi)放的接口越來(lái)越受到重視。二次開(kāi)發(fā)更是掌握主動(dòng)的辦法,突出體現(xiàn)了實(shí)用性和擴(kuò)展性,接口技術(shù)的應(yīng)用給二次開(kāi)發(fā)提供了良好的連接橋梁。因此掌握好這些通信接口協(xié)議技術(shù),是技術(shù)深度、廣度開(kāi)發(fā)應(yīng)用的必不可少的技術(shù)工具,在技術(shù)開(kāi)發(fā)上體現(xiàn)出越來(lái)越重要的作用。