1.引言
目前,隨著時代的發(fā)展,人們對工業(yè)控制可靠性和操作簡易性的要求越來越高。但是以往使用的微機或單片機獨立運行的系統(tǒng)不能很好協(xié)調(diào)用戶的這些需求。
普通的微機用于控制或?qū)嶒灡O(jiān)測等一般是采取加插擴展卡,系統(tǒng)軟件是在windows系統(tǒng)下編程實現(xiàn)。其優(yōu)點是界面友好,可視性強,操作簡便直觀,有許多標(biāo)準(zhǔn)的軟件可供選擇,編程環(huán)境好。
缺點是可靠性差,硬件的插接牢固性和系統(tǒng)抗干擾性都比較差,軟件運行的win機制是一個多任務(wù)系統(tǒng),不當(dāng)?shù)牟僮骰虺绦騿栴}可能導(dǎo)致死機。一旦死機,微機便失去了輸出通道的數(shù)據(jù)更新,而輸出通道一般都具有鎖存功能,將長期保持原來的狀態(tài)。如果不采取措施,容易出現(xiàn)危險。比如用D/A板多路加熱或流量調(diào)節(jié),故障后稍許延時就會導(dǎo)致系統(tǒng)環(huán)境過熱或則超調(diào),在無人看管的情況下就會導(dǎo)致事故發(fā)生。
單片機嵌入式系統(tǒng)用于控制的可靠性很高,控制輸出通道一般不會出現(xiàn)問題,而且它還具有低電壓、低功耗和體積小等優(yōu)點。但它的缺點在于軟件功能簡單和顯示界面單調(diào),人機交互功能較差,難以滿足人們更高的要求。
在嵌入式系統(tǒng)中為了提高系統(tǒng)的可靠性,采用了一種稱為看門狗的裝置。所謂的看門狗,實質(zhì)上是一個定時器。它和CPU并行工作,基本不占用系統(tǒng)時間。在系統(tǒng)正常運行時,CPU在每隔一個預(yù)制的時間給該裝置清零,使它重新計數(shù),以表示正常工作。當(dāng)出現(xiàn)故障時,CPU不能定時給它清零,看門狗超時并產(chǎn)生中斷,強迫單片機進入復(fù)位狀態(tài),使CPU從硬件或軟件的故障中解脫出來。借鑒嵌入式系統(tǒng)中硬件看門狗的思想在微機工作時可以與單片機進行通信,用單片機來控制輸出通道,通信喪失一段時間以后單片機系統(tǒng)自動進入緊急處理程序,將輸出通道的模擬量調(diào)至初始化時預(yù)置的安全值,將開關(guān)量關(guān)閉或接通,即便是無人發(fā)現(xiàn)故障,也不會發(fā)生事故。一旦通信恢復(fù),單片機可接收微機指令,恢復(fù)輸出,或按自身的程序恢復(fù)。整個系統(tǒng)設(shè)計的結(jié)構(gòu)框圖如圖1:

2.系統(tǒng)組成
微機與單片機間采用串口通信。單片機直接控制全部輸出通道,微機不擴接硬件,靠軟件指令串行輸出,單片機譯碼后控制輸出通道,一旦重復(fù)出現(xiàn)聯(lián)絡(luò)碼丟失,單片機啟動安全模式。
本設(shè)計的輸出通道,共包括了上面圖1中提到的三種主要通道,分別如下:
2.1 D/A轉(zhuǎn)換模擬量控制通道
這種信號量可用于模擬量驅(qū)動的各種儀表及直流伺服機構(gòu)。系統(tǒng)中使用的D/A轉(zhuǎn)換器,是具有8位分辨率和兩級數(shù)據(jù)緩沖器的DAC0832。它可以實現(xiàn)多通道D/A轉(zhuǎn)換的同步輸出,有雙緩沖、單緩沖、直通三種工作模式。本系統(tǒng)采用雙通道雙緩沖同步輸出工作方式。兩路DAC0832的片選分別由P2.5和P2.6來選通,它們的 和 端由單片機的 引腳同時控制,用P3.3引腳控制兩路DA轉(zhuǎn)換器的 選擇信號。這樣輸出數(shù)據(jù)時先根據(jù)片選信號和 信號分別選通兩路轉(zhuǎn)換的第一級緩沖,再用P3.3同時選通所有D/A的第二級緩沖,達到同時選通的效果。
2.2 開關(guān)量控制通道
在實際的嵌入式系統(tǒng)中使用最多的就是開關(guān)量的控制。例如各種接點的通斷,信號燈的亮滅等。在單片機系統(tǒng)中,開關(guān)量都是通過單片機的I/O口或擴展I/O口輸出的。標(biāo)準(zhǔn)的TTL門電路在0電平時的吸收電流約為16mA,對于一些小型功率開關(guān),直接采用I/O接口或采用增加I/O接口的驅(qū)動能力即可。但對于那些大功率開關(guān)(如繼電器、電機、電磁開關(guān)等)單片機通常不足以直接驅(qū)動,需要擴接大功率開關(guān)接口電路。本設(shè)計系統(tǒng)中采用最為簡單的功率晶體管來驅(qū)動。
2.3 數(shù)字量控制通道
該通道用于給各種數(shù)字儀表或顯示終端提供信息。

系統(tǒng)原理圖如圖2所示,微機與單片機間采用RS232C通信標(biāo)準(zhǔn)。因為傳輸距離較近不需要通過調(diào)制解調(diào)器,只采用比較簡單的3線連接,即TXD、RXD、GND。RS232與TTL電平轉(zhuǎn)換的工作由MAX232來實現(xiàn)。在單片機部分,P0—P7作為D/A轉(zhuǎn)換的數(shù)據(jù)線,P2.5、P2.6連接DAC0832的片選端,用P2.4控制開關(guān)量輸出,P2.3引腳作為數(shù)字量信號輸出。
3.提高可靠性的方法
3.1 X25045
為了保證單片機控制部分本身的可靠性,系統(tǒng)中增加了X25045器件。X25045由美國Xicor公司生產(chǎn),兼有看門狗定時器、復(fù)位定時器和EEPROM三種功能??撮T狗定時器對微處理器提供了獨立的保護系統(tǒng),一旦出現(xiàn)故障,RESET做出響應(yīng);Vcc監(jiān)測電路可使系統(tǒng)不會出現(xiàn)低電壓工作狀態(tài),當(dāng)電壓下降到最小工作值以下時,系統(tǒng)復(fù)位,直到Vcc返回穩(wěn)定值。另外X25045采用簡單的SPI總線工作方式,具有256字節(jié)的串行EEPROM,可以作為單片機的外部擴展存儲器。以下是X25045的各種功能子程序:
置X25045寫使能子程序:
WREN_CMD: CLR SCK ;給出時鐘下降沿
NOP ;降低X25045的工作頻率V
CLR CS ;片選中X25045
MOV A,#WREN_INST ;將寫使能指令給A(06H)
ACALL OUTBYT ;調(diào)輸出字節(jié)給X25045子程序
CLR SCK ;再給出時鐘下降沿
SETB CS ;片不選中X25045
RET
置X25045寫不使能子程序 :
WRDI_CMD: CLR SCK ;給出時鐘下降沿
NOP ;降低X25045的工作頻率V
CLR CS ;片選中X25045
MOV A,#WRDI_INST ;將寫不使能指令給A(04H)
ACALL OUTBYT ;調(diào)輸出字節(jié)給X25045子程序
CLR SCK ;再給出時鐘下降沿
SETB CS ;片不選中X25045
RET
寫進X25045中的狀態(tài)寄存器,設(shè)定看門狗延時1.4S子程序
WRSR_CMD: CLR SCK ;給出時鐘下降沿
NOP ;降低X25045的工作頻率V
CLR CS ;片選中X25045
MOV A,#WRSR_INST ;將寫狀態(tài)寄存器指令給A(01H)
ACALL OUTBYT ;調(diào)輸出字節(jié)給X25045子程序
MOV A,#STATUS_REG ;將寫狀態(tài)寄存器數(shù)據(jù)給A(00H,1.4S,無塊保護)
ACALL OUTBYT ;調(diào)輸出字節(jié)給X25045子程序
CLR SCK ;再給出時鐘下降沿
SETB CS ;片不選中X25045
ACALL WIP_POLL ;調(diào)數(shù)據(jù)未寫好查詢等待子程序
RET
讀出X25045中的狀態(tài)寄存器內(nèi)容(查詢寫好標(biāo)志位)子程序:
RDSR_CMD: CLR SCK ;給出時鐘下降沿
CLR CS ;片選中X25045
MOV A,#RDSR_INST ;將讀狀態(tài)寄存器指令給A(05H)
ACALL OUTBYT ;調(diào)輸出字節(jié)給X25045子程序
ACALL INBYT ;調(diào)讀入X25045輸出內(nèi)容子程序
CLR SCK ;再給出時鐘下降沿
SETB CS ;片不選中X25045
RET
寫進X25045中的EEPROM一個單個字節(jié)子程序:
BYTE_WRITE: CLR SCK ;給出時鐘下降沿
CLR CS ;片選中X25045
MOV A,#WRITE_INST ;將寫X25045 EEPROM的指令給A(02H)
ACALL OUTBYT ;調(diào)輸出字節(jié)給X25045子程序
MOV A,R0 ;將要寫進EEPROM 的單元地址號給A
ACALL OUTBYT ;調(diào)輸出字節(jié)給X25045子程序
MOV A,R2 ;將要寫進EEPROM 該單元地址的數(shù)據(jù)給A
ACALL OUTBYT ;調(diào)輸出字節(jié)給X25045子程序
CLR SCK ;再給出時鐘下降沿
SETB CS ;不選中X25045
ACALL WIP_POLL ;調(diào)數(shù)據(jù)未寫好查詢等待子程序
RET
從X25045的EEPROM中讀出一個字節(jié)子程序:
BYTE_READ: CLR SCK ;給出時鐘下降沿
CLR CS ;片選中X25045
MOV A,#READ_INST ;將讀X25045 EEPROM的指令給A(03H)
ACALL OUTBYT ;調(diào)輸出字節(jié)給X25045子程序
MOV A,R0 ;將需要讀EEPROM 單元的地址號給A
ACALL OUTBYT ;調(diào)輸出字節(jié)給X25045子程序
ACALL INBYT ;調(diào)讀入X25045輸出內(nèi)容子程序
CLR SCK ;再給出時鐘下降沿
SETB CS ;片不選中X25045
RET
復(fù)位看門狗定時器子程序:
RST_WDOG: CLR EA ;關(guān)中斷V
CLR CS ;片選中X25045
SETB CS ;片不選中X25045
SETB EA ;開中斷V
RET
未寫好循環(huán)查詢等待子程序:
WIP_POLL: MOV B,#MAX_POLL ;將最大循環(huán)等待變量給B
WIP_POLL1: ACALL RDSR_CMD ;調(diào)讀X25045中的SR內(nèi)容(查詢寫好標(biāo)志位)子程序
JNB ACC.0,WIP_POLL2 ;寫好標(biāo)志位有效(為0),轉(zhuǎn)下
DJNZ B,WIP_POLL1 ;未到最大循環(huán)等待次數(shù),轉(zhuǎn)上繼續(xù)
SJMP WIP_OUT ;已到最大等待次數(shù),轉(zhuǎn)出
WIP_POLL2: SETB 00H ;置位寫好標(biāo)志位(1)有效
WIP_OUT: NOP ;轉(zhuǎn)出口
RET
從ACC移(輸)出字節(jié)給X25045子程序:
OUTBYT: MOV R3,#08H ;共移出8位(D0——D7)循環(huán)變量
OUTBYT1: CLR SCK ;給出時鐘下降沿
RLC A ;ACC最高位移到C
MOV SI,C ;C傳給輸出口線
NOP ;降低X25045的工作頻率V
SETB SCK ;給出時鐘上升沿存入
DJNZ R3,OUTBYT1 ;未移出8位,轉(zhuǎn)上繼續(xù)
CLR SI ;置輸出口線為低
RET
從X25045的EEPROM中接收一個字節(jié)到ACC:
INBYT: MOV R3,#08H ;共移入8位(D0——D7)循環(huán)變量
INBYT1: SETB SCK ;給出時鐘上升沿
CLR SCK ;給出時鐘下降沿
MOV C,SO ;位數(shù)據(jù)從輸入口線傳給C
RLC A ;C移進ACC的最低位
DJNZ R3,INBYT1 ;未移入8位,轉(zhuǎn)上繼續(xù)
RET
3.2 CRC校驗
信號在物理信道中傳輸時,線路本身電器特性造成的隨機噪聲、信號幅度的衰減、頻率和相位的畸變、電器信號在線路上產(chǎn)生反射造成的回音效應(yīng)、相鄰線路間的串?dāng)_以及各種外界因素(如大氣中的閃電、開關(guān)的跳火、外界強電流磁場的變化、電源的波動等)都會造成信號的失真。在數(shù)據(jù)通信中,將會使接受端收到的二進制數(shù)位和發(fā)送端實際發(fā)送的二進制數(shù)位不一致,從而造成由“0”變成“1”或由“1”變成“0”的差錯。在一個使用的通信系統(tǒng)中要能夠發(fā)現(xiàn)這種差錯,并把差錯限制在技術(shù)要求允許的技術(shù)范圍內(nèi)。CRC(Cyclic Redundancy Code循環(huán)冗余碼),也稱多項式編碼。這種編碼檢錯效率高,原理簡單,易于實現(xiàn),是目前在數(shù)字通信領(lǐng)域應(yīng)用最為廣泛的一種檢驗碼。8位CRC碼的標(biāo)準(zhǔn)有CDT約定,其檢驗式為 ;16位的標(biāo)準(zhǔn)有CCITT(國際電報電話委員會推薦)標(biāo)準(zhǔn) ,和IBM提出的CRC-16標(biāo)準(zhǔn) ;檢驗錯誤效率最高的是具有32位CRC檢驗碼的CRC-32標(biāo)準(zhǔn),它的檢驗多項式為 。本設(shè)計采用較為簡單的8位CDT標(biāo)準(zhǔn)。實現(xiàn)CRC校驗有多種方法,一種是靠硬件電路來實現(xiàn)的;另一種方法是對類似SIO的大規(guī)模集成電路編程;還有一種是在單片機上編程實現(xiàn)。最簡單的編程思想是用查表的辦法。對于89C51系列的單片機來說,一般都有4KB以上的ROM,建立8位CRC的檢驗碼表共需要256個字節(jié),在程序存儲器的容量上是完全滿足要求的。發(fā)送端根據(jù)需要發(fā)送的信息碼查表求得校驗冗余碼,一起發(fā)送給接收端。接收端根據(jù)接收到的信息碼查詢校驗碼,查得的結(jié)果與接收的校驗碼比較,如果兩者相等,代表傳輸正確。以下給出8位CDT約定的校驗碼查詢程序。如果需要更高精度的校驗,可以采用16位或則32位校驗程序。
CRC: MOV A,R2;
ANL A,#80H;
CJNE A,#00H,TT1;
TT0: MOV A,R2;
MOV DPTR,#TABLE0;
MOVC A,@A+DPTR;
MOV R3,A;
AJMP STOP;
TT1: MOV A,R2;
ANL A,#3FH;
MOV DPTR,#TABLE1;
MOVC A,@A+DPTR;
MOV R3,A;
STOP: RET
TABLE0: DB 00H,03H,06H,05H,0cH,0fH,0aH,09H,18H,1bH,1eH,1dH,14H,17H,12H,11H
DB 30H,33H,36H,35H,3cH,3fH,3aH,39H,28H,2bH,2eH,2dH,24H,27H,22H,21H
DB 60H,63H,66H,65H,6cH,6fH,6aH,69H,78H,7bH,7eH,7dH,74H,77H,72H,71H
DB 50H,53H,56H,55H,5cH,5fH,5aH,59H,48H,4bH,4eH,4dH,44H,47H,42H,41H
DB c0H,c3H,c6H,c5H,ccH,cfH,caH,c9H,d8H,dbH,deH,ddH,d4H,d7H,d2H,d1H
DB f0H,f3H,f6H,f5H,fcH,ffH,faH,f9H,e8H,ebH,eeH,edH,e4H,e7H,e2H,e1H
DB a0H,a3H,a6H,a5H,acH,afH,aaH,a9H,b8H,bbH,beH,bdH,b4H,b7H,b2H,b1H
DB 90H,93H,96H,95H,9cH,9fH,9aH,99H,88H,8bH,8eH,8dH,84H,87H,82H,81H
TABLE1: DB 83H,80H,85H,86H,8fH,8cH,89H,8aH,9bH,98H,9dH,9eH,97H,94H,91H,92H
DB b3H,b0H,b5H,b6H,bfH,bcH,b9H,baH,abH,a8H,adH,aeH,a7H,a4H,a1H,a2H
DB e3H,e0H,e5H,e6H,efH,ecH,e9H,eaH,fbH,f8H,fdH,feH,f7H,f4H,f1H,f2H
DB d3H,d0H,d5H,d6H,dfH,dcH,d9H,daH,cbH,c8H,cdH,ceH,c7H,c4H,c1H,c2H
DB 43H,40H,45H,46H,4fH,4cH,49H,4aH,5bH,58H,5dH,5eH,57H,54H,51H,52H
DB 73H,70H,75H,76H,7fH,7cH,79H,7aH,6bH,68H,6dH,6eH,67H,64H,61H,62H
DB 23H,20H,25H,26H,2fH,2cH,29H,2aH,3bH,38H,3dH,3eH,37H,34H,31H,32H
DB 13H,10H,15H,16H,1fH,1cH,19H,1aH,0bH,08H,0dH,0eH,07H,04H,01H,02H
3.3 組態(tài)軟件
為了監(jiān)測上位機部分的可靠性,在系統(tǒng)中可以應(yīng)用組態(tài)軟件來實現(xiàn)。由于組態(tài)軟件具有完善的圖形編輯功能,可以提供多種數(shù)據(jù)類型和命令語言,支持控件和控件函數(shù),還配置了大量的各種I/O和工控板卡驅(qū)動程序,支持網(wǎng)絡(luò)通信。使用組態(tài)軟件可以用清晰準(zhǔn)確的畫面描述工業(yè)控制現(xiàn)場,及時的反映現(xiàn)場的操作狀態(tài)和數(shù)據(jù)信息;設(shè)定監(jiān)控和報警信號;顯示實時趨勢曲線和歷史趨勢曲線。因為具有這些優(yōu)點,組態(tài)軟件在當(dāng)今的工控領(lǐng)域大量被使用。
各種組態(tài)軟件都提供了多種板卡、DDE設(shè)備、PLC、變頻器、智能儀表及模塊的驅(qū)動,可以方便的與這些外部設(shè)備連接。本次設(shè)計系統(tǒng)中,我們采用了中泰公司的PC6000系列的PC6313板卡。這種板卡帶有12位32路AD通道(單端)和2路DA通道,以及24路的I/O口。設(shè)計中定時讓單片機通過它的I/O口發(fā)送一個數(shù)字量給板卡,微機系統(tǒng)接收到信號以后通過組態(tài)軟件進行處理,再返回給信號給單片機,單片機中檢查收到的數(shù)據(jù)是不是和設(shè)想的結(jié)果一致,如果結(jié)果正確,表明上位機和下位機整個系統(tǒng)運行正常,這就達到了監(jiān)控微機的效果。這種方法適合帶有輸入輸出的各種板卡。如不是組態(tài)軟件中提供的通用器件,可自行編寫驅(qū)動程序。
3.4 多線程技術(shù)
多任務(wù)是Microsoft Windows和Microsoft NT操作系統(tǒng)的一大特色,即可以同時執(zhí)行多個應(yīng)用程序。對于應(yīng)用程序的開發(fā)者而言,多任務(wù)的實質(zhì)是能建立有多個進程的應(yīng)用程序和建立使用不止一個執(zhí)行線程的進程。
將聯(lián)絡(luò)碼作為一個線程插入到主程序的過程中,聯(lián)絡(luò)碼可由任何口線輸出給單片機系統(tǒng),單片機在微機出現(xiàn)故障的時候選擇安全輸出模式,以設(shè)定好的方式接管外部的控制。此種方法,通用性很強,不需外接硬件。