本發明涉及智能化灌溉技術。
背景技術:
隨著農業現代化的推進,智能化灌溉技術越來越受到重視。一方面,智能化灌溉技術能夠對作物實現按需自動灌溉,從而能夠大大減少人工的投入;另一方面,智能化灌溉技術能夠有效提高水的利用率,從而達到節水的目的。
理想化的智能灌溉是如專利文獻cn102037888a所公開的那樣通過采集土壤的濕度等信息,然后根據這些信息判斷是否需要對作物進行灌溉,如果需要對作物進行灌溉則開啟相應的控制閥對相應的作物進行灌溉。但現實的情形卻無法理想化。
目前,國內絕大部分農田通過水渠輸水方式進行灌溉。在同一灌溉水源的農田灌溉區域內,各種水渠組成樹狀網絡。首先是從作為灌溉水源的水庫或湖泊連接出來的主渠道,然后主渠道連接支渠道,支渠道再連接支渠道,最后支渠道連接農田的小水渠。主渠道、支渠道、小水渠的上游端設置有水閘。這些主渠道、支渠道和小水渠基本上屬于明渠。這種基于明渠的灌溉系統需要解決以下問題:1、各種水渠通常很長,本身具有蓄水功能,每次開閘放水需要考慮到水渠底水的水量,水閘處的流量與真正用于灌溉的水量之間不一致;2、水渠流水依賴于自然落差,無動力驅動,當上游和下游水位齊平時,水流不動,因此流速流量難以掌控;3、上游渠道與下游渠道之間的自然落差較小,需要利用渠道水閘開關在渠道內蓄水構建上下游的水位落差;4、灌溉面積很大,涉及幾百至幾千平方公里的灌溉面積,采用遍布傳感器采集土壤濕度的方案成本過高;5、由于灌溉面積大,考慮到不同地方土壤性質的不同、作物性質的不同所需要的水量也不同;6、由于灌溉面積大,甚至不同的灌溉點有著不同的降水;7、支渠道所覆蓋的灌溉面積不同,每個支渠道的水閘并不能同等對待。
技術實現要素:
本發明所要解決的問題是背景技術的明渠灌溉系統中所出現的各種問題。
為解決上述問題,本發明采用的方案如下:
根據本發明的一種基于明渠的灌溉控制系統,該系統涉及主機、主渠道上游設置的水閘、支渠道上游設置的水閘、農田渠道上游設置的水閘、安裝在所述主渠道和支渠道上的水位計以及位于農田側的需水采集終端;所述水閘、水位計和需水采集終端連接所述主機;所述水位計用于采集主渠道或支渠道的水位,并發送至所述主機;所述需水采集終端用于收集農田側的需水指數發送至所述主機;該系統包括以下模塊:配置管理模塊、指數采集模塊、指數分析模塊、水位采集模塊、水位分析模塊、以及渠道注水放水調控模塊;
所述配置管理模塊用于配置和設定樹狀灌溉供水網絡的數據;所述樹狀灌溉供水網絡的數據包括于:主渠道、支渠道、農田渠道的上下游關系、主渠道和支渠道的儲水量與水位對應關系、農田側需水量與需水指數的對應關系、主渠道和支渠道對農田渠道的分配系數;
所述指數采集模塊用于從所述需水采集終端收集各個農田側的需水指數;
所述指數分析模塊用于根據所述指數采集模塊所采集的農田側的需水指數,結合所述農田側需水量與需水指數的對應關系,計算出相應的農田側需水量,并將該需水量對應至相應的農田渠道中作為相應的農田渠道的需水量,然后根據所述的主渠道、支渠道、農田渠道的上下游關系,對需水量逐級向上匯總得出各個主渠道、支渠道的需水量;
所述水位采集模塊用于通過水位計實時采集各個主渠道和支渠道的水位;
所述水位分析模塊用于根據所述水位采集模塊采集的水位,結合所述的主渠道和支渠道的儲水量與水位對應關系,計算出各個主渠道和支渠道的當前儲水量;
所述渠道注水放水調控模塊用于以廣度優先的方式自上而下遍歷各個的主渠道和支渠道,對每個主渠道和支渠道根據其渠道數據和水閘狀態進行注水和放水控制,直到對所有的農田渠道的放水量滿足其對應的農田側的需水量的要求。
進一步,根據本發明的一種基于明渠的灌溉控制系統,所述渠道注水放水調控模塊包括:初始狀態校驗模塊、定時器和渠道狀態分析模塊;
所述初始狀態校驗模塊用于確定被執行的灌溉所涉及的渠道的水閘都處于正常工作狀態,并且將所有渠道的水閘關閉,然后將需水量大于零的主渠道和分支渠道設定為待注水狀態,同時將需水量為零的主渠道和分支渠道設定為空閑狀態;
所述定時器用于按一定的時間間隔驅動所述渠道狀態分析模塊執行;
所述渠道狀態分析模塊首先分析各渠道的剩余需水量是否為零,當所有的主渠道、支渠道和農田渠道的剩余需水量為零時,則停止定時器并停止對注放水執行模塊的執行命令發送操作,否則遍歷各個主渠道和支渠道,對每個主渠道和支渠道根據其渠道數據狀態進行注水和放水控制。
進一步,根據本發明的一種基于明渠的灌溉控制系統,所述注水和放水控制包括注水控制和放水控制;
所述注水控制是對主渠道的注水控制,將該主渠道標記為注水狀態,開啟該主渠道的水閘對該主渠道進行注水;注水時,實時通過水位計采集該主渠道的水位并根據該主渠道的儲水量與水位的對應關系以及前后水位差估算當前注水的水量;當該主渠道的水位達到設定的上限或者該主渠道的儲水量達到該主渠道的剩余需水量或者當該主渠道的水閘開啟時間超過上限時,關閉該主渠道的水閘,將該主渠道標記為待放水狀態;
所述放水控制計算該渠道所有下游渠道中待注水狀態的農田渠道的總需水量,然后將該總需水量與該渠道的處于待注水狀態的下游支渠道的需水量逐個進行對比;如果該總需水量大于各個下游支渠道的需水量時,對該渠道進行農田渠道的放水控制,否則對該渠道進行下游支渠道的放水控制。
進一步,根據本發明的一種基于明渠的灌溉控制系統,所述放水控制為:將該渠道標記為放水狀態,同時開啟所有處于待注水狀態的下游農田渠道的水閘,對相應的農田渠道進行放水;放水時,根據實時采集的該渠道的水位,計算出當前放水量,然后根據所述主渠道和支渠道對農田渠道的分配系數,計算出該渠道下游各個農田渠道當前的放水量;當農田渠道的放水量達到該農田渠道的需水量時,關閉該農田渠道的水閘;當該渠道的水位達到底線以下時,關閉該渠道所有下游農田渠道的水閘,并計算下游各個農田渠道的剩余需水量和該渠道的剩余需水量;當下游農田渠道的剩余需水量為零時標記該下游農田渠道的狀態為空閑狀態;當該渠道的剩余需水量大于零時,標記該渠道為待注水狀態,否則標記該渠道為空閑狀態。
根據本發明的一種基于明渠的灌溉控制方法,該方法涉及主機、主渠道上游設置的水閘、支渠道上游設置的水閘、農田渠道上游設置的水閘、安裝在所述主渠道和支渠道上的水位計以及位于農田側的需水采集終端;所述水閘、水位計和需水采集終端連接所述主機;所述水位計用于采集主渠道或支渠道的水位,并發送至所述主機;所述需水采集終端用于收集農田側的需水指數發送至所述主機;所述方法包括如下步驟:
s1:獲取主渠道、支渠道、農田渠道的上下游關系、主渠道和支渠道的儲水量與水位對應關系、農田側需水量與需水指數的對應關系以及主渠道和支渠道對農田渠道的分配系數,并初始關閉所有水閘;
s2:通過所述需水采集終端采集農田側的需水指數,結合所采集的農田側的需水指數和農田側的需水量和需水指數的對應關系得到農田側的需水量,然后根據主渠道、支渠道、農田渠道的上下游的關系,對農田側的需水量逐級向上匯總得到計算出各個主渠道、支渠道和農田渠道的需水量;
s3:通過水位計實時采集各個主渠道和支渠道的水位,結合相應的主渠道和支渠道的儲水量與水位對應關系,計算出各個主渠道和支渠道的當前儲水量;
s4:以廣度優先的方式自上而下遍歷各個主渠道和支渠道,對每個主渠道和支渠道根據其渠道數據狀態進行注水和放水控制,直到所有的農田渠道的放水量滿足其對應的農田側的需水量的要求。
本發明的技術效果如下:
1、本發明采用分步控制方法,保證整個渠道灌溉系統的安全;
2、本發明通過水位計計算蓄水量的方式避開了明渠流速流量難以掌控的問題。
3、本發明的分步控制可以控制多個不相關的渠道同時進行開閘和合閘動作,從而提高了灌溉過程效率。
附圖說明
圖1是本發明基于明渠的灌溉控制系統的結構示意圖。
圖2是本發明實施例中灌溉控制軟件的模塊結構示意圖。
圖3是本發明實施例中渠道注水放水調控模塊的模塊結構示意圖。
具體實施方式
下面結合附圖對本發明做進一步詳細說明。
如圖1所示,一種基于明渠的灌溉控制系統涉及主機101、水閘102、需水采集終端103以及水位計。該系統安裝在主機101上,用于對基于明渠的農田灌溉系統的實現智能化灌溉控制。
圖1中,901是作為灌溉水源的水庫,902是主渠道,903是支渠道,904是農田渠道。其中,主渠道902的上游連接水庫901,也就是說主渠道902沒有上游渠道。支渠道903為從主渠道902或另一支渠道903上接出的渠道,也就是說,支渠道903的上游渠道可能是主渠道902,也可能是另一支渠道903。農田渠道904是從主渠道902或支渠道903接出并連接農田的渠道,也就是說農田渠道904的上游渠道可能是主渠道902,也可能是支渠道903。主渠道902、支渠道903和農田渠道904構成樹狀的且具有上下游關系的灌溉供水網絡的農田灌溉系統。通常,主渠道902與其上游的水庫901之間具有較大的高度落差,農田渠道904與其上游的主渠道902或支渠道903之間具有較大的高度落差,而主渠道902與其下游的支渠道903,或者支渠道903與其下游的支渠道903之間的高度落差不是很大,相應地,主渠道902和支渠道903其自身的上游和下游的高度落差也不是很大。需要指出的是,圖1中的主渠道902只有一條,本領域技術人員理解,實際應用中,主渠道902可能有多條。
水閘102位于各種渠道的上游,比如位于主渠道902的上游或位于支渠道903的上游或位于農田渠道904的上游,用于向本渠道注水。開啟本渠道上游的水閘102是向本渠道注水,對于其上游渠道來說是放水。農田灌溉系統上的各種水閘102通常設于水閘房內。主機101設于控制中心的機房內。水閘102通過有線或無線網絡接入主機101,并受主機101的控制。具體來說,水閘102的開關狀態上傳至主機101,主機101能夠向水閘102下發水閘開關的控制指令控制水閘102執行開關動作。
需水采集終端103通常是移動終端,比如智能手機或掌上電腦,位于農田側,用于向主機101上傳其對應農田的需水指數。農田巡檢員對農田巡檢后分析農田是否缺水,然后操作需水采集終端103通過無線網絡向主機101上傳需水指數。需水指數分無需灌溉、例行灌溉、嚴重缺水以及極度缺水四級。默認情形是無需灌溉。需水采集終端103也可以是位于農田側的控制終端。該控制終端安裝在水閘房內,該水閘房也就是用于安裝農田渠道904上游水閘的水閘房。該控制終端至少設有三個按鍵,分別代表例行灌溉、嚴重缺水以及極度缺水三級需水指數。當按下該控制終端的按鍵后,該控制終端將該按鍵對應的需水指數通過水閘房內水閘102與主機101的連接網絡向主機101上傳。
水位計安裝主渠道902和支渠道903內,水位計通過有線或無線網絡接入主機101。水位計用于采集其所安裝的主渠道902或支渠道903當前的水位,并將相應的水位數據上傳至主機101。
主機101上安裝有灌溉控制軟件。主機101通過運行該灌溉控制軟件執行本發明所指的一種基于明渠的灌溉控制方法實現農田灌溉控制。主機101所安裝的灌溉控制軟件所實現的功能也就是本方面所指的一種基于明渠的灌溉控制系統。本實施例中,該灌溉控制系統如圖2所示,包括配置管理模塊221、指數采集模塊211、指數分析模塊212、水位采集模塊231、水位分析模塊232、水閘控制模塊241、以及渠道數據和狀態管理模塊202、渠道注水放水調控模塊201。
配置管理模塊221是ui模塊,用于配置和設定樹狀灌溉供水網絡的數據。樹狀灌溉供水網絡的數據包括但不限于:主渠道、支渠道、農田渠道的上下游關系、主渠道和支渠道的儲水量與水位對應關系、農田側需水量與需水指數的對應關系、主渠道和支渠道對農田渠道的分配系數。配置管理模塊221所配置和設定的數據被傳遞并保存于渠道數據和狀態管理模塊202中。配置管理模塊221對應前述的基于明渠的灌溉控制方法中的步驟s1,也即,獲取主渠道、支渠道、農田渠道的上下游關系、主渠道和支渠道的儲水量與水位對應關系、農田側需水量與需水指數的對應關系以及主渠道和支渠道對農田渠道的分配系數。
指數采集模塊211用于從需水采集終端103收集各個農田側的需水指數。指數采集模塊211包含了網絡連接模塊,通過指數采集模塊211與需水采集終端103所建立的網絡連接獲取需水采集終端103上傳的需水指數。指數分析模塊212用于根據指數采集模塊211所采集的農田側的需水指數,結合渠道數據和狀態管理模塊202中的農田側需水量與需水指數的對應關系,計算出相應的農田側需水量,并將該需水量對應至相應的農田渠道中作為相應的農田渠道的需水量,然后根據渠道數據和狀態管理模塊202中的主渠道、支渠道、農田渠道的上下游關系,對需水量逐級向上匯總得出各個主渠道、支渠道的需水量。指數分析模塊212得到的主渠道、支渠道和農田渠道的需水量被傳遞至并保存于渠道數據和狀態管理模塊202中。指數采集模塊211和指數分析模塊212所實現的功能也就是前述的基于明渠的灌溉控制方法中的步驟s2,也即,通過所述需水采集終端采集農田側的需水指數,結合所采集的農田側的需水指數和農田側的需水量和需水指數的對應關系得到農田側的需水量,然后根據主渠道、支渠道、農田渠道的上下游的關系,對農田側的需水量逐級向上匯總得到計算出各個主渠道、支渠道和農田渠道的需水量。需要指出的是,需水采集終端103所對應的農田側需水指數與其相應的農田渠道一一對應。
水位采集模塊231用于通過水位計實時采集各個主渠道和支渠道的水位。水位采集模塊231包含了網絡連接模塊,通過水位采集模塊231與水位計所建立的網絡連接獲取水位計上傳的水位。由于需要實時采集水位,因此水位采集模塊231需要與各個水位計建立長連接,并維護該連接。而且由于每個主渠道或支渠道中的水位計有多個,水位采集模塊231需要對每個主渠道或支渠道中的多個水位計進行匯總,得到相應渠道的水位。水位分析模塊232用于:根據水位采集模塊231采集的水位,結合渠道數據和狀態管理模塊202中相應的主渠道和支渠道的儲水量與水位對應關系,計算出各個主渠道和支渠道的當前儲水量。水位分析模塊232得到的各個主渠道和支渠道的當前儲水量以及當前水位被傳遞至并保存于渠道數據和狀態管理模塊202中。水位采集模塊231和水位分析模塊232所實現的功能也就是前述的基于明渠的灌溉控制方法中的步驟s3,也就是,通過水位計實時采集各個主渠道和支渠道的水位,結合相應的主渠道和支渠道的儲水量與水位對應關系,計算出各個主渠道和支渠道的當前儲水量。
水閘控制模塊241用于將渠道注水放水調控模塊201對各渠道的水閘控制指令通過網絡下發至各個水閘中執行開啟水閘和關閉水閘的指令,并通過網絡收集各個水閘的開啟和關閉的狀態。
渠道數據和狀態管理模塊202維護和保存了一個由渠道節點所組成的樹形結構的數據。渠道節點保存了渠道數據和狀態。渠道數據和狀態管理模塊202中的各種數據用于渠道注水放水調控模塊201的分析。本實施例中,渠道節點的數據結構定義如下:
struct渠道節點
渠道標識;
渠道類型::={主渠道、支渠道、農田渠道};
上游渠道標識;
下游渠道標識列表;
注水前的水位;
注水前的儲水量;
當前水位;
當前儲水量;
水位上限、水位下限;
與上游渠道的落差;
儲水量與水位對應關系表;
農田側需水量與需水指數的對應關系表;(當渠道類型為農田渠道時有效)
對農田渠道的分配系數;(當渠道類型為農田渠道時有效)
剩余需水量;
水閘標識;
開閘時間;
注水最小時間間隔;
放水目標下游渠道;
渠道狀態::={空閑、待注水、水閘開啟中、注水中、水閘關閉中、待放水、放水中};(當渠道類型為主渠道或支渠道時有效)
endstruct
渠道注水放水調控模塊201用于遍歷各個的主渠道和支渠道,對每個主渠道和支渠道根據其渠道數據狀態進行注水和放水控制,直到對所有的農田渠道的放水量滿足其對應的農田側的需水量的要求。渠道注水放水調控模塊201所實現的功能是前述的基于明渠的灌溉控制方法中的步驟s4,也就是,遍歷各個主渠道和支渠道,對每個主渠道和支渠道根據其渠道數據狀態進行注水和放水控制,直到對所有的農田渠道的放水量滿足其對應的農田側的需水量的要求。由于渠道上游下游的關系,下游渠道的注水也就是上游渠道的放水。本實施例中,由于遍歷過程是由主渠道至支渠道自上而下遍歷,因此,渠道注水放水調控模塊只需要實現主渠道的注水和放水控制和支渠道的放水控制,而支渠道的注水控制由其上游渠道放水控制實現。又由于主渠道的放水控制過程與支渠道的放水控制過程相同,因此,本實施例中,渠道注水放水調控模塊的功能劃分成注水控制和放水控制。注水控制是對主渠道的注水控制,而放水控制則是對主渠道或支渠道的放水控制。也就是,對主渠道來說,當主渠道的狀態為待注水時,執行對該主渠道的注水控制;當主渠道的狀態為待放水狀態時,執行對該主渠道的放水控制。而對支渠道來說,當支渠道的狀態為待放水狀態時,執行對該分渠道的放水控制,否則等待其上游渠道的放水控制將該其狀態修改成待放水狀態。這里涉及兩個控制原則:所有支渠道的水閘由其上游渠道的放水控制作出;所有支渠道的狀態從待注水狀態變遷待放水狀態的過程由其上游渠道的放水控制作出,而從待放水狀態變遷至待注水狀態的過程由其自身渠道的放水控制作出。
注水控制,是對主渠道的注水控制,主要過程如下:將該主渠道標記為注水狀態,開啟該主渠道的水閘對該主渠道進行注水;注水時,實時通過水位計采集該主渠道的水位并根據該主渠道的儲水量與水位的對應關系以及前后水位差估計當前注水的水量;當該主渠道的水位達到設定的上限或者該主渠道的儲水量達到該主渠道的剩余需水量或者當該主渠道的水閘開啟時間超過上限時,關閉該主渠道的水閘,將該主渠道標記為待放水狀態。
放水控制,是對主渠道或支渠道的放水控制,主要過程如下:
計算該渠道所有下游渠道為待注水狀態的農田渠道的總需水量,然后將該總需水量與該渠道的處于待注水狀態的下游支渠道的需水量逐個進行對比;如果該總需水量大于各個下游支渠道的需水量時,對該渠道進行農田渠道的放水控制,否則對該渠道進行下游支渠道的放水控制。也就是放水控制分為農田渠道的放水控制和下游支渠道的放水控制。
對渠道進行農田渠道的放水控制如下:
將該渠道標記為放水狀態,同時開啟所有處于待注水狀態的下游農田渠道的水閘,對相應的農田渠道進行放水;放水時,根據實時采集的該渠道的水位,計算出當前放水量,然后根據所述主渠道和支渠道對農田渠道的分配系數,計算出該渠道下游各個農田渠道當前的放水量;當農田渠道的放水量達到該農田渠道的需水量時,關閉該農田渠道的水閘;當該渠道的水位達到底線以下時,關閉所有該渠道所有下游農田渠道的水閘,并計算下游各個農田渠道的剩余需水量和該渠道的剩余需水量;當下游農田渠道的剩余需水量為零時標記該下游農田渠道的狀態為空閑狀態;當該渠道的剩余需水量大于零時,標記該渠道為待注水狀態,否則標記該渠道為空閑狀態。
對渠道進行下游支渠道的放水控制如下:
選擇該渠道的處于待注水狀態的需水量最大的下游支渠道作為目標支渠道;設置該渠道的狀態為放水狀態,并設置目標支渠道的狀態為注水狀態,同時打開目標支渠道的水閘對目標支渠道進行放水;放水時,根據實時采集的該渠道和目標支渠道的水位,計算出目標支渠道的注水量;當目標支渠道的放水量達到目標支渠道的需水量時或者目標支渠道的水位達到設定的上限時或者目標支渠道的水閘打開時間超過上限時或者當該渠道的水位達到下限時或者該渠道的水位與目標支渠道的落差達到下限時,關閉目標支渠道的水閘,停止對目標支渠道放水,同時標記目標支渠道的狀態為待放水狀態,并同時計算目標支渠道的剩余需水量和該渠道的剩余需水量;當該渠道的水位達到下限且該渠道的剩余需水量為零時,標記該渠道為空閑狀態;當該渠道的水位達到下限且該渠道的剩余需水量大于零時,標記該渠道為待注水狀態;當該渠道的水位高于上限標記該渠道為待放水狀態。
渠道注水放水調控模塊201的注水控制和放水控制具體到本實施例中由定時器驅動。如圖3所示,渠道注水放水調控模塊201包括灌溉決策模塊31和灌溉執行模塊32。灌溉決策模塊用于通過需水量分析、灌溉執行周期、結合最近天氣預報情況作出是否執行灌溉程序。灌溉程序由灌溉執行模塊32所執行。灌溉執行模塊32包括初始狀態校驗模塊321、定時器322和渠道狀態分析模塊323。
初始化校驗模塊321用于確定被執行的灌溉所涉及的渠道的水閘都處于正常工作狀態,并且將所有渠道的水閘關閉,然后將需水量大于零的主渠道和分支渠道設定為待注水狀態,同時將需水量為零的主渠道和分支渠道設定為空閑狀態。也就是,初始化校驗模塊321需要確保所有渠道的水閘需要關閉,并且避開那些無法正常工作正處于維修或檢修狀態的水閘和水閘所對應的渠道。
定時器322用于按一定的時間間隔驅動渠道狀態分析模塊323執行。渠道狀態分析模塊323首先分析各渠道的剩余需水量為零,當所有的主渠道、支渠道和農田渠道的剩余需水量為零時,則停止定時器322以及灌溉執行模塊323的執行,否則遍歷各個主渠道和支渠道,對每個主渠道和支渠道根據其渠道數據狀態進行注水和放水控制。渠道狀態分析模塊遍歷時,首先遍歷各個主渠道:當主渠道的狀態為待注水狀態時,由渠道注水執行狀態分析模塊3231對該主渠道執行注水控制,當主渠道的狀態為待放水狀態時,由渠道放水執行狀態分析模塊對該主渠道執行放水控制;然后再遍歷各個支渠道:當該支渠道的狀態為待放水狀態時,由渠道放水執行狀態分析模塊3232對該支渠道執行放水控制。
考慮到水閘開啟和關閉需要一定的時間,而且由主機下發控制指令至各個渠道的水閘需要一定的時間。由此,本實施例中,注水狀態進一步細化成:水閘開啟中、注水中和水閘關閉中三種狀態。上述細化的注水狀態和放水狀態詳見前述的渠道節點的狀態定義。
此外,由于水閘開啟和關閉的時間問題。定時器322所設定的時間間隔不小于水閘開啟和關閉的時間。一般來說,水閘開啟和關閉需要1分鐘左右的時間,由此定時器322所設定的時間間隔為1~2分鐘。也就是說,定時器322驅動執行的渠道狀態分析模塊323實質上是一個有限狀態自動機。渠道狀態分析模塊323的每一次執行,渠道的狀態最多只變化一次。在該有限狀態自動機內,主渠道和支渠道的狀態變遷如下:
待注水=>水閘開啟中=>注水中=>水閘關閉中=>待放水=>放水中=>.......=>待注水=>水閘開啟中=>注水中=>水閘關閉中=>待放水=>放水中=>空閑。
農田渠道的狀態變遷如下:待注水=>水閘開啟中=>注水中=>水閘關閉中=>.......=>待注水=>水閘開啟中=>注水中=>水閘關閉中=>空閑。
渠道狀態分析模塊323需要對各個渠道進行廣度優先遍歷。具體過程如下為:對各個渠道節點進行廣度優先遍歷,對于每個渠道節點而言,首先判斷該渠道節點的類型,然后根據渠道節點的類型分別執行。
如果是主渠道,分析渠道狀態:如果是待注水狀態、或水閘開啟中狀態、或注水中狀態、或水閘關閉中狀態,則由渠道注水執行狀態分析模塊3231執行注水控制;如果是待放水狀態、或放水中狀態由渠道放水執行狀態分析模塊3232執行放水控制;如果是空閑狀態,則直接返回。
如果是支渠道,分析渠道狀態:如果是待放水狀態、或放水中狀態由渠道放水執行狀態分析模塊3232執行放水控制;否則直接返回。
渠道注水執行狀態分析模塊3231分析主渠道的狀態,然后根據狀態分別執行:
如果是待注水狀態,則開啟水閘,并將狀態修改成水閘開啟中狀態;
如果是水閘開啟中狀態,則判斷水閘是否開啟:如果水閘正常開啟,則修改狀態為注水中狀態;如果水閘無法正常開啟,則拋出異常,對異常進行處理;
如果是注水中狀態,則判斷通過水位計采集該主渠道的水位并根據該主渠道的儲水量與水位的對應關系以及前后水位差估計當前注水的水量;當該主渠道的水位達到設定的上限或者該主渠道的儲水量達到該主渠道的剩余需水量或者當該主渠道的水閘開啟時間超過上限時,關閉水閘,并將狀態修改成水閘關閉中狀態;
如果是水閘關閉中狀態,判斷水閘是否關閉;如果水閘正常關閉,則將狀態修改成待放水狀態。
渠道放水執行狀態分析模塊3232分析渠道的狀態,然后根據狀態分別執行:
如果是待放水狀態,則計算該渠道所有下游渠道為待注水狀態的農田渠道的總需水量,然后將該總需水量與該渠道的處于待注水狀態的下游支渠道的需水量逐個進行對比;如果該總需水量大于各個下游支渠道的需水量時,對該渠道進行農田渠道的放水控制,否則對該渠道進行下游支渠道的放水控制;農田渠道的放水控制時,同時開啟所有處于待注水狀態的下游農田渠道的水閘,對相應的農田渠道進行放水,同時標記相應的農田渠道狀態為水閘開啟中狀態,同時設置該渠道的狀態為放水中狀態;下游支渠道的放水控制時,選擇該渠道的處于待注水狀態的需水量最大的下游支渠道作為目標支渠道,然后開啟目標支渠道,設置目標支渠道的狀態為水閘開啟中狀態,同時設置該渠道的狀態為放水中狀態;
如果是放水中狀態,則分析各個相應的下游渠道處于水閘開啟中狀態的水閘是否正常開啟;如果正常開啟,則將相應的下游渠道的狀態修改成注水中狀態;如果不能正常開啟,則拋出異常,對異常進行處理;然后分析分析各個相應的下游渠道處于水閘關閉中狀態的水閘是否正常關閉;如果正常關閉,則計算下游渠道的剩余需水量,如果剩余需水量大于零,則將相應的下游渠道的狀態修改成待注水狀態,否則將相應的下游渠道的狀態修改成空閑狀態;在所有下游渠道水閘關閉的情形下,計算該渠道的剩余需水量,如果該渠道的剩余需水量大于零,則修改該渠道的狀態為待注水狀態,否則修改該渠道的狀態為空閑狀態;如果下游渠道水閘不能正常關閉,則拋出異常,對異常進行處理;在所有渠道水閘正常開啟或關閉的狀態下,如果是對農田渠道放水,則根據實時采集的該渠道的水位,計算出當前放水量,然后根據所述主渠道和支渠道對農田渠道的分配系數,計算出該渠道下游各個農田渠道當前的放水量;當農田渠道的放水量達到該農田渠道的需水量時,關閉該農田渠道的水閘,設置該農田渠道的狀態為水閘關閉中;當該渠道的水位達到底線以下時,關閉所有該渠道所有處于注水中狀態的下游農田渠道的水閘,并將相應的農田渠道的狀態修改為下游農田渠道的狀態為水閘關閉中;所有渠道水閘正常開啟或關閉的狀態下,如果是對目標支渠道放水,根據實時采集的該渠道和目標支渠道的水位,計算出目標支渠道的注水量;當目標支渠道的放水量達到目標支渠道的需水量時或者目標支渠道的水位達到設定的上限時或者目標支渠道的水閘打開時間超過上限時或者當該渠道的水位達到下限時或者該渠道的水位與目標支渠道的落差達到下限時,關閉目標支渠道的水閘,停止對目標支渠道放水,同時標記目標支渠道的狀態為水閘關閉中狀態。
也就是說,本實施中,渠道狀態分析模塊323的渠道注水執行狀態分析模塊3231和渠道放水執行狀態分析模塊3232將前述的注水控制和放水控制的動作進行拆分,然后根據相應的狀態進行分別處理。