本發(fā)明涉及自動(dòng)控制技術(shù)領(lǐng)域,尤其涉及一種順序控制方法。
背景技術(shù):
順序控制技術(shù)是自動(dòng)控制技術(shù)的一個(gè)重要分支,是與反饋控制技術(shù)相媲美的極其重要的控制技術(shù)。順序控制是指設(shè)備工作過程中按照邏輯、順序、定時(shí)或計(jì)數(shù)等規(guī)則,在輸入命令的作用下,按預(yù)先設(shè)定的順序或按一定邏輯設(shè)定的順序控制執(zhí)行機(jī)構(gòu)動(dòng)作的自動(dòng)控制。隨著電子技術(shù)日新月異的發(fā)展,dsp(數(shù)字信號(hào)處理器)、arm(先進(jìn)的精簡(jiǎn)指令集處理器)、cpu(中央處理器)等大規(guī)模集成電路在順序控制領(lǐng)域得到廣泛的應(yīng)用,順序控制的邏輯和時(shí)序依賴于軟件實(shí)現(xiàn)。目前,常規(guī)的解決方法是根據(jù)用戶的邏輯和時(shí)序需求,編制順序執(zhí)行的軟件;存在開發(fā)效率低、錯(cuò)誤率高和難以維護(hù)的問題。
技術(shù)實(shí)現(xiàn)要素:
鑒于上述的分析,本發(fā)明旨在提供一種順序控制方法,用以解決現(xiàn)有順序控制方法開發(fā)效率低、錯(cuò)誤率高和難以維護(hù)的問題。
本發(fā)明的目的主要是通過以下技術(shù)方案實(shí)現(xiàn)的:
一種順序控制方法,包括以下步驟:
步驟s1、建立順序控制的動(dòng)作庫(kù);
步驟s2、生成順序控制的動(dòng)作流;
步驟s3、生成順序控制的控制流;
步驟s4、控制引擎加載控制流并執(zhí)行順序控制。
所述步驟s1包括以下子步驟:
步驟s101:定義與控制設(shè)備相匹配的動(dòng)作;
步驟s102:為每個(gè)動(dòng)作定義屬性參數(shù);
步驟s103:將與控制設(shè)備相匹配的動(dòng)作和每個(gè)動(dòng)作的屬性參數(shù)存儲(chǔ)至數(shù)據(jù)庫(kù),作為動(dòng)作庫(kù)。
所述與控制設(shè)備相匹配的動(dòng)作包括但不限于:開關(guān)量輸出、開關(guān)量讀入、模擬量輸出、模擬量讀入和數(shù)字通信;
為每個(gè)動(dòng)作定義的屬性參數(shù)包括:動(dòng)作類型、動(dòng)作內(nèi)容、運(yùn)行時(shí)刻、等待時(shí)間、運(yùn)行正常時(shí)的下個(gè)動(dòng)作以及運(yùn)行異常時(shí)的下個(gè)動(dòng)作。
所述動(dòng)作類型包括:僅執(zhí)行、僅等待、先執(zhí)行后等待、先等待后執(zhí)行、正常則終止的周期行為、異常則終止的周期行為、正常則終止的單次行為和異常則終止的單次行為。
所述步驟s2包括以下子步驟:
步驟s201:根據(jù)順序控制的實(shí)際需求,將用戶輸入的控制流程切分為多個(gè)順序執(zhí)行的動(dòng)作,所述動(dòng)作為動(dòng)作庫(kù)內(nèi)已定義的動(dòng)作;
步驟s202:為切分的每個(gè)動(dòng)作配置屬性參數(shù);
步驟s203:將完成屬性參數(shù)配置的所有動(dòng)作的集合作為動(dòng)作流,存儲(chǔ)至文本文件,將動(dòng)作流的名稱作為動(dòng)作流的唯一標(biāo)識(shí)。
所述步驟s3包括以下子步驟:
步驟s301:根據(jù)順序控制的實(shí)際需求,為控制流程配置屬性參數(shù);
步驟s302:將完成屬性參數(shù)配置的控制流程作為控制流,存儲(chǔ)至文本文件,將控制流名稱作為控制流的唯一標(biāo)識(shí)。
為控制流程配置的屬性參數(shù)包括:入口條件、動(dòng)作流名稱、出口處理以及終止命令。
所述步驟s4包括以下子步驟:
步驟s401:將存儲(chǔ)動(dòng)作流的文件加載至數(shù)據(jù)庫(kù);
步驟s402:將存儲(chǔ)控制流的文件加載至數(shù)據(jù)庫(kù);
步驟s403:?jiǎn)?dòng)控制引擎;
步驟s404:控制引擎根據(jù)控制流名稱加載控制流;
步驟s405:控制引擎根據(jù)控制流配置的屬性參數(shù)運(yùn)行動(dòng)作流。
本發(fā)明有益效果如下:
本發(fā)明提供了一種順序控制方法,實(shí)現(xiàn)了對(duì)順序控制流程的抽象、分解和重構(gòu),可有效提高順序控制類軟件的開發(fā)效率,降低開發(fā)的錯(cuò)誤率,提高可維護(hù)性。
本發(fā)明的其他特征和優(yōu)點(diǎn)將在隨后的說明書中闡述,并且,部分的從說明書中變得顯而易見,或者通過實(shí)施本發(fā)明而了解。本發(fā)明的目的和其他優(yōu)點(diǎn)可通過在所寫的說明書、權(quán)利要求書、以及附圖中所特別指出的結(jié)構(gòu)來實(shí)現(xiàn)和獲得。
附圖說明
附圖僅用于示出具體實(shí)施例的目的,而并不認(rèn)為是對(duì)本發(fā)明的限制,在整個(gè)附圖中,相同的參考符號(hào)表示相同的部件。
圖1為本發(fā)明順序控制方法流程圖;
圖2(a)-圖2(g)為控制引擎運(yùn)行動(dòng)作流的流程圖。
具體實(shí)施方式
下面結(jié)合附圖來具體描述本發(fā)明的優(yōu)選實(shí)施例,其中,附圖構(gòu)成本申請(qǐng)一部分,并與本發(fā)明的實(shí)施例一起用于闡釋本發(fā)明的原理。
本發(fā)明的一個(gè)具體實(shí)施例,公開了一種順序控制方法,該方法流程圖如圖1所示,具體包括以下步驟:
步驟s1、建立順序控制的動(dòng)作庫(kù),具體包括以下子步驟:
步驟s101:定義與控制設(shè)備相匹配的動(dòng)作,包括但不限于:開關(guān)量輸出、開關(guān)量讀入、模擬量輸出、模擬量讀入、數(shù)字通信等;
步驟s102:為每個(gè)動(dòng)作定義屬性參數(shù),包括:動(dòng)作類型、動(dòng)作內(nèi)容、運(yùn)行時(shí)刻、等待時(shí)間、運(yùn)行正常時(shí)的下個(gè)動(dòng)作以及運(yùn)行異常時(shí)的下個(gè)動(dòng)作;
步驟s103:將與控制設(shè)備相匹配的動(dòng)作和每個(gè)動(dòng)作的屬性參數(shù)存儲(chǔ)至數(shù)據(jù)庫(kù),作為動(dòng)作庫(kù)。
步驟s2、生成順序控制的動(dòng)作流,具體包括以下子步驟:
步驟s201:根據(jù)順序控制的實(shí)際需求,將用戶輸入的控制流程切分為多個(gè)順序執(zhí)行的動(dòng)作;所述動(dòng)作為動(dòng)作庫(kù)內(nèi)已定義的動(dòng)作。
步驟s202:為切分的每個(gè)動(dòng)作配置屬性參數(shù);
步驟s203:將完成屬性參數(shù)配置的所有動(dòng)作的集合作為動(dòng)作流,存儲(chǔ)至文本文件,將動(dòng)作流的名稱作為動(dòng)作流的唯一標(biāo)識(shí)。
具體地,為切分的每個(gè)動(dòng)作配置的屬性參數(shù)如下:
a)動(dòng)作類型包括:僅執(zhí)行、僅等待、先執(zhí)行后等待、先等待后執(zhí)行、正常則終止的周期行為、異常則終止的周期行為、正常則終止的單次行為和異常則終止的單次行為。
各類型的適用情況如下:
1)“僅執(zhí)行”適用于在某一時(shí)刻執(zhí)行某種動(dòng)作;
2)“僅等待”適用于在兩個(gè)動(dòng)作之間的延時(shí);
3)“先執(zhí)行后等待”適用于在某一時(shí)刻執(zhí)行某種行為后需要延時(shí)的動(dòng)作;
4)“先等待后執(zhí)行”適用于在延時(shí)一定時(shí)間后再執(zhí)行某種行為的動(dòng)作;
5)“正常則終止的周期行為”適用于在一定時(shí)間內(nèi)隨著控制引擎周期執(zhí)行某種行為,直至超時(shí)或運(yùn)行結(jié)果正常方可終止的動(dòng)作;
6)“異常則終止的周期行為”適用于在一定時(shí)間內(nèi)隨著控制引擎周期執(zhí)行某種行為,直至超時(shí)或運(yùn)行結(jié)果異常方可終止的動(dòng)作;
7)“正常則終止的單次行為”適用于在一定時(shí)間內(nèi)的某一時(shí)刻執(zhí)行某種行為其余時(shí)間在等待,直至超時(shí)或運(yùn)行結(jié)果正常方可終止運(yùn)行的動(dòng)作;
8)“異常則終止的單次行為”適用于在一定時(shí)間內(nèi)的某一時(shí)刻執(zhí)行某種行為其余時(shí)間在等待,直至超時(shí)或運(yùn)行結(jié)果異常方可終止運(yùn)行的動(dòng)作。
b)動(dòng)作內(nèi)容是指順序控制過程中與控制設(shè)備相關(guān)的具體動(dòng)作;
c)運(yùn)行時(shí)刻是指以控制引擎運(yùn)行開始為零點(diǎn)的絕對(duì)時(shí)刻,設(shè)置為零時(shí)無效;
d)等待時(shí)間是指以當(dāng)前動(dòng)作開始執(zhí)行為零點(diǎn)的時(shí)間;
e)運(yùn)行正常時(shí)的下個(gè)動(dòng)作是指當(dāng)前動(dòng)作執(zhí)行結(jié)果正常時(shí),將要自動(dòng)運(yùn)行的下個(gè)動(dòng)作;
f)運(yùn)行異常時(shí)的下個(gè)動(dòng)作是指當(dāng)前動(dòng)作執(zhí)行結(jié)果異常時(shí),將要自動(dòng)運(yùn)行的下個(gè)動(dòng)作。所述運(yùn)行異常包含3種情況:結(jié)果不正常、過程被終止和屬性參數(shù)配置錯(cuò)誤。
步驟s3、生成順序控制的控制流,具體包括以下子步驟:
步驟s301:根據(jù)順序控制的實(shí)際需求,為控制流程配置屬性參數(shù),包括:入口條件、動(dòng)作流名稱、出口處理以及終止命令;
步驟s302:將完成屬性參數(shù)配置的控制流程作為控制流,存儲(chǔ)至文本文件,將控制流名稱作為控制流的唯一標(biāo)識(shí)。
步驟s4、控制引擎加載控制流并執(zhí)行順序控制;
所述控制引擎每毫秒運(yùn)行一次,根據(jù)當(dāng)前動(dòng)作的屬性以及當(dāng)前時(shí)刻綜合判斷后執(zhí)行當(dāng)前動(dòng)作,在終止命令有效時(shí)可以終止引擎運(yùn)行。
具體地,所述步驟s4包括以下子步驟:
步驟s401:將存儲(chǔ)動(dòng)作流的文件加載至數(shù)據(jù)庫(kù);
步驟s402:將存儲(chǔ)控制流的文件加載至數(shù)據(jù)庫(kù);
步驟s403:?jiǎn)?dòng)控制引擎;
步驟s404:控制引擎根據(jù)控制流名稱加載控制流;
步驟s405:控制引擎根據(jù)控制流配置的屬性參數(shù)運(yùn)行動(dòng)作流,具體地,如圖2(a)所示,包括:
a)置控制流運(yùn)行標(biāo)志為有效;
b)判斷控制流的入口條件是否滿足,滿足則調(diào)用動(dòng)作流,執(zhí)行c)條,不滿足則跳轉(zhuǎn)至n)條;
c)讀取當(dāng)前時(shí)刻t0;
d)判斷當(dāng)前動(dòng)作是否能與動(dòng)作庫(kù)內(nèi)的已定義動(dòng)作匹配,匹配則執(zhí)行e)條,不匹配則跳轉(zhuǎn)至n)條;
e)判斷終止命令是否有效,無效則根據(jù)當(dāng)前動(dòng)作的動(dòng)作類型運(yùn)行f)條、g)條、h)條、i)條、j)條、k)條、l)條或m)條,有效則跳轉(zhuǎn)至n)條;
f)“僅執(zhí)行”類型的運(yùn)行過程如圖2(b)所示:
1)執(zhí)行當(dāng)前動(dòng)作的動(dòng)作內(nèi)容;
2)存儲(chǔ)運(yùn)行結(jié)果;
3)判斷運(yùn)行結(jié)果為正常,則將當(dāng)前動(dòng)作更新為運(yùn)行正常時(shí)的下個(gè)動(dòng)作,否則將當(dāng)前動(dòng)作更新為運(yùn)行異常時(shí)的下個(gè)動(dòng)作;
4)跳轉(zhuǎn)至d)條。
g)“僅等待”類型的運(yùn)行過程如圖2(a)、圖2(c)所示:
1)讀取片段起始時(shí)刻t20;
2)判斷終止命令是否有效,無效則運(yùn)行本過程的3)條,有效則跳轉(zhuǎn)至本過程的5)條;
3)延時(shí)1ms后,讀取當(dāng)前時(shí)刻t21;
4)判斷(t21-t20)是否大于等待時(shí)間,否,則跳轉(zhuǎn)至本過程的2)條;是,則跳轉(zhuǎn)至本過程的5)條;
5)判斷終止命令是否有效,有效則跳轉(zhuǎn)至n)條,無效則將當(dāng)前動(dòng)作更新為運(yùn)行正常時(shí)的下個(gè)動(dòng)作后,跳轉(zhuǎn)至d)條。
h)“先執(zhí)行后等待”類型的運(yùn)行過程如圖2(a)、圖2(c)所示:
1)讀取片段起始時(shí)刻t20;
2)執(zhí)行當(dāng)前動(dòng)作的動(dòng)作內(nèi)容;
3)判斷運(yùn)行結(jié)果是否正常,正常則轉(zhuǎn)至本過程的4)條,否則轉(zhuǎn)至本過程的8)條;
4)判斷終止命令是否有效,無效則運(yùn)行本過程的5)條,有效則跳轉(zhuǎn)至本過程的7)條;
5)延時(shí)1ms后,讀取當(dāng)前時(shí)刻t21;
6)判斷(t21-t20)是否大于等待時(shí)間,否,則跳轉(zhuǎn)至本過程的4)條;是,則跳轉(zhuǎn)至本過程的7)條;
7)判斷是否終止命令有效或配置信息錯(cuò)誤,是,則跳轉(zhuǎn)至n)條;否,則將當(dāng)前動(dòng)作更新為運(yùn)行正常時(shí)的下個(gè)動(dòng)作后,跳轉(zhuǎn)至d)條;
8)存儲(chǔ)運(yùn)行結(jié)果,將當(dāng)前動(dòng)作更新為運(yùn)行異常時(shí)的下個(gè)動(dòng)作后,跳轉(zhuǎn)至d)條。
i)“先等待后執(zhí)行”類型的運(yùn)行過程如圖2(a)、圖2(c)所示:
1)讀取片段起始時(shí)刻t20;
2)判斷終止命令是否有效,無效則運(yùn)行本過程的3)條,有效則跳轉(zhuǎn)至本過程的5)條;
3)延時(shí)1ms后,讀取當(dāng)前時(shí)刻t21;
4)判斷(t21-t20)是否大于等待時(shí)間,否,則跳轉(zhuǎn)至本過程的2)條;是,則跳轉(zhuǎn)至本過程的5)條;
5)判斷終止命令是否有效,有效則跳轉(zhuǎn)至n)條,無效則跳轉(zhuǎn)至本過程的6)條;
6)執(zhí)行當(dāng)前動(dòng)作的動(dòng)作內(nèi)容;
7)判斷運(yùn)行結(jié)果是否正常,正常則將當(dāng)前動(dòng)作更新為運(yùn)行正常時(shí)的下個(gè)動(dòng)作后,跳轉(zhuǎn)至d)條;否則將當(dāng)前動(dòng)作更新為運(yùn)行異常時(shí)的下個(gè)動(dòng)作后,跳轉(zhuǎn)至d)條。
j)“正常則終止的周期行為”類型的運(yùn)行過程如圖2(a)、圖2(d)所示:
1)讀取片段起始時(shí)刻t30;
2)判斷終止命令是否有效,無效則運(yùn)行本過程的3)條,有效則跳轉(zhuǎn)至本過程的9)條;
3)執(zhí)行當(dāng)前動(dòng)作的動(dòng)作內(nèi)容;
4)判斷運(yùn)行結(jié)果是否正常,正常則運(yùn)行本過程的8)條,否則運(yùn)行本過程的5)條;
5)讀取當(dāng)前時(shí)刻t31;
6)判斷(t31-t30)是否大于等待時(shí)間,否,則延時(shí)1ms后跳轉(zhuǎn)至本過程的2)條;是,則跳轉(zhuǎn)至本過程的7)條;
7)存儲(chǔ)運(yùn)行結(jié)果,將當(dāng)前動(dòng)作更新為運(yùn)行異常時(shí)的下個(gè)動(dòng)作后,跳轉(zhuǎn)至本過程的9)條;
8)存儲(chǔ)運(yùn)行結(jié)果,將當(dāng)前動(dòng)作更新為運(yùn)行正常時(shí)的下個(gè)動(dòng)作后,跳轉(zhuǎn)至本過程的9)條;
9)判斷是否終止命令有效或配置信息錯(cuò)誤,是,則跳轉(zhuǎn)至n)條;否,則跳轉(zhuǎn)至d)條。
k)“異常則終止的周期行為”類型的運(yùn)行過程如圖2(a)、圖2(e)
所示:
1)讀取片段起始時(shí)刻t40;
2)判斷終止命令是否有效,無效則運(yùn)行本過程的3)條,有效則跳轉(zhuǎn)至本過程的9)條;
3)執(zhí)行當(dāng)前動(dòng)作的動(dòng)作內(nèi)容;
4)判斷運(yùn)行結(jié)果是否正常,正常則運(yùn)行本過程的5)條,否則運(yùn)行本過程的8)條;
5)讀取當(dāng)前時(shí)刻t41;
6)判斷(t41-t40)是否大于等待時(shí)間,否,則延時(shí)1ms后跳轉(zhuǎn)至本過程的2)條;是,則跳轉(zhuǎn)至本過程的7)條;
7)存儲(chǔ)運(yùn)行結(jié)果,將當(dāng)前動(dòng)作更新為運(yùn)行正常時(shí)的下個(gè)動(dòng)作后,跳轉(zhuǎn)至本過程的9)條;
8)存儲(chǔ)運(yùn)行結(jié)果,將當(dāng)前動(dòng)作更新為運(yùn)行異常時(shí)的下個(gè)動(dòng)作后,跳轉(zhuǎn)至本過程的9)條;
9)判斷是否終止命令有效或配置信息錯(cuò)誤,是,則跳轉(zhuǎn)至n)條;否,則跳轉(zhuǎn)至d)條。
l)“正常則終止的單次行為”類型的運(yùn)行過程如圖2(a)、圖2(f)所示:
1)讀取片段起始時(shí)刻t50;
2)判斷終止命令是否有效,無效則運(yùn)行本過程的3)條,有效則跳轉(zhuǎn)至本過程的9)條;
3)讀取當(dāng)前時(shí)刻t51;
4)判斷(t51-t0)是否大于執(zhí)行時(shí)刻,是,則運(yùn)行本過程的5)條;否,則跳轉(zhuǎn)至本過程的7)條;
5)執(zhí)行當(dāng)前動(dòng)作的動(dòng)作內(nèi)容,并存儲(chǔ)運(yùn)行結(jié)果;
6)判斷運(yùn)行結(jié)果是否正常,是,則將當(dāng)前動(dòng)作更新為運(yùn)行正常時(shí)的下個(gè)動(dòng)作后,跳轉(zhuǎn)至本過程的9)條;否,則將當(dāng)前動(dòng)作更新為運(yùn)行異常時(shí)的下個(gè)動(dòng)作后,跳轉(zhuǎn)至本過程的9)條;
7)判斷等待時(shí)間是否為0,是,則延時(shí)1ms后跳轉(zhuǎn)至本過程的2)條;否,則運(yùn)行本過程的8)條;
8)判斷(t51-t50)是否大于等待時(shí)間,否,則延時(shí)1ms后跳轉(zhuǎn)至本過程的2)條;是,則存儲(chǔ)運(yùn)行結(jié)果,將當(dāng)前動(dòng)作更新為運(yùn)行異常時(shí)的下個(gè)動(dòng)作后,跳轉(zhuǎn)至本過程的9)條;
9)判斷是否終止命令有效或配置信息錯(cuò)誤,是,則跳轉(zhuǎn)至n)條;否,則跳轉(zhuǎn)至d)條。
m)“異常則終止的單次行為”類型的運(yùn)行過程如圖2(a)、圖2(g)所示:
1)讀取片段起始時(shí)刻t60;
2)判斷終止命令是否有效,無效則運(yùn)行本過程的3)條,有效則跳轉(zhuǎn)至本過程的9)條;
3)讀取當(dāng)前時(shí)刻t61;
4)判斷(t61-t0)是否大于執(zhí)行時(shí)刻,是,則運(yùn)行本過程的5)條;否,則跳轉(zhuǎn)至本過程的7)條;
5)執(zhí)行當(dāng)前動(dòng)作的動(dòng)作內(nèi)容,并存儲(chǔ)運(yùn)行結(jié)果;
6)判斷運(yùn)行結(jié)果是否正常,是,則將當(dāng)前動(dòng)作更新為運(yùn)行正常時(shí)的下個(gè)動(dòng)作后,跳轉(zhuǎn)至本過程的9)條;否,則將當(dāng)前動(dòng)作更新為運(yùn)行異常時(shí)的下個(gè)動(dòng)作后,跳轉(zhuǎn)至本過程的9)條;
7)判斷等待時(shí)間是否為0,是,則延時(shí)1ms后跳轉(zhuǎn)至本過程的2)條;否,則運(yùn)行本過程的8)條;
8)判斷(t61-t60)是否大于等待時(shí)間,否,則延時(shí)1ms后跳轉(zhuǎn)至本過程的2)條;是,則存儲(chǔ)運(yùn)行結(jié)果,將當(dāng)前動(dòng)作更新為運(yùn)行正常時(shí)的下個(gè)動(dòng)作后,跳轉(zhuǎn)至本過程的9)條;
9)判斷是否終止命令有效或配置信息錯(cuò)誤,是,則跳轉(zhuǎn)至n)條;否,則跳轉(zhuǎn)至d)條。
n)執(zhí)行控制流的出口處理;
o)置控制流運(yùn)行標(biāo)志為無效。
綜上所述,本發(fā)明實(shí)施例提供了一種順序控制方法,實(shí)現(xiàn)了對(duì)順序控制流程的抽象、分解和重構(gòu),可有效提高順序控制類軟件的開發(fā)效率,降低開發(fā)的錯(cuò)誤率,提高可維護(hù)性。
本領(lǐng)域技術(shù)人員可以理解,實(shí)現(xiàn)上述實(shí)施例方法的全部或部分流程,可以通過計(jì)算機(jī)程序來指令相關(guān)的硬件來完成,所述的程序可存儲(chǔ)于計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)中。其中,所述計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)為磁盤、光盤、只讀存儲(chǔ)記憶體或隨機(jī)存儲(chǔ)記憶體等。
以上所述,僅為本發(fā)明較佳的具體實(shí)施方式,但本發(fā)明的保護(hù)范圍并不局限于此,任何熟悉本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到的變化或替換,都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍之內(nèi)。