晏密英 吳舒辭
隨著計算機控制技術的發(fā)展,各專業(yè)公司推出了許多種總線型的工業(yè)控制卡,其中,大多數(shù)都是ISA及PCI并行接口的。雖然,這些I/O控制卡的速度快,實時性也高,但在很多控制系統(tǒng)中不太適用。原因有三個方面,其一是這些卡的操作復雜,靈活性不太好,使用卡的人必須編制相應的驅(qū)動程序去控制卡的運行,而且在Windows界面下的編程也很復雜;其二,各種I/O控制卡的價格昂貴;其三,大多數(shù)PC提供多種插槽,但那些超薄型計算機,如便攜式電腦和嵌入式電腦并沒有控制卡的空間和擴展槽的位置,故不能用這些電腦實現(xiàn)I/O卡控制。本文介紹一種含RS-232接口的I/O板卡,將計算機串口進行二次開發(fā),用于工業(yè)現(xiàn)場控制系統(tǒng),代替控制卡的作用,并提供相應的驅(qū)動程序,具有成本低、操作簡單、兼容性好等優(yōu)點。
系統(tǒng)功能簡介
本I/O卡主要用于需要采用計算機在工業(yè)現(xiàn)場進行控制的場合,主要功能如下:提供11路12位的A/D轉(zhuǎn)換、4路12位的D/A轉(zhuǎn)換、16路帶光電隔離的開關量輸出、16路帶光電隔離的開關量輸入及1路16位計數(shù)器輸入;提供一個帶光電隔離的RS-232接口,上位機(通常指PC)能通過此端口對本卡上所有的資源進行控制與讀入;另擴展一片8255,其PA、PB口作為輸入端用,PC口作為本控制卡的一些設置,如用它作為波特率等的設置;本卡還可由DS12C887完成日期、時間、星期的設置、調(diào)整和輸出。本文主要就系統(tǒng)硬件電路的設計(包括地址譯碼)及軟件設計(通訊協(xié)議為主)來對系統(tǒng)的功能進行描述。
硬件電路設計
本控制卡原理框圖如圖1所示。其中,微控制器采用美國ATMEL公司的AT89C51,它內(nèi)部有4K的程序存貯器,可以為本板卡節(jié)省空間,同時擴展一片數(shù)據(jù)存貯器62256芯片(32K)及X25045(512×8bits)看門狗電路構成基本的單片機系統(tǒng)。考慮到在一般的工業(yè)控制系統(tǒng)中,由于對A/D、D/A轉(zhuǎn)換的速度不太高,所以本卡中的A/D轉(zhuǎn)換采用TLC2543,它是TI公司生產(chǎn)的帶串行控制的11路12位A/D轉(zhuǎn)換器件,能對0~5V信號進行12位轉(zhuǎn)換;D/A轉(zhuǎn)換器采用TI公司的雙路12位串行接口的D/A轉(zhuǎn)換芯片TLC5618。為了適合更多的工業(yè)控制要求,本控制卡目前使用了兩片TLC5618,共可以輸出4路模擬量。為了提高抗干擾能力,對輸入輸出端口采用TL521-4進行光電隔離。RS-232接口采用MAXIM公司的MAX232芯片作為電平轉(zhuǎn)換,實現(xiàn)單片機的TTL電平與計算機的RS-232電平的轉(zhuǎn)換。同時為了提高整個系統(tǒng)的工作穩(wěn)定性,對RS-232通訊口進行光電隔離。由于系統(tǒng)通訊速度可能要求比較高,所以采用了高速光耦6N137作為隔離元件,同時增加一個DC-DC變換器,產(chǎn)生隔離電源,供隔離后的電路使用(如圖2所示)。在本卡中,P1用于對一些串行接口的芯片進行控制,為了節(jié)省口線,對公共的CLK、DI、DO線公用,組成一條串行總線系統(tǒng),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語言設計,串行口的接收采用中斷方式,串口發(fā)送采用查詢方式,當收到一個完整的指令后,由中斷程序置一標志,主程序檢測到這一標志后,對收到的指令進行處理,主程序框圖如圖4所示。
為了本控制卡使用方便,我們制定了一套較為完善的通訊協(xié)議。協(xié)議規(guī)定每一條指令或返回數(shù)據(jù)由以下幾部分組成。
第一字節(jié):為一幀數(shù)據(jù)的長度,以字節(jié)為單位,指第二字節(jié)到最后一個字節(jié)的字節(jié)總數(shù)。
第二字節(jié):一個表示數(shù)據(jù)或指令類型的ASCII碼,“D”表示開關量,“A”表示模擬量,“T”表示計算返回的值。
第三字節(jié):一個表示輸入輸出類型的ASCII碼?!癘”表示輸出,“I”表示輸入。
最后字節(jié):表示除第一字節(jié)和最后一字節(jié)外的校驗和,取低8位。
中間的其余字節(jié)為數(shù)據(jù)內(nèi)容,表示模擬量時為模擬量的二進制值,表示開關量時為開關量的狀態(tài)。在通訊時,接收方如正確接收則返回1AH,否則返回1CH,請求重發(fā)。具體的指令設置包括有以下幾種情況:
讀開關量狀態(tài) 格式:字節(jié)數(shù) “D”“I”;響應:字節(jié)數(shù) “D” “I” “FFFF”,其中,F(xiàn)FFF為2個字節(jié),分別對應16路開關量的狀態(tài),為“1”時表示有電壓輸入。
寫開關量狀態(tài)格式:字節(jié)數(shù)“D”“O”“N”“M”;響應:無;N(00H~0FH)表示通道號;M表示狀態(tài),0表示無輸出;當N=FF時,表示對所有通道進行操作,此時M為16位(兩字節(jié))。
讀A/D格式:字節(jié)長“A” “I” “N”;響應:字節(jié)長 “A” “I” “N” “FFFF”;N為A/D通道號;FFFF為雙字節(jié),是A/D轉(zhuǎn)換的結果,高4位在前,低8位在后。
寫D/A 格式:字節(jié)長 “D” “I” “N” “FFFF”;響應:無;FFFF為雙字節(jié),是D/A轉(zhuǎn)換的結果,高4位在前,低8位在后。
讀計數(shù)器格式:字節(jié)長 “T” “I”;響應:字節(jié)長 “T” “I” “FFFF”;FFFF為計數(shù)結果。
啟動計數(shù)功能格式:字節(jié)長 “T” “S”;響應:無,在此協(xié)議的基礎上,我們還可以設置一些其它指令,但需要在控制卡運行相應的程序。
應用
本控制卡價格低廉,使用方便,無需打開計算機裝卡。這樣,在工業(yè)控制現(xiàn)場,用一臺筆記本電腦就可以很方便地調(diào)試系統(tǒng),且可以利用許多現(xiàn)成的串口通訊控件,如VB中的MSCOMM控件,VC中的Microsoft Communication Control這一Active類控件來很方便地編寫應用程序。