周軍武
(寧波三星智能電氣有限公司,浙江 寧波 315034)
狀態(tài)機(jī)提供一種以系統(tǒng)狀態(tài)為中心、以事件為變量的設(shè)計(jì)方法,它專注于各個(gè)狀態(tài)的特點(diǎn)以及狀態(tài)之間的相互轉(zhuǎn)換關(guān)系。狀態(tài)的轉(zhuǎn)換是由事件引起的,在研究某個(gè)具體狀態(tài)的時(shí)候,我們必然會考慮任何一個(gè)事件對這個(gè)狀態(tài)有什么樣的影響。這樣,每一個(gè)狀態(tài)中發(fā)生的每一個(gè)事件都會在我們的預(yù)料之中,也就不會留下邏輯漏洞。邏輯完備性是狀態(tài)機(jī)編程最大的優(yōu)點(diǎn)。專變終端控制模塊各項(xiàng)子功能之間存在關(guān)聯(lián)性,其在運(yùn)行調(diào)度的過程中需要良好的協(xié)調(diào)能力。采用狀態(tài)機(jī)方法進(jìn)行設(shè)計(jì)可使控制邏輯結(jié)構(gòu)更加清晰,大大提高了程序的魯棒性,降低異常情況發(fā)生的概率,對保證產(chǎn)品品質(zhì)具有很大的幫助。
專變終端控制模塊的功能主要分為功率定值控制、電量定值控制、保電控制、遙控這四種。
終端功率定值控制按照控制參數(shù)的不同可分為廠休控、時(shí)段控、營業(yè)報(bào)??兀赂】?。終端在接收到主站下發(fā)的控制投入命令和設(shè)置參數(shù)后,當(dāng)未處于保證用電的狀態(tài)時(shí),如果所監(jiān)測的實(shí)時(shí)用電功率超過限定額度,就會發(fā)出告警并根據(jù)基于控制條件的判斷結(jié)果和設(shè)置參數(shù)執(zhí)行跳閘動作,直到控制解除之后才允許用戶合閘,并對過程狀態(tài)信息進(jìn)行記錄和提示。
電量定值控制主要分為月電控和購電控兩種。終端在接收到主站下發(fā)的控制投入命令和設(shè)置參數(shù)后,如果采集到的月電量或剩余電量超過使用額度,就會發(fā)出告警并根據(jù)基于控制條件的判斷結(jié)果和設(shè)置參數(shù)執(zhí)行跳閘動作。月電控在控制解除或月末24時(shí)允許用戶合閘;購電控在控制解除或重新購電使剩余電量大于跳閘門限時(shí)允許用戶重新合閘,控制狀態(tài)、過程等信息應(yīng)有記錄和提示。
保電即保證用電需求,終端在接收到保電投入命令或與主站通信中斷后,則解除原有控制狀態(tài)且在任何情況下都不再執(zhí)行跳閘命令,直至通信恢復(fù)或收到解除命令。終端保電在投入和解除前后記錄控制狀態(tài)信息。
終端在接收到主站的跳閘控制命令后,會立即對按照設(shè)定參數(shù)確定的被執(zhí)行對象進(jìn)行拉閘動作。直至接收到允許合閘控制命令后才允許用戶合閘。控制狀態(tài)信息應(yīng)有記錄和提示。
控制模塊主要為專變終端提供負(fù)荷管理控制功能,主要包括功率控制、電量控制、遙控、保電、催費(fèi)報(bào)警等功能。控制模塊以獨(dú)立任務(wù)的形式進(jìn)行業(yè)務(wù)判斷和實(shí)時(shí)處理,與其他外部模塊完全獨(dú)立,但需要外部模塊提供總加組等數(shù)據(jù)??刂苾?nèi)部模擬多任務(wù)方,保電、功控、電控等功能由主函數(shù)負(fù)責(zé)業(yè)務(wù)判斷,然后由專門的控制、保電等切換狀態(tài)函數(shù)負(fù)責(zé)最終的拉合閘、聲光、液晶顯示等硬件狀態(tài)切換。設(shè)計(jì)框圖如圖1所示,整體實(shí)物效果如圖2所示。
圖1 控制模塊設(shè)計(jì)框圖
圖2 終端控制功能運(yùn)行效果示意圖
功控和電控控制狀態(tài)的轉(zhuǎn)換統(tǒng)一為一個(gè)狀態(tài)切換函數(shù)對狀態(tài)遷移進(jìn)行集中管理。控制整體狀態(tài)切換圖如圖3所示。
圖3 控制狀態(tài)切換圖
3.1.1 功控設(shè)計(jì)說明
功率控制的種類包括時(shí)段控、廠休控、營業(yè)報(bào)???、功率下浮控:
(1)時(shí)段控是指在一天當(dāng)中,將24小時(shí)最多分成8個(gè)時(shí)段,并設(shè)定各個(gè)時(shí)段的功率定值,以此為依據(jù)對用戶進(jìn)行用電控制。一般用于錯(cuò)峰用電,按最近一次時(shí)段投入?yún)?shù)的總加組滑差功率進(jìn)行控制。功率時(shí)段控最多有3套方案,每套定值方案最多可配置8個(gè)時(shí)段功控定值,不同方案的時(shí)段可有不同的功率定值,終端根據(jù)主站下發(fā)的方案號進(jìn)行功率控制。
(2)廠休控是指對一周內(nèi)的某幾天設(shè)定控制定值,并以此為依據(jù)對用戶進(jìn)行用電控制。一般用于諸如停三開四之類的負(fù)荷控制。
(3)營業(yè)報(bào)??厥侵冈谟脩羯暾埻I(yè)期間對用戶進(jìn)行用電控制。
(4)功率下浮控一般用于臨時(shí)限電,以當(dāng)前滑差功率為基準(zhǔn)求得限值。
功控存在四個(gè)控制類型,均取滑差功率進(jìn)行判斷,僅限值及控制時(shí)間條件不一致的情況,因此整個(gè)功控功能僅需一個(gè)功控檢測函數(shù)即可實(shí)現(xiàn),將獲取功率定值以及進(jìn)行時(shí)間檢查兩部分剝離出來,根據(jù)不同的功控類型來判斷控制條件,取功控定值。
3.1.2 功控實(shí)現(xiàn)流程圖
控制模塊內(nèi)部模擬多任務(wù)異步執(zhí)行,功控檢測函數(shù)僅負(fù)責(zé)控制業(yè)務(wù)邏輯判斷,不執(zhí)行具體的跳合閘及液晶顯示、聲光報(bào)警工作,只需將對應(yīng)狀態(tài)置位,由統(tǒng)一的控制狀態(tài)切換函數(shù)來實(shí)現(xiàn)最終的狀態(tài)切換。功控檢測函數(shù)流程圖如圖4所示。
圖4 功控實(shí)現(xiàn)流程圖
3.2.1 電控設(shè)計(jì)說明
當(dāng)?shù)亻]環(huán)電量控制有月電控、購電控兩種控制方式。兩種電量控制具有相同優(yōu)先級,可同時(shí)執(zhí)行。在參數(shù)修改、控制投入或解除以及控制執(zhí)行時(shí)有蜂鳴器告警通知客戶。電控的失效和生效原理與功控相同,電控的必要條件為總加組已配置且輪次已設(shè)置。電控投入后根據(jù)主站新設(shè)置參數(shù)而自動調(diào)整的方式與功控相同。所有電量控制一旦超過定值,無需延時(shí),LED、蜂鳴器、LCD同步動作。
控制模塊內(nèi)部模擬多任務(wù)異步執(zhí)行,電控將月電控及購電控邏輯判斷函數(shù)分兩個(gè)業(yè)務(wù)函數(shù)執(zhí)行,該函數(shù)不執(zhí)行具體的跳合閘及液晶顯示、聲光報(bào)警工作,只需將對應(yīng)控制狀態(tài)置位,由統(tǒng)一的控制狀態(tài)切換函數(shù)實(shí)現(xiàn)最終狀態(tài)。
電控非跳閘前告警,由專門的告警函數(shù)實(shí)現(xiàn),區(qū)分控制狀態(tài)切換函數(shù)中拉閘前告警功能。
3.2.2 月電控流程
月電控業(yè)務(wù)函數(shù)根據(jù)外部模塊提供的總加組、月電量等數(shù)據(jù),執(zhí)行業(yè)務(wù)層面的判斷并置位控制標(biāo)志,月電控業(yè)務(wù)流程如圖5所示。
圖5 月電控流程圖
3.2.3 購電控流程
購電控業(yè)務(wù)函數(shù)根據(jù)外部模塊提供的總加組、月電量和剩余電量等數(shù)據(jù),執(zhí)行業(yè)務(wù)層面的判斷并置位控制標(biāo)志,購電控業(yè)務(wù)流程如圖6所示。
圖6 購電控流程圖
3.3.1 設(shè)計(jì)說明
遙控又稱為遠(yuǎn)方控制,主要用于現(xiàn)場調(diào)試,即負(fù)荷管理的情況下實(shí)時(shí)下發(fā)拉合閘命令。遙控支持控制過程中突然停電重新上電后,終端依然可以正常檢測判斷,所有之前的控制命令及參數(shù)不會丟失。如果終端已經(jīng)跳閘,則開始對用戶限電,突然斷電再上電后,終端從可以跳閘開始接著計(jì)算(終端上電可能有保電)限電時(shí)間,直至到達(dá)規(guī)定時(shí)間則解除用戶跳閘狀態(tài)。如果終端還在告警中,突然斷電,則重新上電后重新告警延時(shí)。
3.3.2 功能狀態(tài)圖
遙控狀態(tài)主要分為以下幾種:收到主站的拉閘命令而執(zhí)行拉閘狀態(tài)、收到主站的合閘命令而執(zhí)行合閘狀態(tài)、拉閘前告警狀態(tài)、控制超時(shí)解除狀態(tài)(未控制)、檢測是否控制超時(shí)狀態(tài)。遙控主函數(shù)主要負(fù)責(zé)各狀態(tài)切換,以及各狀態(tài)下的相關(guān)聲光、液晶顯示操作。在控制模塊中,模擬多任務(wù)方式,遙控主函數(shù)主要負(fù)責(zé)遙控狀態(tài)切換,UTM模塊收到拉合閘命令,只需將當(dāng)前遙控狀態(tài)作為參數(shù)傳遞給遙控主函數(shù)即可。遙控狀態(tài)切換如圖7所示。
圖7 遙控功能狀態(tài)圖
3.4.1 設(shè)計(jì)說明
保電狀態(tài)下終端在任何情況下都不執(zhí)行跳閘命令,如果已有跳閘則立即合閘。
3.4.2 功能狀態(tài)圖
保電狀態(tài)主要分為以下幾種:收到主站的保電投入命令而執(zhí)行投入保電狀態(tài)、收到主站的保電解除命令而執(zhí)行保電解除狀態(tài)、未投入狀態(tài)、自動保電解除狀態(tài)、自動保電投入、保電檢測狀態(tài)等。保電主函數(shù)模擬狀態(tài)機(jī),主要負(fù)責(zé)各狀態(tài)切換,以及各狀態(tài)下的液晶顯示操作。保電狀態(tài)切換如圖8所示。
圖8 保電功能狀態(tài)圖
3.5.1 設(shè)計(jì)說明
主站下發(fā)催費(fèi)告警命令可實(shí)時(shí)提醒用戶及時(shí)繳費(fèi)購電,蜂鳴器和LCD同步動作。支持讀取控制狀態(tài)和參數(shù)設(shè)置狀態(tài),該狀態(tài)與終端參數(shù)及命令下發(fā)狀態(tài)一致,保電情況下支持催費(fèi)告警。在用戶重新繳費(fèi)之后,根據(jù)主站下發(fā)的解除命令解除告警。
3.5.2 功能狀態(tài)圖
催費(fèi)告警功能相對簡單,主要體現(xiàn)在幾個(gè)狀態(tài)切換,涉及告警態(tài)、告警檢測態(tài)、告警投入態(tài)、告警命令解除態(tài)、告警解除態(tài);因此也同保電處理,模擬狀態(tài)機(jī)方式,在主函數(shù)中實(shí)現(xiàn),外部負(fù)責(zé)參數(shù)更新及更新控制投入解除狀態(tài),催費(fèi)告警接口函數(shù)負(fù)責(zé)狀態(tài)切換及具體業(yè)務(wù)判斷及功能實(shí)現(xiàn)。催費(fèi)告警狀態(tài)切換如圖9所示。
控制中部分關(guān)鍵的命令,尤其是剩余電量計(jì)算中相關(guān)的關(guān)鍵數(shù)據(jù)均需妥善保存,該子模塊主要負(fù)責(zé)控制模塊中數(shù)據(jù)的保存及處理機(jī)制??刂乒δ苌婕袄祥l可能會產(chǎn)生嚴(yán)重影響,所有控制命令、剩余電能量等關(guān)鍵數(shù)據(jù)均采用了非易失性的鐵電和EEPROM存儲器備份存儲,防止數(shù)據(jù)丟失。同時(shí)存儲控制命令整體采取16位CRC效驗(yàn),備份存儲也采取CRC效驗(yàn)。設(shè)計(jì)控制存儲機(jī)制時(shí)考慮了存儲設(shè)備的壽命特性,針對鐵電采取每1分鐘存儲一次,針對EEPROM每5分鐘或停電時(shí)存儲一次。終端上電之后,按參數(shù)、電量、命令從不同存儲介質(zhì)中獲取相關(guān)數(shù)據(jù),用全局變量緩存,方便控制模塊判斷使用情況以及進(jìn)行相應(yīng)更新。
圖9 催費(fèi)告警功能狀態(tài)圖
專變采集終端本身業(yè)務(wù)功能設(shè)計(jì)較為復(fù)雜,總體代碼量多達(dá)幾十萬行,這對產(chǎn)品代碼的后期維護(hù)帶來不小的挑戰(zhàn),因此在產(chǎn)品的開發(fā)階段就必須要建立業(yè)務(wù)流程清晰,功能模塊彼此獨(dú)立又可以靈活擴(kuò)展的設(shè)計(jì)框架,實(shí)現(xiàn)這一目的則需采用一種高效可靠的設(shè)計(jì)方法,應(yīng)用有限狀態(tài)機(jī)設(shè)計(jì)控制模塊的總體程序框架不失為一種優(yōu)良的方案,其在產(chǎn)品的實(shí)際運(yùn)營中也取得了維護(hù)投入低、客戶投訴少的良好成效。因此,基于狀態(tài)機(jī)思想的設(shè)計(jì)方法對電網(wǎng)自動化信息采集設(shè)備在一些業(yè)務(wù)場景中的具體應(yīng)用具有極其重要的指導(dǎo)和借鑒意義。