軟PLC任務(wù)線程的調(diào)度|加工中心
3. 3軟PLC任務(wù)線程的調(diào)度3. 3. 1多線程多線程程序是指在一個(gè)進(jìn)程中同時(shí)運(yùn)行多個(gè)線程,每個(gè)線程完成不同的任 務(wù)。采用多線程編程可充分利用進(jìn)程中的共享資源、減少進(jìn)程切換所需的資源切 換、從而大幅提升CPU的使用效率,多用于需要花大量時(shí)間處理以及處理大量 10數(shù)據(jù)等耗時(shí)的應(yīng)用程序。軟PLC運(yùn)行系統(tǒng)主要是對(duì)I/O輸入輸出影響區(qū)的數(shù)據(jù)進(jìn)行處理,采用多線 程編程可提升控制系統(tǒng)的性能,因此在程序啟動(dòng)后主線程會(huì)為每個(gè)任務(wù)創(chuàng)建對(duì)應(yīng) 的線程。然而通用PC機(jī)只有一個(gè)CPU,每一時(shí)刻只能執(zhí)行一個(gè)任務(wù)線程,多個(gè) 線程之間通過(guò)快速地進(jìn)行切換來(lái)實(shí)現(xiàn)運(yùn)行。因此要實(shí)現(xiàn)軟PLC運(yùn)行系統(tǒng)多任務(wù) 的并行運(yùn)行就必須對(duì)任務(wù)線程進(jìn)行調(diào)度,確保每個(gè)任務(wù)順序執(zhí)行。下面在介紹操 作系統(tǒng)調(diào)度原理的基礎(chǔ)上給出本軟PLC系統(tǒng)的調(diào)度方法。3. 3. 2線程調(diào)度原理線程是操作系統(tǒng)的最小調(diào)度單位。對(duì)于通用PC機(jī)而言,計(jì)算機(jī)操作系統(tǒng)以 輪轉(zhuǎn)方式向每個(gè)任務(wù)線程提供運(yùn)行時(shí)間片,利用“中斷”機(jī)制對(duì)線程的運(yùn)行狀態(tài) 進(jìn)行切換,從而確保每個(gè)任務(wù)線程都能得到CPU時(shí)間片而被執(zhí)行。3. 3. 3軟PLC運(yùn)行系統(tǒng)任務(wù)線程的調(diào)度軟PLC運(yùn)行系統(tǒng)需要對(duì)系統(tǒng)管理任務(wù)、通信任務(wù)、程序執(zhí)行任務(wù)以及I/O 讀寫任務(wù)進(jìn)行調(diào)度。通信任務(wù)包括軟PLC與HMI進(jìn)程的通訊任務(wù)、軟PLC與軟 CNC的通訊任務(wù),I/O讀寫任務(wù)包括I/O讀任務(wù)和I/O寫任務(wù)。每個(gè)任務(wù)線程對(duì) 應(yīng)就緒、運(yùn)行、終止和阻塞四種狀態(tài),因此對(duì)軟PLC運(yùn)行系統(tǒng)多個(gè)任務(wù)的調(diào)度 可通過(guò)改變?nèi)蝿?wù)線程的狀態(tài)來(lái)實(shí)現(xiàn)。本文結(jié)合以下兩種方式對(duì)任務(wù)線程進(jìn)行調(diào) 度。 直接調(diào)度直接調(diào)度按任務(wù)執(zhí)行的先后順序設(shè)定任務(wù)線程的優(yōu)先級(jí)進(jìn)行調(diào)度,使任務(wù)線 程隊(duì)列中的優(yōu)先級(jí)最高的任務(wù)優(yōu)先獲得CPU時(shí)間片而被操作系統(tǒng)調(diào)用執(zhí)行。RTX實(shí)時(shí)子系統(tǒng)提供了 128個(gè)線程優(yōu)先級(jí),其系統(tǒng)內(nèi)核按照優(yōu)先級(jí)從高到 低的順序安排任務(wù)線程占有CPU資源。由于采用搶占式調(diào)度算法,所以RTX允 許高優(yōu)先級(jí)的任務(wù)打斷正在運(yùn)行的低優(yōu)先級(jí)任務(wù)線程,以此搶占對(duì)CPU的控制 權(quán),這非常方便我們對(duì)軟PLC運(yùn)行系統(tǒng)的每個(gè)任務(wù)線程進(jìn)行調(diào)度和管理。在軟PLC運(yùn)行系統(tǒng)的設(shè)計(jì)過(guò)程中,系統(tǒng)任務(wù)管理線程負(fù)責(zé)軟PLC運(yùn)行系統(tǒng) 所有任務(wù)的調(diào)度,不應(yīng)被軟PLC系統(tǒng)中的其它任務(wù)線程所打斷,因此設(shè)置為第 一優(yōu)先級(jí)。通訊任務(wù)線程和I/O讀寫任務(wù)線程用于提供操作數(shù)和指令,是執(zhí)行用 戶程序的先決條件,所以設(shè)置為第二優(yōu)先級(jí)。程序執(zhí)行任務(wù)設(shè)置為第三優(yōu)先級(jí), 其中快速執(zhí)行任務(wù)線程的優(yōu)先級(jí)高于普通執(zhí)行任務(wù)線程。 間接調(diào)度間接調(diào)度采用同步對(duì)象進(jìn)行調(diào)度,利用多個(gè)任務(wù)為爭(zhēng)奪同一臨界資源引起的 互斥來(lái)協(xié)調(diào)多任務(wù)的運(yùn)行。也就是說(shuō)只有獲得同步對(duì)象句柄的任務(wù)線程才能被執(zhí)行,對(duì)共享資源進(jìn)行操作,未獲得的任務(wù)線程只能等待同步對(duì)象被釋放。RTX提供四種同步對(duì)象:信號(hào)量對(duì)象Semaphore、事件對(duì)象Event、互斥體 X寸象Mutex和共享內(nèi)存對(duì)象SharedMemory。其中事件對(duì)象Event具有使用簡(jiǎn)單、 易于實(shí)現(xiàn)多個(gè)任務(wù)的同步運(yùn)行等優(yōu)點(diǎn),所以軟PLC運(yùn)行系統(tǒng)為每個(gè)任務(wù)創(chuàng)建了 相應(yīng)的事件對(duì)象,利用函數(shù)RtWaitForSingleObjectG等待單個(gè)事件對(duì)象的信號(hào)狀 態(tài),以及函數(shù)RtWaitForSingleObjects〇等待多個(gè)事件對(duì)象的信號(hào)狀態(tài)。當(dāng)?shù)却龝r(shí) 間達(dá)到設(shè)定值時(shí),改變當(dāng)前執(zhí)行線程的狀態(tài),轉(zhuǎn)去執(zhí)行獲得同步事件對(duì)象句柄的 任務(wù)線程,執(zhí)行完返回當(dāng)前任務(wù)線程繼續(xù)執(zhí)行;若設(shè)定的等待時(shí)間為INFINITE, 則當(dāng)前任務(wù)線程一直等待同步事件對(duì)象句柄。這使程序運(yùn)行過(guò)程中只有一個(gè)任務(wù) 線程能夠操作數(shù)據(jù)共享區(qū),從而保證數(shù)據(jù)訪問(wèn)的安全性。 軟PLC運(yùn)行系統(tǒng)創(chuàng)建的事件對(duì)象初始時(shí)都處于FALSE(無(wú)信號(hào))狀態(tài),在事 件被觸發(fā)后變?yōu)橛行盘?hào)狀態(tài),事件所對(duì)應(yīng)的任務(wù)線程獲得臨界區(qū)資源被執(zhí)行,然 后利用RtResetEventG函數(shù)重置為無(wú)信號(hào)狀態(tài),讓軟PLC運(yùn)行系統(tǒng)觸發(fā)其它事件 對(duì)象,以此協(xié)調(diào)多任務(wù)的運(yùn)行。軟PLC任務(wù)線程的調(diào)度過(guò)程如圖3.8所示。本文采摘自“五軸精工加工中心軟PLC控制系統(tǒng)的研究”,因?yàn)榫庉嬂щy導(dǎo)致有些函數(shù)、表格、圖片、內(nèi)容無(wú)法顯示,有需要者可以在網(wǎng)絡(luò)中查找相關(guān)文章!本文由海天精工整理發(fā)表文章均來(lái)自網(wǎng)絡(luò)僅供學(xué)習(xí)參考,轉(zhuǎn)載請(qǐng)注明!