孫誠,王雪梅,張艷紅
(第二炮兵工程學院陜西西安710025)
由于部隊禁止使用USB接口、MiniSD卡、內存卡等方便的數據傳輸通信載體,導彈測試數據都是通過測試設備直接送給打印機進行打印而得到的,而打印機接收到的數據必須要通過打印并口傳送,因此獲取測試計算機的并口數據是解決導彈測試數據信息化建設管理的關鍵問題之一。研究從測試計算機并口獲取數據的方法,不但可以為從測試計算機并口獲取數據做準備,而且可以提高測試數據存儲的速度,實現對老式導彈武器裝備的性能進行及時地監控、調用和跟蹤處理以及預警等。
IEEE委員會在1994年3月公布了新的IEEEl284并行接口標準,對打印機口的5種工作模式逐個進行了定義。這5種模式分別是:Centronies兼容模式(也叫標準SPP模式)、字節(Byte)傳輸模式、半字節(Nibble)傳輸模式、增強型并行端口(EPP)模式和擴展功能型端口(ECP)模式。其中,SPP模式是默認傳輸模式,數據只能正向傳輸,速率達到150 kb/s。打印機是計算機系統的基本輸出設備之一,PC機通過并行口實現對打印機的控制,為保證打印機正常工作,PC機與打印機之間建立了嚴格的通信協議。連接打印機的并行口通常工作在Centronics兼容模式,其他4種模式對并行口引腳定義與該模式完全兼容[1]。
并行打印接口有3組信號,分別存放在3組寄存器中:
1)數據信號,存放于數據寄存器中,占8個引腳,傳輸字符數據(包括控制字符)代碼。數據寄存器占用的端口地址是0x378。
2)狀態信號,存放于狀態寄存器中,占5個引腳,用于向微機傳輸打印機的當前狀態。其中,回執(/ACK)信號表示打印機將數據取入緩沖存儲器。打印機忙碌(BUSY)信號有效時表示打印機不能接收數據,通常為以下幾種情況:①數據輸入時;②打印機動作期間;③脫機狀態;④打印機出錯。無打印紙(PE)信號表示打印機缺紙;打印機在線(ON-LINE)信號有效表示打印機加電啟動;打印機出錯(/ERROR)信號為打印機向微機發送的報錯信號。狀態寄存器占用的端口地址是0x379。
3)控制信號,存放于控制寄存器中,占4個引腳,傳輸微機發向打印機的控制信號。其中,數據選通(/STROBE)信號為讀脈沖信號,加到打印機去能把數據線上代碼置入打印機的緩沖存儲器。選擇輸入(SELECT)信號,該信號有效時,打印機才能接受數據線上的數據和控制信號。自動輸紙(AUTO FEED)信號有效時,當向打印機輸送“回車”代碼,則向前輸紙一行。打印機初始化(/INIT)信號為打印機初始化信號,可使打印機控制器復位,打印機緩沖器清零,該信號應為一脈沖信號。控制寄存器占用的端口地址是0x37A。
打印機并口工作時序如圖1所示,其主要信號有STROBE信號(數據選通信號)、BUSY(數據總線繁忙信號)、ACK(應答信號)和DATA(數據信號,共8條并行I/O線組成)。每當STROBE信號的下降沿出現時,表示并行總線上數據處于有效狀態,可以從總線上讀取數據;BUSY為高電平則表示打印機正“忙”,禁止接收數據,需等待,當打印機取走數據并處理完畢后,BUSY被置低電平,表示數據總線空閑可以進行下一次數據傳送;在BUSY被置為低電平的同時打印機輸出應答脈沖ACK,通知主機可以再次上傳數據。根據以上分析,若要捕獲并行總線上的數據只需要不斷檢測STROBE信號,當它出現下降沿并且此時BUSY為低電平時,可以采集并行總線上的數據,完畢后向計算機反饋ACK信號,通知計算機接收數據完畢,則計算機繼續執行發送任務,打印機等待STROBE信號的下一個下降沿出現。如此循環往復即可實現批量數據接收[2]。

圖1 針式打印機并口工作時序Fig.1 Dot matrix printer parallel port work timing
打印機是一種輸出設備,一般使用并行接口接收數據。任何設備具有標準并行接口即可向打印機送出數據,執行打印操作。為從打印機并行接口讀出打印數據,必須實現一個模擬打印機的信號接口,按照信號時序的要求,根據收到的控制信號接收數據,并要求發出相應的狀態信號。
從打印機時序圖分析后發現,直接通過硬件控制BUSY、ACK和STROBE這3個信號采集打印機并行口的數據并不困難,但由于該打印機還擔負其他工作,所以需要保證在采集數據的同時不影響原有系統正常工作,即在獲取數據的同時還不能夠影響打印機正常工作,因此就不能用取消打印機、簡單采取硬件模擬打印機接收數據的方式捕獲數據。鑒于此,數據采集系統要求在并口數據傳輸過程中采集數據,而且采集后并不影響原有控制信號和數據的傳輸,從而保證輸出到打印機的數據流不被改變,不影響打印機正常工作,其原理如圖2所示。
由于采集數據時涉及到兩個不同系統的連接問題,可能出現阻抗不匹配、信號干擾衰減過重等現象,所以在接口處要加上一定的隔離保護和驅動緩沖電路,防止兩個系統之間出現相互影響,導致原有設備不能正常運轉的情況發生。

圖2 并口數據采集原理圖Fig.2 Parallel data acquisition schematic
采用光電隔離電路的方式好處在于不僅可以從并行總線上旁路獲取數據,而且通過一定的驅動電路,避免了打印總線上數據信號的衰減,保證原有打印系統正常工作,對連接設備端口也起到保護作用。
光電隔離電路的作用是在電隔離的情況下,以光為媒介傳送信號,對輸入和輸出電路進行隔離,因而能有效地抑制系統噪聲,消除接地回路的干擾,避免現場的各種靜電和浪涌信號對其造成的損害。
光電隔離電路采用高速光耦6N137,其內部結構原理如圖3所示。

圖36 N137內部結構原理圖Fig.3 6N137 internal structure diagram
在6N137的輸入端接入計算機USB+5 V電源,和510電阻構成回路,將電信號轉換成光信號,完成光電轉換第一步,在6N137輸出端接入數據采集系統的+5 V電源,以及一個10 kΩ的上拉電阻,完成光信號到電信號的轉換,從而使兩個系統完全被隔離,不會相互影響,保護硬件接口安全。
驅動緩沖芯片選擇74HC245,該芯片不僅能起到緩沖作用,還可以增強驅動能力,避免數據分流后信號衰減,導致打印機和CPU均無法獲取正確數據[3-4]。
通過光電隔離和驅動緩沖電路,就能在不影響計算機傳送到打印機數據的前提下,實現旁路數據采集功能,并且采取光電隔離措施可以充分保護設備口。
目前,利用計算機并口進行數據采集已得到廣泛應用,在Windows98操作系統下可以很容易對硬件進行訪問和控制,但在WindowsXP操作系統下為了提高系統的穩定性,對硬件端口的訪問作了嚴格的控制。為了對并口進行讀寫,Windows XP操作系統仍然保留了-inp()及-outp()函數,采用SPP時序進行通信時就必須采用操作系統的中斷技術。圖4為單片機從并口線上采集數據程序的流程圖,程序由主程序和中斷程序構成[5-6]。
中斷程序代碼:



在調試過程中,用PC機對樣本數據進行發送,本系統進行采集接收,結果令人滿意。由于并口數據采集應用中斷方式工作,因此它具有非常好的實時響應性。下一步將該系統與時裝進行對接,以完成測試數據的接收。
[1]Axelson J.并行端口大全[M].那怡超,譯.北京:中國電力出版社,2001.
[2]張利.PC打印口的原理及應用開發[M].北京:清華大學出版社,1999.
[3]謝庭軍,劉少君,黃道平.EPP模式下的并口與FPGA的高速數據通信[J].控制工程.2008(4):440-442.
XIE Ting-jun,LIU Shao-jun,HUANG Dao-ping.High speed data communication between FPGA and parallel interface in EPP mode[J].Control Engineering of China,2008(4):440-442.
[4]Dhanajay.V.Gadre.并行端口編程[M].韓永彬,袁潮,譯.北京:中國電力出版社,2000.
[5]馬忠梅.單片機的C語言應用程序設計[M].3版.北京:北京航空航天大學出版社,2005.
[6]張現勇.VisualC++并口通訊技術與工程實踐[M]北京:人民郵電出版社,2002.