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

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

系統(tǒng)原理圖如圖2所示,微機(jī)與單片機(jī)間采用RS232C通信標(biāo)準(zhǔn)。因?yàn)閭鬏斁嚯x較近不需要通過(guò)調(diào)制解調(diào)器,只采用比較簡(jiǎn)單的3線連接,即TXD、RXD、GND。RS232與TTL電平轉(zhuǎn)換的工作由MAX232來(lái)實(shí)現(xiàn)。在單片機(jī)部分,P0—P7作為D/A轉(zhuǎn)換的數(shù)據(jù)線,P2.5、P2.6連接DAC0832的片選端,用P2.4控制開(kāi)關(guān)量輸出,P2.3引腳作為數(shù)字量信號(hào)輸出。
3.提高可靠性的方法
3.1 X25045
為了保證單片機(jī)控制部分本身的可靠性,系統(tǒng)中增加了X25045器件。X25045由美國(guó)Xicor公司生產(chǎn),兼有看門狗定時(shí)器、復(fù)位定時(shí)器和EEPROM三種功能??撮T狗定時(shí)器對(duì)微處理器提供了獨(dú)立的保護(hù)系統(tǒng),一旦出現(xiàn)故障,RESET做出響應(yīng);Vcc監(jiān)測(cè)電路可使系統(tǒng)不會(huì)出現(xiàn)低電壓工作狀態(tài),當(dāng)電壓下降到最小工作值以下時(shí),系統(tǒng)復(fù)位,直到Vcc返回穩(wěn)定值。另外X25045采用簡(jiǎn)單的SPI總線工作方式,具有256字節(jié)的串行EEPROM,可以作為單片機(jī)的外部擴(kuò)展存儲(chǔ)器。以下是X25045的各種功能子程序:
置X25045寫(xiě)使能子程序:
WREN_CMD: CLR SCK ;給出時(shí)鐘下降沿
NOP ;降低X25045的工作頻率V
CLR CS ;片選中X25045
MOV A,#WREN_INST ;將寫(xiě)使能指令給A(06H)
ACALL OUTBYT ;調(diào)輸出字節(jié)給X25045子程序
CLR SCK ;再給出時(shí)鐘下降沿
SETB CS ;片不選中X25045
RET
置X25045寫(xiě)不使能子程序 :
WRDI_CMD: CLR SCK ;給出時(shí)鐘下降沿
NOP ;降低X25045的工作頻率V
CLR CS ;片選中X25045
MOV A,#WRDI_INST ;將寫(xiě)不使能指令給A(04H)
ACALL OUTBYT ;調(diào)輸出字節(jié)給X25045子程序
CLR SCK ;再給出時(shí)鐘下降沿
SETB CS ;片不選中X25045
RET
寫(xiě)進(jìn)X25045中的狀態(tài)寄存器,設(shè)定看門狗延時(shí)1.4S子程序
WRSR_CMD: CLR SCK ;給出時(shí)鐘下降沿
NOP ;降低X25045的工作頻率V
CLR CS ;片選中X25045
MOV A,#WRSR_INST ;將寫(xiě)狀態(tài)寄存器指令給A(01H)
ACALL OUTBYT ;調(diào)輸出字節(jié)給X25045子程序
MOV A,#STATUS_REG ;將寫(xiě)狀態(tài)寄存器數(shù)據(jù)給A(00H,1.4S,無(wú)塊保護(hù))
ACALL OUTBYT ;調(diào)輸出字節(jié)給X25045子程序
CLR SCK ;再給出時(shí)鐘下降沿
SETB CS ;片不選中X25045
ACALL WIP_POLL ;調(diào)數(shù)據(jù)未寫(xiě)好查詢等待子程序
RET
讀出X25045中的狀態(tài)寄存器內(nèi)容(查詢寫(xiě)好標(biāo)志位)子程序:
RDSR_CMD: CLR SCK ;給出時(shí)鐘下降沿
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 ;再給出時(shí)鐘下降沿
SETB CS ;片不選中X25045
RET
寫(xiě)進(jìn)X25045中的EEPROM一個(gè)單個(gè)字節(jié)子程序:
BYTE_WRITE: CLR SCK ;給出時(shí)鐘下降沿
CLR CS ;片選中X25045
MOV A,#WRITE_INST ;將寫(xiě)X25045 EEPROM的指令給A(02H)
ACALL OUTBYT ;調(diào)輸出字節(jié)給X25045子程序
MOV A,R0 ;將要寫(xiě)進(jìn)EEPROM 的單元地址號(hào)給A
ACALL OUTBYT ;調(diào)輸出字節(jié)給X25045子程序
MOV A,R2 ;將要寫(xiě)進(jìn)EEPROM 該單元地址的數(shù)據(jù)給A
ACALL OUTBYT ;調(diào)輸出字節(jié)給X25045子程序
CLR SCK ;再給出時(shí)鐘下降沿
SETB CS ;不選中X25045
ACALL WIP_POLL ;調(diào)數(shù)據(jù)未寫(xiě)好查詢等待子程序
RET
從X25045的EEPROM中讀出一個(gè)字節(jié)子程序:
BYTE_READ: CLR SCK ;給出時(shí)鐘下降沿
CLR CS ;片選中X25045
MOV A,#READ_INST ;將讀X25045 EEPROM的指令給A(03H)
ACALL OUTBYT ;調(diào)輸出字節(jié)給X25045子程序
MOV A,R0 ;將需要讀EEPROM 單元的地址號(hào)給A
ACALL OUTBYT ;調(diào)輸出字節(jié)給X25045子程序
ACALL INBYT ;調(diào)讀入X25045輸出內(nèi)容子程序
CLR SCK ;再給出時(shí)鐘下降沿
SETB CS ;片不選中X25045
RET
復(fù)位看門狗定時(shí)器子程序:
RST_WDOG: CLR EA ;關(guān)中斷V
CLR CS ;片選中X25045
SETB CS ;片不選中X25045
SETB EA ;開(kāi)中斷V
RET
未寫(xiě)好循環(huán)查詢等待子程序:
WIP_POLL: MOV B,#MAX_POLL ;將最大循環(huán)等待變量給B
WIP_POLL1: ACALL RDSR_CMD ;調(diào)讀X25045中的SR內(nèi)容(查詢寫(xiě)好標(biāo)志位)子程序
JNB ACC.0,WIP_POLL2 ;寫(xiě)好標(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 ;置位寫(xiě)好標(biāo)志位(1)有效
WIP_OUT: NOP ;轉(zhuǎn)出口
RET
從ACC移(輸)出字節(jié)給X25045子程序:
OUTBYT: MOV R3,#08H ;共移出8位(D0——D7)循環(huán)變量
OUTBYT1: CLR SCK ;給出時(shí)鐘下降沿
RLC A ;ACC最高位移到C
MOV SI,C ;C傳給輸出口線
NOP ;降低X25045的工作頻率V
SETB SCK ;給出時(shí)鐘上升沿存入
DJNZ R3,OUTBYT1 ;未移出8位,轉(zhuǎn)上繼續(xù)
CLR SI ;置輸出口線為低
RET
從X25045的EEPROM中接收一個(gè)字節(jié)到ACC:
INBYT: MOV R3,#08H ;共移入8位(D0——D7)循環(huán)變量
INBYT1: SETB SCK ;給出時(shí)鐘上升沿
CLR SCK ;給出時(shí)鐘下降沿
MOV C,SO ;位數(shù)據(jù)從輸入口線傳給C
RLC A ;C移進(jìn)ACC的最低位
DJNZ R3,INBYT1 ;未移入8位,轉(zhuǎn)上繼續(xù)
RET
3.2 CRC校驗(yàn)
信號(hào)在物理信道中傳輸時(shí),線路本身電器特性造成的隨機(jī)噪聲、信號(hào)幅度的衰減、頻率和相位的畸變、電器信號(hào)在線路上產(chǎn)生反射造成的回音效應(yīng)、相鄰線路間的串?dāng)_以及各種外界因素(如大氣中的閃電、開(kāi)關(guān)的跳火、外界強(qiáng)電流磁場(chǎng)的變化、電源的波動(dòng)等)都會(huì)造成信號(hào)的失真。在數(shù)據(jù)通信中,將會(huì)使接受端收到的二進(jìn)制數(shù)位和發(fā)送端實(shí)際發(fā)送的二進(jìn)制數(shù)位不一致,從而造成由“0”變成“1”或由“1”變成“0”的差錯(cuò)。在一個(gè)使用的通信系統(tǒng)中要能夠發(fā)現(xiàn)這種差錯(cuò),并把差錯(cuò)限制在技術(shù)要求允許的技術(shù)范圍內(nèi)。CRC(Cyclic Redundancy Code循環(huán)冗余碼),也稱多項(xiàng)式編碼。這種編碼檢錯(cuò)效率高,原理簡(jiǎn)單,易于實(shí)現(xiàn),是目前在數(shù)字通信領(lǐng)域應(yīng)用最為廣泛的一種檢驗(yàn)碼。8位CRC碼的標(biāo)準(zhǔn)有CDT約定,其檢驗(yàn)式為 ;16位的標(biāo)準(zhǔn)有CCITT(國(guó)際電報(bào)電話委員會(huì)推薦)標(biāo)準(zhǔn) ,和IBM提出的CRC-16標(biāo)準(zhǔn) ;檢驗(yàn)錯(cuò)誤效率最高的是具有32位CRC檢驗(yàn)碼的CRC-32標(biāo)準(zhǔn),它的檢驗(yàn)多項(xiàng)式為 。本設(shè)計(jì)采用較為簡(jiǎn)單的8位CDT標(biāo)準(zhǔn)。實(shí)現(xiàn)CRC校驗(yàn)有多種方法,一種是靠硬件電路來(lái)實(shí)現(xiàn)的;另一種方法是對(duì)類似SIO的大規(guī)模集成電路編程;還有一種是在單片機(jī)上編程實(shí)現(xiàn)。最簡(jiǎn)單的編程思想是用查表的辦法。對(duì)于89C51系列的單片機(jī)來(lái)說(shuō),一般都有4KB以上的ROM,建立8位CRC的檢驗(yàn)碼表共需要256個(gè)字節(jié),在程序存儲(chǔ)器的容量上是完全滿足要求的。發(fā)送端根據(jù)需要發(fā)送的信息碼查表求得校驗(yàn)冗余碼,一起發(fā)送給接收端。接收端根據(jù)接收到的信息碼查詢校驗(yàn)碼,查得的結(jié)果與接收的校驗(yàn)碼比較,如果兩者相等,代表傳輸正確。以下給出8位CDT約定的校驗(yàn)碼查詢程序。如果需要更高精度的校驗(yàn),可以采用16位或則32位校驗(yàn)程序。
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)測(cè)上位機(jī)部分的可靠性,在系統(tǒng)中可以應(yīng)用組態(tài)軟件來(lái)實(shí)現(xiàn)。由于組態(tài)軟件具有完善的圖形編輯功能,可以提供多種數(shù)據(jù)類型和命令語(yǔ)言,支持控件和控件函數(shù),還配置了大量的各種I/O和工控板卡驅(qū)動(dòng)程序,支持網(wǎng)絡(luò)通信。使用組態(tài)軟件可以用清晰準(zhǔn)確的畫(huà)面描述工業(yè)控制現(xiàn)場(chǎng),及時(shí)的反映現(xiàn)場(chǎng)的操作狀態(tài)和數(shù)據(jù)信息;設(shè)定監(jiān)控和報(bào)警信號(hào);顯示實(shí)時(shí)趨勢(shì)曲線和歷史趨勢(shì)曲線。因?yàn)榫哂羞@些優(yōu)點(diǎn),組態(tài)軟件在當(dāng)今的工控領(lǐng)域大量被使用。
各種組態(tài)軟件都提供了多種板卡、DDE設(shè)備、PLC、變頻器、智能儀表及模塊的驅(qū)動(dòng),可以方便的與這些外部設(shè)備連接。本次設(shè)計(jì)系統(tǒng)中,我們采用了中泰公司的PC6000系列的PC6313板卡。這種板卡帶有12位32路AD通道(單端)和2路DA通道,以及24路的I/O口。設(shè)計(jì)中定時(shí)讓單片機(jī)通過(guò)它的I/O口發(fā)送一個(gè)數(shù)字量給板卡,微機(jī)系統(tǒng)接收到信號(hào)以后通過(guò)組態(tài)軟件進(jìn)行處理,再返回給信號(hào)給單片機(jī),單片機(jī)中檢查收到的數(shù)據(jù)是不是和設(shè)想的結(jié)果一致,如果結(jié)果正確,表明上位機(jī)和下位機(jī)整個(gè)系統(tǒng)運(yùn)行正常,這就達(dá)到了監(jiān)控微機(jī)的效果。這種方法適合帶有輸入輸出的各種板卡。如不是組態(tài)軟件中提供的通用器件,可自行編寫(xiě)驅(qū)動(dòng)程序。
3.4 多線程技術(shù)
多任務(wù)是Microsoft Windows和Microsoft NT操作系統(tǒng)的一大特色,即可以同時(shí)執(zhí)行多個(gè)應(yīng)用程序。對(duì)于應(yīng)用程序的開(kāi)發(fā)者而言,多任務(wù)的實(shí)質(zhì)是能建立有多個(gè)進(jìn)程的應(yīng)用程序和建立使用不止一個(gè)執(zhí)行線程的進(jìn)程。
將聯(lián)絡(luò)碼作為一個(gè)線程插入到主程序的過(guò)程中,聯(lián)絡(luò)碼可由任何口線輸出給單片機(jī)系統(tǒng),單片機(jī)在微機(jī)出現(xiàn)故障的時(shí)候選擇安全輸出模式,以設(shè)定好的方式接管外部的控制。此種方法,通用性很強(qiáng),不需外接硬件。