專利名稱:一種滿足時標傳遞的開關量邏輯運算方法
技術領域:
本發(fā)明涉及一種工業(yè)控制系統的運算方法,尤其是一種滿足時標傳遞的開關量邏
輯運算方法。
背景技術:
現有工業(yè)分布式控制系統中,需要對700個左右的開關量進行帶時標能的邏輯運 算。這些開關量數據來自不同的分布式部署的I/0控制站,I/O控制站對這些開關量數據 的采集周期為40ms,各1/0站采集到數據后,集中傳送至系統服務器實時數據庫,因此計算 周期必須小于40ms。 由于需要運算的開關量數據可能分布在不同的I/O站,因此如果將此運算任務部 署在1/0站則涉及到數據的站間引用,而1/0站數據的站間引用為秒級,難以實現。因此需 要將此計算任務部署在系統服務器。 此類開關量邏輯運算目前常見的解決方案有兩種 某運算任務A,分離線和在線兩部分即離線部分進行邏輯表達式的解析和編譯, 在線部分加載編譯后的目標算法文件并執(zhí)行運算。離線部分處理過程如圖1所示1、先按 照約定的格式編輯文本方式的邏輯方程源文件;2、離線軟件加載此文件并解析,翻譯為等 價的中間代碼的邏輯方程源文件;3、調用相關平臺接口編譯此中間代碼邏輯方程源代碼, 生成目標文件。比如VBA代碼就是一種成熟的中間格式。在線部分處理過程如圖2所示 1、在線軟件加載離線軟件編譯生成的目標文件;2、向實時數據庫讀取邏輯方程所包含的所 有開關量值、時標、以及無效位;3、調用相關平臺接口函數,執(zhí)行邏輯算法進行運算;4、將 計算的結果寫回數據庫,其中,2、3、4為周期處理,同時因為調用中間平臺接口執(zhí)行運算,所 以運算周期比較長。 采用此種方式,雖然可以省去運算任務自己處理編譯和執(zhí)行運算邏輯,但是由于 每次計算都需要向實時數據庫讀寫所有的開關量值,所以當需要計算的開關量點很多的時 候,讀寫數據庫就會耗費大量的時間。根據當前實時數據庫的性能只能將此任務的最小運 算周期為500ms,而在實際測試中,讀寫1000個左右開關量大約各需要耗費200ms,計算需 要耗費100ms。 同樣由于是周期500ms向實時數據庫讀取全部開關量值,而開關量的采集周期為
40ms,所以很容易產生遺漏數據的情況發(fā)生,最終導致計算結果不正確。 某運算任務B處理流程圖如圖3所示1、讀數據庫獲得邏輯運算所需要的開關量
值;2、解析算法邏輯;3、執(zhí)行計算;4、計算結果寫數據庫。此四個部分為周期循環(huán)執(zhí)行,每
次做的工作完全一樣。此類解決方法為典型的解釋執(zhí)行方式。即對所有邏輯方程解釋一
條執(zhí)行一條,周期反復。此種方法由于每個周期都需要進行讀數據庫、解析邏輯表達式、執(zhí)
行運算、寫數據庫,存在的問題與運算任務A相似,并且由于需要周期解釋同一個邏輯表達
式所以更耗時,運算效率比較低。
有鑒于此特提供本發(fā)明。
發(fā)明內容
本發(fā)明要解決的技術問題在于克服現有技術的不足,提供一種滿足時標傳遞的開
關量邏輯運算方法,該滿足時標傳遞要求的開關量運算數據安全、準確、執(zhí)行計算效率高。 為解決上述技術問題,本發(fā)明采用技術方案的基本構思是一種滿足時標傳遞的 開關量邏輯運算方法,其特征在于所述的實現方法為a、由實時數據庫向計算任務發(fā)送 變化的開關量數據;b、將輸送進數據區(qū)中變化的開關量數據采用哈希表結構存儲;C、在計 算任務啟動的同時讀取解析源表達式,通過解析將文本格式邏輯方程轉換為自定義格式存 儲的邏輯表達式;d、于計算任務中直接調用步驟b中存儲的開關量數據和步驟c中按自定 義格式存儲的邏輯表達式,執(zhí)行計算;e、將計算任務的結果寫入實時數據庫。
所述的步驟a為通過通信接口將實時數據庫中變化的開關量數據向計算任務發(fā) 送,步驟e將計算任務的計算結果通過通信接口寫進實時數據庫。 所述的步驟c中的文本格式邏輯方程為已有編輯好的源文件,該邏輯方程有兩種類 型i純二元運算的表達式和ii含有函數的二元運算表達式,其解析轉換包括先將所描述 的邏輯方程ii中包含的函數,用一個臨時變量代替,同時ii生成一個新的邏輯方程,i和ii 表達式為字符串形式;然后對其進行詞法分析、語法分析,識別出等號、計算結果、操作數、操 作符以及函數名和函數參數信息,得到中間格式邏輯方程二元邏輯表達式和函數等式;最 后再將中綴的形式轉換為等價的后綴形式,生成新的邏輯算法,以表格的方式存儲起來。
所述的步驟C中二元邏輯表達式調入步驟d中具體的運算方法為第一,開始;第 二、判斷是否掃描完?若是,則計算結束,從棧頂取得計算結果,若否,則進行下一步;第三、 讀一個單詞;第四、判斷是否為操作數?若是,則此單詞進棧,然后轉到步驟二,若否,則進 行下一步;第五、判斷是否為操作符?若否,則語法錯誤,程序退出,若是,則進行下一步; 第六、取棧頂兩個操作數;第七、運算此兩個操作數和此操作符組成的二元運算;第八、計 算結果壓棧,轉到步驟二。
所述的步驟C中函數等式調入步驟d中具體的運算方法為開始;取出函數名;取
出參數;根據函數名調用函數,并傳入參數,執(zhí)行計算;得到計算結果。 采用上述技術方案后,本發(fā)明與現有技術相比具有以下有益效果 1 、實時數據庫向本運算任務發(fā)送變化的開關量數據,此方法解決了計算任務向實
時數據庫讀全數據導致的大量時間耗費的問題。這是由于實時數據庫總是最先感知到數據
的變化(服務器層),所以也不會有數據丟失的問題,并發(fā)生變化的數據總是一部分數據,
所以減少了通信量,提高了通信效率; 2、數據區(qū)變量的存儲采用哈希表,提高運算過程中操作數值的查詢效率; 3、邏輯表達式在任務啟動時就執(zhí)行解析,并采用自定義的表格進行存儲,在運算
過程中直接從此表格讀取邏輯表達式執(zhí)行運算,提高了運算效率; 4、計算任務將計算結果通過通信接口寫進實時數據庫,提高了通信效率。 下面結合附圖對本發(fā)明的具體實施方式
作進一步詳細的描述。
圖1是現有技術運算任務A離線部分處理過程流程4
圖2是現有技術運算任務A在線部分處理過程流程圖; 圖3是現有技術運算任務B解釋運算方式流程圖; 圖4是本發(fā)明運算程序體系結構和數據流程圖; 圖5是本發(fā)明邏輯方程解析轉換步驟示意圖; 圖6是本發(fā)明二元邏輯表達式運算步驟示意圖; 圖7是本發(fā)明函數等式運算步驟示意圖。
具體實施例方式
如圖4至圖7所示,公開了本發(fā)明一種滿足時標傳遞的開關量邏輯運算方法。如 圖4所示,為本發(fā)明運算程序體系結構和數據流圖,其中,a、由實時數據庫向計算任務通過 通信接口發(fā)送變化的開關量數據;b、將輸送進數據區(qū)中變化的開關量數據采用哈希表結構 存儲;c、在計算任務啟動的同時讀取解析源表達式,通過解析將文本格式邏輯方程轉換為 自定義格式存儲的邏輯表達式;d、于計算任務中直接調用步驟b中存儲的開關量數據和步 驟c中按自定義格式存儲的邏輯表達式,執(zhí)行計算;e、將計算任務的結果通過通信接口寫 入實時數據庫。 實時數據庫向本運算任務發(fā)送變化的開關量數據,此方法解決了計算任務向實時 數據庫讀全數據導致的大量時間耗費的問題。這是由于實時數據庫總是最先感知到數據的 變化(服務器層),所以也不會有數據丟失的問題,并發(fā)生變化的數據總是一部分數據,所 以減少了通信量,提高了通信效率。 數據區(qū)中的開關量采用哈希表結構存儲,提高了運算過程中變量數據值查詢的效 率。 采用任務啟動時讀取解析源表達式的方法,這樣就避免了技術背景B類解釋執(zhí)行 方式,每次計算都需要重新解析表達式,帶來的時間耗費,解析后的邏輯算法按自定義的格 式存儲。如圖5所示,具體實現步驟為 f、假設已有編輯好的邏輯方程源文件,邏輯方程有兩種類型i純二元運算的 表達式和ii含有函數的二元運算表達式,如字符串格式方程i、 A = BlC和ii、 A = B&C|Fun(AA,BB); g、將ii所描述的邏輯方程A = B&C|Fun(AA,BB)中包含的函數Fun (AA,BB),用一 個臨時變量Tempi代替,同時生成一個新的邏輯方程ii、A = B&C | Tempi, Tempi = Fun(AA, 啦; h、以上所得的邏輯方程都是字符串的形式,還沒有任何邏輯意義,此步驟需要進 行詞法分析,語法分析,識別出等號、計算結果、操作數、操作符以及函數名和函數參數等等 信息,生成新的中間格式邏輯方程,即二元邏輯表達式i、 〃 A〃 〃 =〃 〃 B〃 〃 r 〃 C" 和函數等式ii、 〃 A〃 〃 =〃 〃 B〃 〃 &〃 〃 C〃 〃 I" 〃 Tempi" , 〃 Tempi 〃 〃 =〃 〃 Fun" 〃 AA〃 〃 BB"; i、由于計算機處理的特點更適合后綴的形式,所以此步,需要將中 綴的形式轉換為等價的后綴形式,如A+B為中綴形式,即操作數在兩個操作 符之間,這是人類比較習慣的格式,AB+為后綴形式,計算機更易處理此種方 式,更改的后綴形式為i、 " A" " =" " B" " C" " I"和ii、 " A〃 〃<formula>formula see original document page 6</formula>
最后將i步驟生成的邏輯算法,以表格的方式存儲起來,計算時,在讀此表執(zhí)行計算。 計算任務直接調用c中生成的邏輯算法,這樣避免了技術背景A類運算方法中由
于采用第三方接口實現運算帶來的計算效率低下的問題。 具體實現步驟為 對于c解析后生成的邏輯算法<formula>formula see original document page 6</formula>
要進行區(qū)分,采用不同的方式運算,如圖6和7所示。 如圖6所示,二元邏輯表達式i運算方法為第一,開始;第二、判斷是否掃描完? 若是,則計算結束,從棧頂取得計算結果,若否,則進行下一步;第三、讀一個單詞;第四、判 斷是否為操作數?若是,則此單詞進棧,然后轉到步驟二,若否,則進行下一步;第五、判斷 是否為操作符?若否,則語法錯誤,程序退出,若是,則進行下一步;第六、取棧頂兩個操作 數;第七、運算此兩個操作數和此操作符組成的二元運算;第八、計算結果壓棧,轉到步驟 如圖7所示,函數等式ii運算方法為開始;取出函數名;取出參數;根據函數名 調用函數,并傳入參數,執(zhí)行計算;得到計算結果。 在d步驟的運行中,假如需要計算A = B | C,由于B和C實際代表的是一個數值,這 個數值就是通過變量名,從數據區(qū)查詢到的,比如最終實際運算的邏輯可能是O = 0|0。
本發(fā)明的運算方法提高了計算效率,將250個邏輯方程包含700個左右的開關量 在40ms內完成計算;解決了開關量采集周期為40ms的情況下,運算不丟數據,運算正確。
權利要求
一種滿足時標傳遞的開關量邏輯運算方法,其特征在于所述的實現方法為a、由實時數據庫向計算任務發(fā)送變化的開關量數據;b、將輸送進數據區(qū)中變化的開關量數據采用哈希表結構存儲;c、在計算任務啟動的同時讀取解析源表達式,通過解析將文本格式邏輯方程轉換為自定義格式存儲的邏輯表達式;d、于計算任務中直接調用步驟b中存儲的開關量數據和步驟c中按自定義格式存儲的邏輯表達式,執(zhí)行計算;e、將計算任務的結果寫入實時數據庫。
2. 根據權利要求1所述的一種滿足時標傳遞的開關量邏輯運算方法,其特征在于所 述的步驟a為通過通信接口將實時數據庫中變化的開關量數據向計算任務發(fā)送,步驟e將 計算任務的計算結果通過通信接口寫進實時數據庫。
3. 根據權利要求1所述的一種滿足時標傳遞的開關量邏輯運算方法,其特征在于所 述的步驟C中的文本格式邏輯方程為已有編輯好的源文件,該邏輯方程有兩種類型i純二 元運算的表達式和ii含有函數的二元運算表達式,其解析轉換包括先將所描述的邏輯方 程ii中包含的函數,用一個臨時變量代替,同時ii生成一個新的邏輯方程,i和ii表達式 為字符串形式;然后對其進行詞法分析、語法分析,識別出等號、計算結果、操作數、操作符 以及函數名和函數參數信息,得到中間格式邏輯方程二元邏輯表達式和函數等式;最后 再將中綴的形式轉換為等價的后綴形式,生成新的邏輯算法,以表格的方式存儲起來。
4. 根據權利要求3所述的一種滿足時標傳遞的開關量邏輯運算方法,其特征在于所 述的步驟C中二元邏輯表達式調入步驟d中具體的運算方法為第一,開始;第二、判斷是 否掃描完?若是,則計算結束,從棧頂取得計算結果,若否,則進行下一步;第三、讀一個單 詞;第四、判斷是否為操作數?若是,則此單詞進棧,然后轉到步驟二,若否,則進行下一步; 第五、判斷是否為操作符?若否,則語法錯誤,程序退出,若是,則進行下一步;第六、取棧頂 兩個操作數;第七、運算此兩個操作數和此操作符組成的二元運算;第八、計算結果壓棧, 轉到步驟二。
5. 根據權利要求3所述的一種滿足時標傳遞的開關量邏輯運算方法,其特征在于所 述的步驟C中函數等式調入步驟d中具體的運算方法為開始;取出函數名;取出參數;根 據函數名調用函數,并傳入參數,執(zhí)行計算;得到計算結果。
全文摘要
本發(fā)明公開了一種滿足時標傳遞的開關量邏輯運算方法,其特征在于所述的實現方法為a、由實時數據庫向計算任務發(fā)送變化的開關量數據;b、將輸送進數據區(qū)中變化的開關量數據采用哈希表結構存儲;c、在計算任務啟動的同時讀取解析源表達式,通過解析將文本格式邏輯方程轉換為自定義格式存儲的邏輯表達式;d、于計算任務中直接調用步驟b中存儲的開關量數據和步驟c中按自定義格式存儲的邏輯表達式,執(zhí)行計算;e、將計算任務的結果寫入實時數據庫。本發(fā)明提高了計算效率,將250個邏輯方程包含700個左右的開關量在40ms內完成計算;解決了開關量采集周期為40ms的情況下,運算不丟數據,運算正確,計算效率高。
文檔編號G05B19/02GK101727073SQ200810172530
公開日2010年6月9日 申請日期2008年10月27日 優(yōu)先權日2008年10月27日
發(fā)明者丁長富, 左新, 王進, 白濤, 石桂連 申請人:北京廣利核系統工程有限公司