一種工業(yè)控制系統(tǒng)邏輯斷點(diǎn)調(diào)試功能的實(shí)現(xiàn)方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明屬于工業(yè)自動(dòng)化控制系統(tǒng)技術(shù)領(lǐng)域,更具體地說,涉及一種工業(yè)控制系統(tǒng) 邏輯斷點(diǎn)調(diào)試功能的實(shí)現(xiàn)方法。
【背景技術(shù)】
[0002] 在工業(yè)自動(dòng)化控制中,由組態(tài)軟件與控制器(也稱為上位機(jī)與下位機(jī))組成的控制 系統(tǒng)廣泛的應(yīng)用于各控制領(lǐng)域:如分布式控制系統(tǒng)(DCS)、可編程控制器(PLC)等。組態(tài)軟件 負(fù)責(zé)生成算法程序,控制器負(fù)責(zé)執(zhí)行程序?qū)崿F(xiàn)控制功能。在很多應(yīng)用場(chǎng)合中,算法程序都具 有一定的復(fù)雜性,而算法程序正確與否直接關(guān)系到工業(yè)控制的正確性及安全性。因此提供 一套準(zhǔn)確、高效的算法程序調(diào)試方法對(duì)工業(yè)控制系統(tǒng)具有重要的意義。
[0003] 行業(yè)內(nèi)傳統(tǒng)方式多采用替換指令的方式來觸發(fā)中斷,已完成斷點(diǎn)調(diào)試功能。但該 方法在邏輯運(yùn)行過程中替換指令具有較高的風(fēng)險(xiǎn)性,邏輯運(yùn)行存在安全隱患,同時(shí)如果在 中斷后下位機(jī)出現(xiàn)異??赡軣o法將指令恢復(fù)至正常執(zhí)行狀態(tài)。
【發(fā)明內(nèi)容】
[0004] 有鑒于此,本發(fā)明提供一種工業(yè)控制系統(tǒng)邏輯斷點(diǎn)調(diào)試功能的實(shí)現(xiàn)方法,用來完 成算法邏輯調(diào)試功能,通過引入中斷函數(shù)調(diào)用的方式避免在運(yùn)行時(shí)修改程序指令。具體的 包括:邏輯組態(tài)頁(yè)面設(shè)置或取消斷點(diǎn),運(yùn)行過程中提供運(yùn)行到斷點(diǎn)Run to、單步Step In以 及單步Step Over的調(diào)試方法,以此來完成對(duì)算法邏輯的調(diào)試。
[0005] 本發(fā)明的技術(shù)方案實(shí)現(xiàn)如下所述:
[0006] -種工業(yè)控制系統(tǒng)邏輯斷點(diǎn)調(diào)試功能的實(shí)現(xiàn)方法,該方法包括邏輯粧點(diǎn)表生成、 中斷邏輯指令生成、調(diào)試命令設(shè)計(jì);其特征在于,所述實(shí)現(xiàn)方法包括以下步驟:
[0007] (1)定義原子操作,生成邏輯粧點(diǎn):定義邏輯執(zhí)行原子操作為不可再拆分的運(yùn)算及 函數(shù)調(diào)用,每個(gè)原子操作處對(duì)應(yīng)一個(gè)邏輯粧點(diǎn),標(biāo)識(shí)該原子操作執(zhí)行前可以觸發(fā)程序中斷, 每一個(gè)邏輯粧點(diǎn)對(duì)應(yīng)一個(gè)粧點(diǎn)狀態(tài)變量,每個(gè)粧點(diǎn)狀態(tài)變量標(biāo)識(shí)對(duì)應(yīng)該邏輯粧點(diǎn)的原子操 作是否執(zhí)行,算法邏輯中所有的邏輯粧點(diǎn)構(gòu)成邏輯粧點(diǎn)表;
[0008] (2)調(diào)用中斷函數(shù),生成帶中斷邏輯的指令并下發(fā)至下位機(jī):識(shí)別邏輯粧點(diǎn),分配 其對(duì)應(yīng)的粧點(diǎn)狀態(tài)變量,同時(shí)在需要中斷的算法邏輯前添加函數(shù)調(diào)用,即在需要中斷的算 法邏輯前增加下位機(jī)提供的函數(shù)以生成帶中斷邏輯的可執(zhí)行指令;將帶中斷邏輯的可執(zhí)行 指令和邏輯粧點(diǎn)對(duì)應(yīng)的狀態(tài)變量的偏移地址信息下發(fā)至下位機(jī);下位機(jī)只需要實(shí)現(xiàn)中斷函 數(shù)即可完成斷點(diǎn)功能;
[0009] (3)設(shè)計(jì)調(diào)試命令,完成邏輯斷點(diǎn)調(diào)試功能。
[0010]本發(fā)明還進(jìn)一步包括以下優(yōu)選方案:
[0011] 在步驟(1)中,同時(shí)建立原子操作與邏輯組態(tài)界面的對(duì)應(yīng)關(guān)系,用于中斷發(fā)生時(shí)斷 點(diǎn)位置的顯示。
[0012] 在步驟(2)中,函數(shù)內(nèi)中斷方式由控制器自由選擇,在函數(shù)調(diào)用時(shí)將該粧點(diǎn)對(duì)應(yīng)的 粧點(diǎn)狀態(tài)變量傳入,下位機(jī)產(chǎn)生中斷后將該信息返回,邏輯組態(tài)界面通過維護(hù)邏輯粧點(diǎn)與 邏輯組態(tài)界面對(duì)應(yīng)關(guān)系,在邏輯組態(tài)界面中顯示中斷位置。
[0013] 在步驟(3)中,調(diào)試命令包括"運(yùn)行到斷點(diǎn)Run to"、"單步Step In"、"單步Step over",并通過以下具體步驟實(shí)現(xiàn)調(diào)試功能:
[0014] (31)用戶設(shè)置或取消斷點(diǎn),生成斷點(diǎn)表,將斷點(diǎn)表下發(fā)至下位機(jī):用戶在組態(tài)界面 設(shè)置或取消斷點(diǎn)時(shí),根據(jù)邏輯組態(tài)界面的特征,進(jìn)行設(shè)置斷點(diǎn)的操作,在邏輯粧點(diǎn)表中挑選 可以設(shè)置斷點(diǎn)的邏輯粧點(diǎn)構(gòu)成斷點(diǎn)表,并將生成的斷點(diǎn)表通知下位機(jī);
[0015] (32)判斷當(dāng)前調(diào)試命令是否為"運(yùn)行到斷點(diǎn)Run to",如果不是則進(jìn)入步驟(33); 否則,當(dāng)采用"運(yùn)行到斷點(diǎn)Run to"的調(diào)試命令時(shí),邏輯組態(tài)軟件將該調(diào)試命令下發(fā)至下位 機(jī);下位機(jī)接受到該調(diào)試命令后,將所有粧點(diǎn)狀態(tài)變量首先置為0,然后根據(jù)設(shè)置的斷點(diǎn)表, 將需要設(shè)置斷點(diǎn)的粧點(diǎn)狀態(tài)變量設(shè)置為1,即完成運(yùn)行至斷點(diǎn)功能;
[0016] (33)判斷當(dāng)前調(diào)試命令是否為"單步Step In",如果不是則進(jìn)入步驟(34);否則, 當(dāng)采用"單步Step In"的調(diào)試命令時(shí),邏輯組態(tài)軟件將該調(diào)試命令下發(fā)至下位機(jī);下位機(jī)接 受到該調(diào)試命令后,將所有粧點(diǎn)所對(duì)應(yīng)的狀態(tài)變量置為1,表示所有邏輯執(zhí)行原子操作處會(huì) 觸發(fā)中斷;當(dāng)滿足上述中斷條件時(shí),組態(tài)邏輯算法中執(zhí)行過程中則將調(diào)用步驟(2)中下位機(jī) 提供的用于中斷邏輯的函數(shù),組態(tài)軟件會(huì)直接進(jìn)入該函數(shù)體內(nèi)部實(shí)現(xiàn)中斷。
[0017] (34)判斷當(dāng)前調(diào)試命令是否為"單步Step Over",如果不是則不做任何處理;否 貝1J,當(dāng)采用"單步Step Over"的調(diào)試命令時(shí),邏輯組態(tài)軟件將該調(diào)試命令下發(fā)至下位機(jī);下 位機(jī)接受到該調(diào)試命令后,需要判斷當(dāng)前邏輯執(zhí)行原子操作的類型:若原子操作非函數(shù)調(diào) 用時(shí),Step Over的處理與Step In相同;若原子操作為函數(shù)調(diào)用時(shí),Step Over需要執(zhí)行完 被調(diào)函數(shù)并在調(diào)用后的邏輯處產(chǎn)生中斷,同時(shí)若調(diào)用函數(shù)內(nèi)部設(shè)置斷點(diǎn)時(shí),將設(shè)置斷點(diǎn)的 的粧點(diǎn)狀態(tài)變量置為1;即原子操作非函數(shù)調(diào)用時(shí),將所有粧點(diǎn)狀態(tài)變量置為1;原子操作為 函數(shù)調(diào)用時(shí),首先將所有粧點(diǎn)狀態(tài)變量置為1,然后將函數(shù)執(zhí)行體內(nèi)所有粧點(diǎn)狀態(tài)變量置為 〇,最后將設(shè)置斷點(diǎn)的粧點(diǎn)狀態(tài)變量置為1。
[0018] 相對(duì)于現(xiàn)有技術(shù),本發(fā)明具有以下有益的技術(shù)效果:
[0019] 本發(fā)明提供一套準(zhǔn)確、高效的算法程序調(diào)試方法,提高了算法程序調(diào)試效率,減少 算法程序邏輯出錯(cuò)的可能性,進(jìn)而確保受控的工業(yè)控制系統(tǒng)運(yùn)行的正確性;本發(fā)明對(duì)工業(yè) 控制系統(tǒng)安全運(yùn)行具有重要的積極意義。
【附圖說明】
[0020] 為了更清楚地說明本發(fā)明實(shí)施例的技術(shù)方案,下面將對(duì)實(shí)施例中所需要使用的附 圖作簡(jiǎn)單地介紹。
[0021] 圖1為本發(fā)明工業(yè)控制系統(tǒng)邏輯斷點(diǎn)調(diào)試功能的實(shí)現(xiàn)方法流程示意圖;
[0022] 圖2為本發(fā)明實(shí)施例提供的工業(yè)控制系統(tǒng)邏輯斷點(diǎn)調(diào)試功能的實(shí)現(xiàn)方法中生成帶 斷點(diǎn)調(diào)試邏輯的可執(zhí)行代碼的流程示意圖;
[0023] 圖3為本發(fā)明提供的一種工業(yè)控制系統(tǒng)邏輯斷點(diǎn)調(diào)試功能的實(shí)現(xiàn)方法中生成斷點(diǎn) 調(diào)試可執(zhí)行指令的邏輯結(jié)構(gòu)圖;
[0024] 圖4為本發(fā)明實(shí)施例提供的斷點(diǎn)調(diào)試命令處理流程;
[0025] 圖5為本發(fā)明實(shí)施例提供的粧點(diǎn)對(duì)應(yīng)的狀態(tài)變量示意圖;
[0026] 其中圖5(1)為原始的粧點(diǎn)對(duì)應(yīng)的狀態(tài)變量示意圖,5(2)為執(zhí)行"設(shè)置斷點(diǎn)"調(diào)試命 令后的粧點(diǎn)對(duì)應(yīng)的狀態(tài)變量示意圖,5 (3)為執(zhí)行"運(yùn)行至斷點(diǎn)Run To"調(diào)試命令后的粧點(diǎn)對(duì) 應(yīng)的狀態(tài)變量示意圖,5(4)為執(zhí)行"單步Step Into"調(diào)試命令后的粧點(diǎn)對(duì)應(yīng)的狀態(tài)變量示 意圖,5(5)為為執(zhí)行"單步St印Over"調(diào)試命令后的粧點(diǎn)對(duì)應(yīng)的狀態(tài)變量示意圖。
【具體實(shí)施方式】
[0027] 下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完 整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一種實(shí)施例,而不是全部的實(shí)施例。
[0028]本具體實(shí)施例為該方法在滿足IEC61131-3標(biāo)準(zhǔn)的組態(tài)軟件中的應(yīng)用方案。
[0029] 圖1為本發(fā)明提供的一種工業(yè)控制系統(tǒng)邏輯斷點(diǎn)調(diào)試功能的實(shí)現(xiàn)的流程示意圖, 所述邏輯斷點(diǎn)調(diào)試功能的實(shí)現(xiàn)方法具體包括以下步驟:
[0030] 步驟1,定義原子操作,生成邏輯粧點(diǎn):定義邏輯執(zhí)行原子操作為不可再拆分的運(yùn) 算及函數(shù)調(diào)用,每個(gè)原子操作處對(duì)應(yīng)一個(gè)邏輯的粧點(diǎn),標(biāo)識(shí)該邏輯執(zhí)行前可以觸發(fā)程序中 斷,每一個(gè)粧點(diǎn)對(duì)應(yīng)一個(gè)粧點(diǎn)狀態(tài)變量,算法邏輯中所有的粧點(diǎn)信息構(gòu)成邏輯粧點(diǎn)表。
[0031] 每個(gè)程序組織單元(以下稱P0U)都需要維護(hù)一張邏輯粧點(diǎn)表。邏輯粧點(diǎn)表中的每 一條粧點(diǎn)信息包含三部分內(nèi)容,如表1所示:第一部分為邏輯粧點(diǎn)所對(duì)應(yīng)的組態(tài)軟件界面的 位置信息;第二部分為邏輯粧點(diǎn)對(duì)應(yīng)的中間語(yǔ)法樹結(jié)點(diǎn)的位置信息;第三部分為邏輯粧點(diǎn) 所對(duì)應(yīng)的狀態(tài)變量的偏移地址信息。
[0032]表1邏輯粧點(diǎn)信息所包含內(nèi)容 「orml
L0034」上述操作過程是在組態(tài)軟件編譯前端完成的,組態(tài)過的算法邏輯均被翻譯成中間 語(yǔ)法樹,中間語(yǔ)法樹作為步驟2的輸入數(shù)據(jù)源使用。經(jīng)過組態(tài)軟件的編譯前端處理后,每個(gè) 原子操作處對(duì)應(yīng)一個(gè)邏輯粧點(diǎn)的所在組態(tài)界面位置信息和中間語(yǔ)法樹結(jié)點(diǎn)位置信息被記 錄下來,從而完成邏輯粧點(diǎn)信息中第一部分和第二部分的填充;同時(shí),邏輯粧點(diǎn)所對(duì)應(yīng)的中 間語(yǔ)法樹結(jié)點(diǎn)被特殊標(biāo)記,以便在后續(xù)步驟中被識(shí)別。
[0035] 步驟2,調(diào)用中斷函數(shù),生成帶中斷邏輯的指令并下發(fā)至下位機(jī):識(shí)別邏輯粧點(diǎn),分 配其對(duì)應(yīng)的狀態(tài)變量,同時(shí)在中斷邏輯前添加函數(shù)調(diào)用,即在需要中斷的算法邏輯前增加 下位機(jī)提供的函數(shù)以生成帶中斷邏輯的可執(zhí)行指令。
[0036] 上述操作過程是在組態(tài)軟件編譯后端完成,如圖2所示。對(duì)于步驟1中輸出的中間