基于ARM的開(kāi)關(guān)量信號(hào)采集模板的設(shè)計(jì)
摘要: 本文設(shè)計(jì)的開(kāi)關(guān)量信號(hào)采集模板是一款嵌入式SCADA系統(tǒng)的一種插件,稱(chēng)為智能數(shù)字量采集板(IntelligentBinary Input Board,簡(jiǎn)稱(chēng)B板)。該裝置主要用于電力系統(tǒng)等工業(yè)過(guò)程控制領(lǐng)域的實(shí)時(shí)數(shù)據(jù)采集與控制。
Abstract:
Key words :
本文設(shè)計(jì)的開(kāi)關(guān)量信號(hào)采集模板是一款嵌入式SCADA系統(tǒng)的一種插件,稱(chēng)為智能數(shù)字量采集板(IntelligentBinary Input Board,簡(jiǎn)稱(chēng)B板)。該裝置主要用于電力系統(tǒng)等工業(yè)過(guò)程控制領(lǐng)域的實(shí)時(shí)數(shù)據(jù)采集與控制。
在絕大多數(shù)工業(yè)測(cè)控系統(tǒng)中都不可避免地會(huì)涉及開(kāi)關(guān)量采集的問(wèn)題,開(kāi)關(guān)量信號(hào)采樣的準(zhǔn)確可靠性對(duì)于整個(gè)測(cè)控系統(tǒng)能否正常穩(wěn)定地工作,起著重要的作用。從以往的工作經(jīng)驗(yàn)來(lái)看,開(kāi)關(guān)量信號(hào)采集的關(guān)鍵問(wèn)題就是去抖動(dòng),避免錯(cuò)誤的開(kāi)關(guān)量變位信號(hào)困擾系統(tǒng)的使用者。所謂開(kāi)關(guān)量信號(hào)抖動(dòng)就是由于開(kāi)關(guān)量信號(hào)的采樣通道受到干擾后裝置采集到了錯(cuò)誤的開(kāi)關(guān)狀態(tài)并上報(bào)給主站系統(tǒng),產(chǎn)生許多莫須有的告警信息,讓系統(tǒng)的使用者難以辨別事件的真?zhèn)?,影響系統(tǒng)的實(shí)用性。在電力系統(tǒng)自動(dòng)化行業(yè),開(kāi)關(guān)量的事件順序記錄分辨率的指標(biāo)要求是1~2ms,繁瑣的硬件去抖動(dòng)電路和軟件延時(shí)去抖動(dòng)算法會(huì)破壞系統(tǒng)的實(shí)時(shí)性指標(biāo)。為此,本文提出了一種快速的去抖動(dòng)算法,與模板上硬件去抖動(dòng)濾波電路配合,較好地解決的上述問(wèn)題。
本文主要就B板的軟硬件設(shè)計(jì)原理與實(shí)現(xiàn)方法以及去抖動(dòng)算法進(jìn)行介紹。
1 硬件設(shè)計(jì)
1.1 總體設(shè)計(jì)
B板以Philips LPC2138 32位ARM微控制器為核心,完成16通道開(kāi)關(guān)量的數(shù)據(jù)采集。作為嵌入式SCADA系統(tǒng)的一種插件,板上設(shè)計(jì)了一路RS422異步串行通信接口,通過(guò)該接口與裝置的通信與管理模板(CommunicaTIon andManagement Board,簡(jiǎn)稱(chēng)M板)通信,將采集生成的實(shí)時(shí)開(kāi)關(guān)量信息上報(bào)給M板。由于M板要通過(guò)RS422總線管理多塊II0板工作,M板采用主從方式實(shí)現(xiàn)與II0板的通信連接,為此各IIO板都設(shè)計(jì)了ID標(biāo)識(shí)地址進(jìn)行身份確定。B板的ID標(biāo)識(shí)地址采用8位雙排跳線器設(shè)置,標(biāo)識(shí)地址范圍為0lH~FFH。此外,模板還設(shè)計(jì)了一路為RS232接口,用于模板的檢測(cè)與調(diào)試,以及LPC2138的軟件下載。調(diào)試RS232接口是一個(gè)標(biāo)準(zhǔn)的VTl00超級(jí)終端接口,通過(guò)該接口可以與PC機(jī)進(jìn)行通信連接,使用Windows的超級(jí)終端仿真軟件可以十分方便地對(duì)該模板進(jìn)行調(diào)試和檢測(cè)。同時(shí)該串口也是LPC2138軟件的下載接口,將跳線JPl02和JPl03跳接上,即可通過(guò)專(zhuān)用軟件將編譯連接生成的軟件下載到LPC2138的FLASH存儲(chǔ)器。
板上開(kāi)關(guān)量過(guò)程通道包括BI回路信號(hào)調(diào)理與濾波電路、光電隔離電路、開(kāi)關(guān)量狀態(tài)訪問(wèn)電路。由于LPC2138的I/0引腳的數(shù)量有限,硬件設(shè)計(jì)時(shí)采用部分I/O引腳作為CS片選信號(hào),部分I/O仿真8位數(shù)據(jù)總線對(duì)外部訪問(wèn)端口進(jìn)行分時(shí)操作。
為了保證模板運(yùn)行的穩(wěn)定可靠性,B板設(shè)計(jì)有硬件看門(mén)狗電路(HWDT),軟件還設(shè)計(jì)了軟看門(mén)狗定時(shí)監(jiān)視器(SWDT)。軟硬看門(mén)狗協(xié)同工作,在軟件“走飛”或局部“走死”之后自動(dòng)恢復(fù)模板運(yùn)行。
B板的工作原理如圖1所示。
1.2 LP02138的I/0擴(kuò)展
LPC2138是一款總線不出芯片的片上系統(tǒng)(SoC),主要通過(guò)I/O引腳對(duì)外部電路進(jìn)行訪問(wèn)。本文設(shè)計(jì)的B板有16路BI輸入狀態(tài)、8位ID標(biāo)識(shí)地址、異步串口和HWDT等都需要使用I/O資源,LPC2138的I/O引腳不夠用。為此,硬件設(shè)計(jì)時(shí)通過(guò)對(duì)LPC2138的I/0引腳進(jìn)行組合使用,實(shí)現(xiàn)了對(duì)外部電路的分時(shí)訪問(wèn)。具體實(shí)現(xiàn)方法是,采用部分I/O引腳作為CS信號(hào),再用8個(gè)I/0模仿8位地址總線DBO~7對(duì)外部端口進(jìn)行訪問(wèn)。這種方法的優(yōu)點(diǎn)在于既可減少I(mǎi)/0資源的使用,PCB布線也容易許多。采用這種方法進(jìn)行I/O擴(kuò)展需要注意兩個(gè)方面的問(wèn)題:①由于LPC2138的I/0引腳在啟動(dòng)時(shí)多為低狀態(tài),此時(shí)會(huì)導(dǎo)致CS信號(hào)都使能,造成沖突,需要將用做CS信號(hào)的I/0引腳上拉;②軟件訪問(wèn)外部電路時(shí),要通過(guò)設(shè)置I/O狀態(tài)模擬外部電路的訪問(wèn)時(shí)序。B板LPC2138的I/0擴(kuò)展如圖2所示。
1.3 開(kāi)關(guān)量輸入過(guò)程設(shè)計(jì)
開(kāi)關(guān)量輸入過(guò)程通道的設(shè)計(jì)相對(duì)簡(jiǎn)單,首先要根據(jù)光偶的驅(qū)動(dòng)電流確定輸入電阻的大小,并選擇一個(gè)電容與該輸入電阻構(gòu)成一個(gè)RC濾波回路,過(guò)濾過(guò)程通道上的毛刺干擾;為了防止用戶(hù)接線時(shí)把外部驅(qū)動(dòng)回路的電源極性接反導(dǎo)致光偶燒壞,在回路上反向接入一個(gè)二極管對(duì)其進(jìn)行保護(hù);為了適應(yīng)外部輸入回路多樣性(如有源脈沖信號(hào)和無(wú)源干接點(diǎn)信號(hào)不能共地),硬件設(shè)計(jì)時(shí)將16路開(kāi)關(guān)量分為4組,每組一個(gè)公共端。開(kāi)關(guān)量輸入信號(hào)與LPC2138的接口采用HC245實(shí)現(xiàn),軟件設(shè)置片選使能,將BI狀態(tài)放入數(shù)據(jù)總線,讀取BI狀態(tài),然后設(shè)置片選禁止,完成BI的采集工作。開(kāi)關(guān)量輸入過(guò)程通道如圖3所示。
1.4 硬件看門(mén)狗復(fù)位電路
LPC2138的內(nèi)部本身集成有看門(mén)狗電路,但是根據(jù)作者多年從事電力系統(tǒng)自動(dòng)化產(chǎn)品的設(shè)計(jì)經(jīng)驗(yàn),由于CPU內(nèi)部WDT需要軟件編程啟動(dòng),在極端情況下,系統(tǒng)死機(jī)后該WDT不能對(duì)系統(tǒng)進(jìn)行恢復(fù)。為此,在進(jìn)行本模板設(shè)計(jì)時(shí),沒(méi)有使用LPC2138內(nèi)部的WDT,而是采用SP706S芯片專(zhuān)門(mén)擴(kuò)展了一個(gè)看門(mén)狗,用于系統(tǒng)“走死”后的自動(dòng)恢復(fù)。SP706S是一款專(zhuān)門(mén)的看門(mén)狗復(fù)位電路,其定時(shí)器延時(shí)的時(shí)間為1.6秒。電路設(shè)計(jì)方法是將SP706S的復(fù)位輸出引腳與LPC2138復(fù)位電路的人工復(fù)位引腳相連。由于LPC2138軟件下載的時(shí)間要大于1.6秒,硬件設(shè)計(jì)時(shí)設(shè)置了一個(gè)跳線器用于看門(mén)狗的使能/禁止,軟件下載時(shí)將跳線帽拔下,模板正常運(yùn)行時(shí)將跳線帽插上。B板的看門(mén)狗復(fù)位電路如圖4所示。
正常運(yùn)行時(shí),模板軟件的看門(mén)狗定時(shí)器任務(wù)將定時(shí)(<1.6秒)清除SP706S的延時(shí)計(jì)數(shù)器,SP706S不會(huì)產(chǎn)生復(fù)位模板的信號(hào)。軟件“走死”后,由于該任務(wù)不再清WDT計(jì)數(shù)器,1.6秒之后,SP706S產(chǎn)生復(fù)位模板的信號(hào),模板重新啟動(dòng)運(yùn)行。
模板軟件運(yùn)行過(guò)程中,軟件的其它任務(wù)和異步串行通信收發(fā)器也可能局部“走死”,對(duì)于這種局部“走死”的情況,最好是局部恢復(fù)而不是模板復(fù)位。為此,看門(mén)狗定時(shí)器任務(wù)設(shè)計(jì)時(shí)采用了軟硬看門(mén)狗級(jí)聯(lián)工作的模式,即硬件看門(mén)狗監(jiān)視WDT任務(wù)的運(yùn)行,同時(shí)設(shè)計(jì)多個(gè)軟件看門(mén)狗定時(shí)器監(jiān)視其它任務(wù)的運(yùn)行和異步串口的收發(fā),WDT任務(wù)“走死”后復(fù)位模板,其它監(jiān)視對(duì)象“走死”后進(jìn)行局部初始化恢復(fù)處理,從而實(shí)現(xiàn)軟件的可靠性設(shè)計(jì)。
2 軟件設(shè)計(jì)
模板軟件采用μC/OS—II作為操作系統(tǒng),軟件的層次結(jié)構(gòu)如圖5所示。模板的應(yīng)用軟件設(shè)計(jì)主要工作包括目標(biāo)板底層驅(qū)動(dòng)程序的編寫(xiě)和模板I/O功能的設(shè)計(jì)編程兩部分工作。
目標(biāo)板底層驅(qū)動(dòng)主要包括1ms開(kāi)關(guān)量定時(shí)采集中斷和兩個(gè)異步串口中斷的中斷服務(wù)程序的編寫(xiě),前者響應(yīng)中斷后讀取16路開(kāi)關(guān)量輸入信號(hào)的狀態(tài),后者完成異步串行通信收發(fā)器的控制與數(shù)據(jù)收發(fā)。
模板應(yīng)用軟件設(shè)計(jì)主要包括4個(gè)任務(wù)模塊的編寫(xiě),分別是看門(mén)狗定時(shí)器任務(wù)、開(kāi)關(guān)量信號(hào)采樣數(shù)據(jù)處理、與M板數(shù)據(jù)通信協(xié)議處理、VTlOO超級(jí)終端命令處理等。
限于論文的篇幅,本文對(duì)模板軟件實(shí)現(xiàn)的細(xì)節(jié)不作詳細(xì)介紹,僅將帶有去抖動(dòng)功能的開(kāi)關(guān)量采集算法提取出來(lái)進(jìn)行介紹。
開(kāi)關(guān)量采集軟件部分的主要任務(wù)是讀取開(kāi)關(guān)量當(dāng)前的實(shí)時(shí)狀態(tài)并記錄開(kāi)關(guān)量變位發(fā)生的時(shí)標(biāo)。在電力系統(tǒng)自動(dòng)化領(lǐng)域,帶變位時(shí)標(biāo)的開(kāi)關(guān)信息稱(chēng)為事件順序記錄(SOE),主要用于判別開(kāi)關(guān)量之間變位的先后順序,分析事故發(fā)生的原因。軟件實(shí)現(xiàn)時(shí)SOE記錄保存在隊(duì)列之中。
為了保證系統(tǒng)時(shí)間的統(tǒng)一性,裝置M板的時(shí)間由上位主站或GPS授時(shí)鐘統(tǒng)一對(duì)時(shí),M板再給各B板對(duì)時(shí),然后M板和B板采用各自的定時(shí)器自動(dòng)守時(shí)。B板的時(shí)間格式為“秒計(jì)數(shù)+毫秒計(jì)數(shù)”,秒計(jì)數(shù)是相對(duì)2000年0時(shí)0分O秒的計(jì)數(shù)值,毫秒計(jì)數(shù)的范圍為0—999,達(dá)到1000時(shí)自動(dòng)清零并向秒計(jì)數(shù)進(jìn)位。由于裝置晶振的守時(shí)精度較差,為了保證lms的SOE分辨率,每5分鐘應(yīng)進(jìn)行一次對(duì)時(shí)操作。
在開(kāi)關(guān)量采集過(guò)程中,由于受到裝置運(yùn)行現(xiàn)場(chǎng)各種干擾源的影響,經(jīng)常發(fā)生讀到的開(kāi)關(guān)量狀態(tài)與監(jiān)控對(duì)象運(yùn)行狀態(tài)不一致的情況,造成EMS主站監(jiān)控系統(tǒng)產(chǎn)生大量的虛假告警信息,事件打印機(jī)不停地打印,嚴(yán)重影響了系統(tǒng)的實(shí)用化。因此剔除這些虛假的開(kāi)關(guān)量抖動(dòng)信息也是軟件設(shè)計(jì)的一項(xiàng)重要的工作。
針對(duì)工業(yè)現(xiàn)場(chǎng)監(jiān)控對(duì)象開(kāi)關(guān)量狀態(tài)的特性以及干擾抖動(dòng)的特點(diǎn),開(kāi)關(guān)量狀態(tài)大都采用繼電器的觸點(diǎn)指示,開(kāi)關(guān)量本身從0→1或從l→0的機(jī)械變位時(shí)間一般都比較長(zhǎng)(≥80ms),而干擾抖動(dòng)的時(shí)問(wèn)非常短(一般<4ms),SOE又是用來(lái)判定不同開(kāi)關(guān)量之間變位的先后順序,因此,采用連續(xù)多次采集到的開(kāi)關(guān)量狀態(tài)來(lái)判定BI是否真正變位并不影響開(kāi)關(guān)量采集的實(shí)時(shí)性和SOE分辨率。事實(shí)上,根據(jù)以往現(xiàn)場(chǎng)工程的經(jīng)驗(yàn),采用連續(xù)4次(4ms)采樣進(jìn)行抖動(dòng)判斷即可達(dá)到非常不錯(cuò)的效果,可以讓EMS/SCADA系統(tǒng)的事件打印機(jī)安靜下來(lái)。根據(jù)遠(yuǎn)動(dòng)終端檢測(cè)中心的建議,抖動(dòng)延時(shí)判斷的最大時(shí)間可以達(dá)到100ms。一般情況下,抖動(dòng)延時(shí)判斷時(shí)間取lO~20ms就可以了。由于B板開(kāi)關(guān)量信號(hào)采樣數(shù)據(jù)處理任務(wù)采用OS滴答(TIck)周期(10ms)啟動(dòng)執(zhí)行,為了防止保存BI變位信息的緩沖區(qū)發(fā)生覆蓋(overlap)訪問(wèn)沖突,抖動(dòng)延時(shí)判斷的取值應(yīng)大于10ms,軟件確省的取值為15ms。
為了準(zhǔn)確記錄開(kāi)關(guān)量變位的時(shí)間,通常情況下采用定時(shí)中斷來(lái)掃描讀取BI狀態(tài),B板的掃描周期為lms,并采用該中斷進(jìn)行SOE時(shí)鐘的守時(shí),掃描周期為1ms時(shí)SOE分辨率可達(dá)到2ms。沒(méi)有去抖動(dòng)功能常的開(kāi)關(guān)量采集流程為:SOE時(shí)鐘增長(zhǎng)1ms;讀取BI的狀態(tài);判斷開(kāi)關(guān)量是否變位,如果有變位,則記錄變位信息,包括BI的點(diǎn)序號(hào)、狀態(tài)、變位時(shí)間和變位標(biāo)記等。為了判別開(kāi)關(guān)量是否發(fā)生抖動(dòng),軟件在變位信息結(jié)構(gòu)體中增加了一個(gè)抖動(dòng)計(jì)數(shù)器成員變量,如果開(kāi)關(guān)量有變位,先不記錄變位信息,而是將抖動(dòng)計(jì)數(shù)器加1,判斷是否達(dá)到抖動(dòng)延時(shí)檢測(cè)時(shí)間,如果達(dá)到,則確認(rèn)開(kāi)關(guān)量發(fā)生了變位;如果開(kāi)關(guān)量沒(méi)有變位,則將抖動(dòng)計(jì)數(shù)器清零。這樣如果一個(gè)開(kāi)關(guān)量在抖動(dòng)延時(shí)判別時(shí)間之內(nèi)發(fā)生變位又恢復(fù)至原先的狀態(tài),軟件將不記錄其發(fā)生的變位信息,從而達(dá)到取抖動(dòng)的目的。B板帶有去抖動(dòng)功能的1ms開(kāi)關(guān)量定時(shí)掃描中斷服務(wù)程序的算法如圖6所示。
比較帶抖動(dòng)功能和不帶抖動(dòng)功能的開(kāi)關(guān)量采集算法,增加去抖動(dòng)功能時(shí),只增加了一個(gè)抖動(dòng)計(jì)數(shù)器變量,在記錄開(kāi)關(guān)量變位信息之前,對(duì)該變位信息進(jìn)行延時(shí)確認(rèn),增加的CPU程序執(zhí)行代價(jià)非常小,沒(méi)有影響中斷服務(wù)程序的正常運(yùn)行。因此,該算法速度快,效果也十分理想。該算法的缺陷在于如果開(kāi)關(guān)實(shí)際變位的過(guò)程中發(fā)生了抖動(dòng),將無(wú)法記錄到準(zhǔn)確的開(kāi)關(guān)變位的開(kāi)始時(shí)間。如果要達(dá)到這一目的,需要連續(xù)記錄開(kāi)關(guān)量變位的軌跡,然后再進(jìn)行開(kāi)關(guān)量變位開(kāi)始時(shí)間的確定。不過(guò)這種算法的CPU開(kāi)銷(xiāo)比較大,B板的軟件設(shè)計(jì)沒(méi)有采用這種算法??紤]到干擾信號(hào)的偶然性,又有硬件濾波電路的配合,圖6所示的算法是一種行之有效的好方法。
開(kāi)關(guān)量信號(hào)采樣數(shù)據(jù)處理任務(wù)主要完成將BI定時(shí)中斷采集服務(wù)程序采集到的開(kāi)關(guān)量變位信息轉(zhuǎn)換成SOE記錄,并添加到SOE隊(duì)列之中,處理算法如圖7所示。該算法主要實(shí)現(xiàn)了兩項(xiàng)功能:SOE隊(duì)列元素的時(shí)間修正和SOE隊(duì)列操作。由于BI中斷程序記錄的BI變位時(shí)間是去抖動(dòng)判別確認(rèn)時(shí)的時(shí)間,因此生成SOE記錄時(shí)要將該時(shí)間修正到BI開(kāi)始變位的時(shí)間。SOE隊(duì)列操作就是將SOE元素添加到SOE隊(duì)列之中,在添加SOE元素時(shí),如果隊(duì)列已滿(mǎn),需要將最早的SOE元素刪除,再將新生成的SOE元素添加到隊(duì)列之中。正常情況下,M板每O.5秒與B通信一次,召喚B板采集生成的開(kāi)關(guān)最信息,根據(jù)現(xiàn)場(chǎng)經(jīng)驗(yàn),即便開(kāi)關(guān)量變位發(fā)生雪崩效應(yīng),16路BI在0.5秒之內(nèi)也不會(huì)產(chǎn)生64個(gè)SOE記錄,軟件實(shí)現(xiàn)時(shí)設(shè)置的SOE隊(duì)列的長(zhǎng)度為64。當(dāng)然,如果發(fā)生M板與B板的通信長(zhǎng)期中斷,SOE隊(duì)列會(huì)有溢出發(fā)生,這種情況一般都是裝置故障,需要檢修予以排除。此外,BI變位信息和ISOE隊(duì)列的訪問(wèn)操作與其它任務(wù)和中服務(wù)程序有互斥要求,需要使用臨界區(qū)加以保護(hù)。
3 結(jié)論
裝置定型開(kāi)發(fā)完成之后,在國(guó)電北侖電廠三期、中山嘉明電廠二期UPS電源監(jiān)控和戶(hù)縣惠安化工廠19口水井的馬達(dá)自動(dòng)控制中投入使用,運(yùn)行結(jié)果表明,B板開(kāi)關(guān)量信號(hào)采集的準(zhǔn)確性、事件順序記錄分辨率與實(shí)時(shí)性等性能指標(biāo)符合相關(guān)標(biāo)準(zhǔn)的要求,運(yùn)行穩(wěn)定可靠,達(dá)到了預(yù)期的設(shè)計(jì)目的。
此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。