晏密英 吳舒辭
隨著計算機控制技術的發展,各專業公司推出了許多種總線型的工業控制卡,其中,大多數都是ISA及PCI并行接口的。雖然,這些I/O控制卡的速度快,實時性也高,但在很多控制系統中不太適用。原因有三個方面,其一是這些卡的操作復雜,靈活性不太好,使用卡的人必須編制相應的驅動程序去控制卡的運行,而且在Windows界面下的編程也很復雜;其二,各種I/O控制卡的價格昂貴;其三,大多數PC提供多種插槽,但那些超薄型計算機,如便攜式電腦和嵌入式電腦并沒有控制卡的空間和擴展槽的位置,故不能用這些電腦實現I/O卡控制。本文介紹一種含RS-232接口的I/O板卡,將計算機串口進行二次開發,用于工業現場控制系統,代替控制卡的作用,并提供相應的驅動程序,具有成本低、操作簡單、兼容性好等優點。
系統功能簡介
本I/O卡主要用于需要采用計算機在工業現場進行控制的場合,主要功能如下:提供11路12位的A/D轉換、4路12位的D/A轉換、16路帶光電隔離的開關量輸出、16路帶光電隔離的開關量輸入及1路16位計數器輸入;提供一個帶光電隔離的RS-232接口,上位機(通常指PC)能通過此端口對本卡上所有的資源進行控制與讀入;另擴展一片8255,其PA、PB口作為輸入端用,PC口作為本控制卡的一些設置,如用它作為波特率等的設置;本卡還可由DS12C887完成日期、時間、星期的設置、調整和輸出。本文主要就系統硬件電路的設計(包括地址譯碼)及軟件設計(通訊協議為主)來對系統的功能進行描述。

硬件電路設計
本控制卡原理框圖如圖1所示。其中,微控制器采用美國ATMEL公司的AT89C51,它內部有4K的程序存貯器,可以為本板卡節省空間,同時擴展一片數據存貯器62256芯片(32K)及X25045(512×8bits)看門狗電路構成基本的單片機系統。考慮到在一般的工業控制系統中,由于對A/D、D/A轉換的速度不太高,所以本卡中的A/D轉換采用TLC2543,它是TI公司生產的帶串行控制的11路12位A/D轉換器件,能對0~5V信號進行12位轉換;D/A轉換器采用TI公司的雙路12位串行接口的D/A轉換芯片TLC5618。為了適合更多的工業控制要求,本控制卡目前使用了兩片TLC5618,共可以輸出4路模擬量。為了提高抗干擾能力,對輸入輸出端口采用TL521-4進行光電隔離。RS-232接口采用MAXIM公司的MAX232芯片作為電平轉換,實現單片機的TTL電平與計算機的RS-232電平的轉換。同時為了提高整個系統的工作穩定性,對RS-232通訊口進行光電隔離。由于系統通訊速度可能要求比較高,所以采用了高速光耦6N137作為隔離元件,同時增加一個DC-DC變換器,產生隔離電源,供隔離后的電路使用(如圖2所示)。在本卡中,P1用于對一些串行接口的芯片進行控制,為了節省口線,對公共的CLK、DI、DO線公用,組成一條串行總線系統,P13、P14、P15、P16分別為各芯片的片選信號。具體接法如圖3所示。

本控制卡由ATF16V8可編程邏輯芯片負責地址譯碼。62256地址為0~7FFFH,其片選信號直接接地址線A15。8255基地址FF00H,其片選信號 CS=A8+A9+A10+A11+A12+A13+A14+A15;2片輸出口擴展74LS377地址分別為FB00H和FC00H,其片選信號為CS1=A15+A14+A13+A12+A11+A10+A9+A8;CS2=A15+A14+A13+A12+A11+A10+A9+A8。
軟件設計
本卡軟件采用C語言設計,串行口的接收采用中斷方式,串口發送采用查詢方式,當收到一個完整的指令后,由中斷程序置一標志,主程序檢測到這一標志后,對收到的指令進行處理,主程序框圖如圖4所示。
為了本控制卡使用方便,我們制定了一套較為完善的通訊協議。協議規定每一條指令或返回數據由以下幾部分組成。

第一字節:為一幀數據的長度,以字節為單位,指第二字節到最后一個字節的字節總數。
第二字節:一個表示數據或指令類型的ASCII碼,“D”表示開關量,“A”表示模擬量,“T”表示計算返回的值。
第三字節:一個表示輸入輸出類型的ASCII碼。“O”表示輸出,“I”表示輸入。
最后字節:表示除第一字節和最后一字節外的校驗和,取低8位。
中間的其余字節為數據內容,表示模擬量時為模擬量的二進制值,表示開關量時為開關量的狀態。在通訊時,接收方如正確接收則返回1AH,否則返回1CH,請求重發。具體的指令設置包括有以下幾種情況:
讀開關量狀態 格式:字節數 “D”“I”;響應:字節數 “D” “I” “FFFF”,其中,FFFF為2個字節,分別對應16路開關量的狀態,為“1”時表示有電壓輸入。
寫開關量狀態格式:字節數“D”“O”“N”“M”;響應:無;N(00H~0FH)表示通道號;M表示狀態,0表示無輸出;當N=FF時,表示對所有通道進行操作,此時M為16位(兩字節)。

讀A/D格式:字節長“A” “I” “N”;響應:字節長 “A” “I” “N” “FFFF”;N為A/D通道號;FFFF為雙字節,是A/D轉換的結果,高4位在前,低8位在后。
寫D/A 格式:字節長 “D” “I” “N” “FFFF”;響應:無;FFFF為雙字節,是D/A轉換的結果,高4位在前,低8位在后。
讀計數器格式:字節長 “T” “I”;響應:字節長 “T” “I” “FFFF”;FFFF為計數結果。
啟動計數功能格式:字節長 “T” “S”;響應:無,在此協議的基礎上,我們還可以設置一些其它指令,但需要在控制卡運行相應的程序。
應用
本控制卡價格低廉,使用方便,無需打開計算機裝卡。這樣,在工業控制現場,用一臺筆記本電腦就可以很方便地調試系統,且可以利用許多現成的串口通訊控件,如VB中的MSCOMM控件,VC中的Microsoft Communication Control這一Active類控件來很方便地編寫應用程序。