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