基于上位機(jī)的主線程和通信子線程分工為主模塊負(fù)責(zé)根據(jù)操作人員的動(dòng)作更改系統(tǒng)設(shè)定數(shù)據(jù)、發(fā)出控制要求;通信模塊負(fù)責(zé)確保用戶的設(shè)定數(shù)據(jù)和控制命令及時(shí)送給PLC,然后根據(jù)PLC送回的數(shù)據(jù)刷新主線程的數(shù)據(jù)和命令鍵。上位機(jī)軟件在Win95上用Delphi實(shí)現(xiàn)。主線程主線程對(duì)各個(gè)模塊進(jìn)行統(tǒng)一管理,負(fù)責(zé)整個(gè)系統(tǒng)的初始化、參數(shù)配置信號(hào)、控制信號(hào)的傳遞,模擬控制界面的數(shù)據(jù)更新及統(tǒng)計(jì)報(bào)表、打印,數(shù)據(jù)庫(kù)的產(chǎn)生和維護(hù)等。由于要監(jiān)控的對(duì)象太多,為了使畫面簡(jiǎn)潔,在界面設(shè)計(jì)上采用狀態(tài)顯示和操作鍵合一的方法。即畫面上的控件一直實(shí)時(shí)顯示對(duì)應(yīng)對(duì)象的實(shí)際狀態(tài),同時(shí)操作人員可以通過(guò)鼠標(biāo)點(diǎn)擊來(lái)發(fā)出改變其狀態(tài)的控制命令,并由PLC所上傳的數(shù)據(jù)進(jìn)行畫面狀態(tài)的刷新。這樣的數(shù)據(jù)庫(kù)便于管理和統(tǒng)計(jì)。操作人員換班時(shí),軟件自動(dòng)生成對(duì)應(yīng)表格,并進(jìn)行相應(yīng)的日、月、年的報(bào)表統(tǒng)計(jì)。用戶可以選擇報(bào)表打印。另外,數(shù)據(jù)庫(kù)表格根據(jù)操作人員上班簽到時(shí)輸入的日期命名,與工控機(jī)的系統(tǒng)時(shí)鐘無(wú)關(guān)。這樣,當(dāng)系統(tǒng)時(shí)間被有意(如為避免CIH病毒而修改日期)或無(wú)意的改變時(shí),不影響數(shù)據(jù)庫(kù)的統(tǒng)計(jì)和報(bào)表。
線程間通信為了保證線程之間的雙向通信,軟件中設(shè)計(jì)了3種通信方式:共享數(shù)據(jù)區(qū)雙方以互斥方式訪問(wèn)該數(shù)據(jù)區(qū)。命令管理器用于主線程向子線程發(fā)送命令。由于通信子線程后臺(tái)運(yùn)行,無(wú)法接收消息,所以設(shè)計(jì)了該命令管理器模擬Win95的消息處理機(jī)制。操作人員有控制動(dòng)作時(shí),主線程往命令管理器中添加命令,子線程則循環(huán)讀取其中的命令,解釋后發(fā)給PLC,并檢查發(fā)送的命令是否正常執(zhí)行;PLC執(zhí)行后結(jié)果正確,則清除該命令,否則繼續(xù)發(fā)送直到PLC送回結(jié)果為止。發(fā)消息用于子線程向主線程發(fā)送消息,如:存盤消息,串行口通信異常消息等。為保證線程之間的同步,通過(guò)臨界區(qū)對(duì)象保證兩線程互斥訪問(wèn)共享數(shù)據(jù)和命令管理器。同一時(shí)間內(nèi),只允許一個(gè)線程對(duì)其進(jìn)行操作。