主線程接收到消息后即調(diào)用WriteToPort函數(shù)向串口發(fā)送命令,確認(rèn)命令發(fā)送完畢后把“發(fā)送”事件標(biāo)記為OFF,“接收”事件標(biāo)記為ON.同樣道理,監(jiān)視線程監(jiān)測到“接收”事件標(biāo)記為ON時(shí)給主線程發(fā)送消息,主線程調(diào)用ReceiveChar(TSerialPort*port,COMSTATcomstat)函數(shù)接收PLC響應(yīng)代碼。分析結(jié)果在屏幕上顯示。此時(shí),監(jiān)視線程把“發(fā)送”事件標(biāo)記為ON,下一個(gè)循環(huán)到來時(shí),監(jiān)視線程向串口發(fā)送命令并接收PLC的響應(yīng)代碼。在該系統(tǒng)中,用PLC控制變頻器,用計(jì)算機(jī)監(jiān)控PLC.在一個(gè)循環(huán)內(nèi),監(jiān)視線程首先檢測有無鼠標(biāo)點(diǎn)擊指示燈,如有則首先發(fā)送代碼到串口中,使PLC相應(yīng)指示燈為ON;否則發(fā)送預(yù)定義代碼到串口中,循環(huán)讀取PLC各內(nèi)存區(qū)數(shù)據(jù),并在下一個(gè)循環(huán)內(nèi)讀取PLC響應(yīng)碼,分析后在屏幕上做相應(yīng)顯示。
由于監(jiān)視線程一個(gè)循環(huán)內(nèi)的代碼很少且耗時(shí)較多的串口處理程序均采用同步處理方式,監(jiān)視線程只需要向主線程發(fā)送消息,不等主線程響應(yīng)就返回,因此循環(huán)周期極短,足以滿足適時(shí)控制的要求。利用Windows的消息處理機(jī)制對響應(yīng)結(jié)果進(jìn)行分析。同時(shí),串口監(jiān)視線程繼續(xù)監(jiān)視串口,主線程繼續(xù)接收用戶輸入并顯示W(wǎng)indows分析結(jié)果。程序中同樣要對計(jì)算機(jī)向PLC發(fā)送的命令代碼進(jìn)行校驗(yàn),命令格式、校驗(yàn)規(guī)則及校驗(yàn)程序同第一種方法。主線程程序框圖,監(jiān)視線程程序框圖如圖4所示。3兩種方法的對比分析在BCB中利用Windows封裝的API函數(shù)開發(fā)串行通訊程序比較復(fù)雜,它有兩個(gè)線程并列運(yùn)行,可同時(shí)處理大量數(shù)據(jù),其準(zhǔn)確性高,適時(shí)性好,適用于對連續(xù)生產(chǎn)過程中對通訊響應(yīng)要求嚴(yán)格、適時(shí)性強(qiáng)、數(shù)據(jù)量大的自動化工廠中。而在BCB中利用ACTIVEX控件開發(fā)的串行通訊程序只適用于小型離散控制系統(tǒng)中,開發(fā)成本較低。總結(jié)在計(jì)算機(jī)與PLC的通訊中,有3種方式可以采用,即:中斷方式、查詢方式和事件驅(qū)動方式。應(yīng)用該電路系統(tǒng)已投入運(yùn)行,經(jīng)考核測試,工作穩(wěn)定可靠。