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