專利名稱:一種開關量信號的采集方法
技術領域:
本發(fā)明涉及一種開關量信號(DI信號)的采集方法,該采集方法可應用于風力發(fā)電機組開關量信號的采集。
背景技術:
在大型風力發(fā)電機組中,涉及到大量的工業(yè)過程信號的采集,其中DI信號占據(jù)了很大的一部分比例,由于DI信號多為開關、繼電器等無源器件給出,而無源信號在斷開的時候,由于DI接口為懸空狀態(tài),從而形成一條很長的天線。因此即便DI接口通常在硬件上采用了光電隔離和施密特觸發(fā)器整形,但是在諸如風力發(fā)電機組這樣嚴酷的工業(yè)環(huán)境中,存在著很多的瞬態(tài)干擾,而所述的瞬態(tài)干擾會隨機地造成某一次讀入DI接口信號發(fā)生錯誤,發(fā)生DI采集錯誤導致風力發(fā)電機組控制系統(tǒng)誤判的現(xiàn)象仍時有發(fā)生。針對諸如風力發(fā)電機組這樣嚴酷的工業(yè)環(huán)境,有必要提出一種可有效對開關量信號進行采集的方法。
發(fā)明內(nèi)容
本發(fā)明的目的是針對上述背景技術存在的缺陷,提供一種可避免因瞬態(tài)干擾而引起開關量信號采集錯誤的開關量信號采集方法。為實現(xiàn)上述目的,本發(fā)明一種開關量信號的采集方法,應用于16位的單片機系統(tǒng),其包括
步驟I :當開關量信號采集方法的程序開始時,先行預置的16位緩沖字內(nèi)容始終保持為0χ0000,所述先行預置的16位緩沖字內(nèi)容為0x0000表示被采集的具有開關功能的無源器件輸出的開關量信號為處于斷開狀態(tài),對應輸出電平為低電平,所述先行預置的16位緩沖字內(nèi)容0x0000保存在單片機內(nèi)部SRAM的I個字單元中;
步驟2 :單片機中的運算器將單片機內(nèi)的SRAM中的緩沖字內(nèi)容邏輯左移一位,并覆蓋先行預置的16位緩沖字內(nèi)容;
步驟3:單片機中的運算器訪問單片機的數(shù)據(jù)總線,讀取對應DI接口的IO寄存器一次并保存到CPU的通用寄存器中,得到對應DI接口的開關量信號;
步驟4:單片機的運算器將已邏輯左移一位的緩沖字與由DI接口讀入的開關量信號進行一次或運算,并將進行或運算的結(jié)果保存到單片機內(nèi)部的SRAM中;
步驟5 =CPU判斷步驟4中單片機內(nèi)的SRAM中的緩沖字內(nèi)容是否為0xFFFF、0x0000或既不為0x0000也不為OxFFFF中的一種;
步驟6 :CPU根據(jù)步驟5中緩沖字內(nèi)容對應更新DI輸入狀態(tài)為高電平或低電平的一種,開關量信號完成一次采集判斷,如該緩沖字的16位內(nèi)容更新為0xFFFF,則更新DI輸入狀 態(tài)為高電平,如該緩沖字的16位內(nèi)容更新為0χ0000,則更新DI輸入狀態(tài)為低電平,如該緩沖字的16位內(nèi)容更新為既不為0x0000也不為OxFFFF中的一種,則不進行更新,以后按照預定采集周期并按序重復步驟2到步驟6。綜上所述,本發(fā)明一種開關量信號的采集方法必須連續(xù)十六次采集代表DI接口的開關量信號值都必須為同一個值,才能更新表示開關量信號狀態(tài)的值,故而能有效的避免因DI采集錯誤導致風力發(fā)電機組等工業(yè)控制系統(tǒng)的誤判,達到有效采集開關量信號目的。
圖I為本發(fā)明一種開關量信號的采集方法的采集流程示意圖。
具體實施例方式為詳細說明本發(fā)明的技術內(nèi)容、構造特征、所達成目的及效果,以下茲例舉實施例并配合附圖詳予說明。請參閱圖1,本發(fā)明一種開關量信號采集方法是基于單片機字尋址的方式來對開關量信號(DI信號)的進行有效地采集并作出相應的邏輯判斷的方法。本發(fā)明一種開關量信號采集方法主要是針對16位的單片機系統(tǒng),但也不排除其他位數(shù)的單片機系統(tǒng)應用本方法進行開關量信號的采集。針對業(yè)內(nèi)普通技術人員,通常情況下開關量信號僅存在兩種情況,其中,“0”表示具開關功能的無源器件處于斷開狀態(tài),此時相對應的電平為低電平;“I”表示具開關功能的無源器件處于閉合狀態(tài),此時,相對應的電平為高電平。步驟I :當開關量信號采集方法的程序開始時,先行預置的16位緩沖字內(nèi)容始終保持為=0x0000,所述先行預置的16位緩沖字內(nèi)容為0x0000表示被采集的具有開關功能的無源器件輸出的開關量信號處于斷開狀態(tài),對應輸出電平為低電平,所述先行預置的16位緩沖字內(nèi)容0x0000保存在單片機內(nèi)部SRAM的I個字單元中;
步驟2 :單片機中的運算器將單片機內(nèi)的SRAM中的緩沖字內(nèi)容邏輯左移一位,并覆蓋先行預置的16位緩沖字內(nèi)容;
步驟3:單片機中的運算器訪問單片機的數(shù)據(jù)總線,讀取對應DI接口的IO寄存器一次并保存到CPU的通用寄存器中,得到對應DI接口的開關量信號;
步驟4:單片機的運算器將已邏輯左移一位的緩沖字與由DI接口讀入的開關量信號進行一次或運算,并將進行或運算的結(jié)果保存到單片機內(nèi)部的SRAM中;
步驟5 =CPU判斷步驟4中單片機內(nèi)的SRAM中的緩沖字內(nèi)容是否為0xFFFF、0x0000或既不為0x0000也不為OxFFFF中的一種;
步驟6 :CPU根據(jù)步驟5中緩沖字內(nèi)容對應更新DI輸入狀態(tài)為高電平或低電平的一種,開關量信號完成一次采集判斷,如該緩沖字的16位內(nèi)容更新為0xFFFF,則更新DI輸入狀態(tài)為高電平,如該緩沖字的16位內(nèi)容更新為0X0000,則更新DI輸入狀態(tài)為低電平,如該緩沖字的16位內(nèi)容更新為既不為0x0000也不為OxFFFF中的一種,則不進行更新,以后按照預定采集周期并按序重復步驟2到步驟6。需要特別指出的是,本發(fā)明一種開關量信號采集方法在進行開關量信號(DI信號)采集時,至少需要按序重復步驟2到步驟6連續(xù)十六次才可以實現(xiàn)電平的第一次更新,即由低電平向高電平更新,前提是由DI接口讀入的開關量信號(DI信號)始終是表示具有開關功能的無源器件處于閉合狀態(tài)的“I”時,此時,先行預置的16位緩沖字內(nèi)容相應的更新為OxFFFF。、
其中,在較佳實施例中,CPU先行判斷單片機內(nèi)的SRAM的緩沖字內(nèi)容是否為OxFFFF ;再判斷緩沖字內(nèi)容是否為0x0000 ;最后,對既不為0x0000也不為OxFFFF進行判斷。具體的,步驟5中CPU先行對單片機內(nèi)SRAM中的緩沖字內(nèi)容是否為OxFFFF進行判斷;如是,則將步驟6中先行預置的緩沖字內(nèi)容更新為OxFFFF且同時更新開關量信號(DI信號)的狀態(tài)為高電平。步驟5中CPU先行對單片機內(nèi)SRAM中的緩沖字內(nèi)容是否為OxFFFF進行判斷;如不是,再對單片機內(nèi)SRAM中的緩沖字內(nèi)容是否為0x0000進行判斷;如是,則保持步驟6中先行預置的緩沖字內(nèi)容0x0000且同時保持開關量信號(DI信號)的狀態(tài)為低電平。步驟5中先行對單片機內(nèi)SRAM中的緩沖字內(nèi)容是否為OxFFFF進行判斷;如不是,再對單片機內(nèi)SRAM中的緩沖字內(nèi)容是否為0x0000進行判斷;如不是,則CPU將得出緩沖字 內(nèi)容為既不為0x0000也OxFFFF中的一種,將步驟4中得到的緩沖字內(nèi)容存儲到單片機內(nèi)的SRAM中。步驟5中緩沖字內(nèi)容OxFFFF表示緩沖字內(nèi)容所包含的16個位全部為邏輯I。步驟5中緩沖字內(nèi)容0x0000表示緩沖字內(nèi)容所包含的16個位全部為邏輯O。步驟5中緩沖字既不為0x0000也OxFFFF中的一種表示緩沖字內(nèi)容所包含的16個位不全為邏輯I且不全為邏輯O。綜上所述,本發(fā)明一種開關量信號的采集方法必須連續(xù)十六次采集代表DI接口的開關量信號(DI信號)值都必須為同一個值,才能更新表示開關量信號(DI信號)狀態(tài)的值,故而能有效的避免因DI采集錯誤導致風力發(fā)電機組等工業(yè)控制系統(tǒng)的誤判,達到有效采集開關量信號(DI信號)目的。以上所述的技術方案僅為本發(fā)明一種開關量信號采集方法的較佳實施例,任何在本發(fā)明一種開關量信號采集方法基礎上所作的等效變換或替換都包含在本專利的權利要求的范圍之內(nèi)。
權利要求
1.一種開關量信號的采集方法,應用于16位的單片機系統(tǒng),其包括 步驟I :當開關量信號采集方法的程序開始時,先行預置的16位緩沖字內(nèi)容始終保持為0X0000,所述先行預置的16位緩沖字內(nèi)容為0x0000表示被采集的具有開關功能的無源器件輸出的開關量信號為處于斷開狀態(tài),對應輸出電平為低電平,所述先行預置的16位緩沖字內(nèi)容0x0000保存在單片機內(nèi)部SRAM的I個字單元中; 步驟2 :單片機中的運算器將單片機內(nèi)的SRAM中的緩沖字內(nèi)容邏輯左移一位,并覆蓋先行預置的16位緩沖字內(nèi)容; 步驟3:單片機中的運算器訪問單片機的數(shù)據(jù)總線,讀取對應DI接口的IO寄存器一次并保存到CPU的通用寄存器中,得到對應DI接口的開關量信號; 步驟4:單片機的運算器將已邏輯左移一位的緩沖字與由DI接口讀入的開關量信號進行一次或運算,并將進行或運算的結(jié)果保存到單片機內(nèi)部的SRAM中; 步驟5 =CPU判斷步驟4中單片機內(nèi)的SRAM中的緩沖字內(nèi)容是否為0xFFFF、0x0000或既不為0x0000也不為OxFFFF中的一種; 步驟6 :CPU根據(jù)步驟5中緩沖字內(nèi)容對應更新DI輸入狀態(tài)為高電平或低電平的一種,開關量信號完成一次采集判斷,如該緩沖字的16位內(nèi)容更新為0xFFFF,則更新DI輸入狀態(tài)為高電平,如該緩沖字的16位內(nèi)容更新為0X0000,則更新DI輸入狀態(tài)為低電平,如該緩沖字的16位內(nèi)容更新為既不為0x0000也不為OxFFFF中的一種,則不進行更新,以后按照預定采集周期并按序重復步驟2到步驟6。
2.根據(jù)權利要求I所述的開關量信號的采集方法,其特征在于CPU先行對緩沖字內(nèi)容是否為OxFFFF進行判斷;再對緩沖字內(nèi)容是否為0x0000進行判斷;最后,對既不為0x0000也不為OxFFFF進行判斷。
3.根據(jù)權利要求I所述的開關量信號的采集方法,其特征在于步驟5中CPU先行對單片機內(nèi)部SRAM中的緩沖字內(nèi)容是否為OxFFFF進行判斷;如是,則將步驟6中先行預置的緩沖字內(nèi)容更新為OxFFFF且同時更新開關量信號的狀態(tài)為高電平。
4.根據(jù)權利要求I所述的開關量信號的采集方法,其特征在于步驟5中CPU先行單片機內(nèi)部SRAM中的緩沖字內(nèi)容是否為OxFFFF進行判斷;如不是,再對單片機內(nèi)部SRAM中的緩沖字內(nèi)容是否為0x0000進行判斷;如是,則保持步驟6中先行預置的緩沖字內(nèi)容0x0000且同時保持開關量信號的狀態(tài)為低電平。
5.根據(jù)權利要求I所述的開關量信號的采集方法,其特征在于步驟5中CPU先行對單片機內(nèi)部SRAM中的緩沖字內(nèi)容是否為OxFFFF進行判斷;如不是,再對單片機內(nèi)部SRAM中的緩沖字內(nèi)容是否為0x0000進行判斷;如不是,則CPU將得出緩沖字內(nèi)容為既不為0x0000也OxFFFF中的一種,將步驟4中得到的緩沖字內(nèi)容存儲到單片機內(nèi)部的SRAM中。
6.根據(jù)權利要求I所述的開關量信號的采集方法,其特征在于在進行開關量信號采集時,至少需要按序重復步驟2到步驟6連續(xù)十六次才可以實現(xiàn)電平的第一次更新,即由低電平向高電平更新,前提是由DI接口讀入的開關量信號始終是表示具有開關功能的無源器件處于閉合導通狀態(tài)的“I”時,此時,先行預置的16位緩沖字內(nèi)容相應的更新為OxFFFF。
全文摘要
本發(fā)明公開了一種開關量信號的采集方法,該方法必須連續(xù)十六次采集代表DI接口的開關量信號值都必須為同一個值,才能更新表示開關量信號狀態(tài)的值,故而能有效的避免因DI采集錯誤導致風力發(fā)電機組等工業(yè)控制系統(tǒng)的誤判,達到有效采集開關量信號目的。
文檔編號G05B19/042GK102637002SQ20121011312
公開日2012年8月15日 申請日期2012年4月18日 優(yōu)先權日2012年4月18日
發(fā)明者李泳林 申請人:成都阜特科技有限公司